Powerbi 使用COUNTAX和FILTER计算Power BI中的TRUE()和False()

Powerbi 使用COUNTAX和FILTER计算Power BI中的TRUE()和False(),powerbi,dax,powerbi-desktop,Powerbi,Dax,Powerbi Desktop,我在包含布尔值(0 | 1)的表(表名称)中有一列(列名称)。我正在尝试获取每个值的计数。例如,我总共有1500行,我希望有两个度量值显示700为真,而800为假 我尝试了以下方法,但每种方法都只给出了行的总数(1500): 我完全糊涂了 我甚至不确定在这一点上是否使用了正确的DAX函数。以下是一些可能性: True_Measure = SUMX(Table_Name, 1*Table_Name[Column_Name]) True_Measure = SUMX(Table_Name, 1*(T

我在包含布尔值(0 | 1)的表(表名称)中有一列(列名称)。我正在尝试获取每个值的计数。例如,我总共有1500行,我希望有两个度量值显示700为真,而800为假

我尝试了以下方法,但每种方法都只给出了行的总数(1500):

我完全糊涂了


我甚至不确定在这一点上是否使用了正确的DAX函数。

以下是一些可能性:

True_Measure = SUMX(Table_Name, 1*Table_Name[Column_Name])
True_Measure = SUMX(Table_Name, 1*(Table_Name[Column_Name] = TRUE()))

False_Measure = SUMX(Table_Name, 1*(Table_Name[Column_Name] = FALSE()))
False_Measure = COUNTROWS(Table_Name) - [True_Measure]
在大多数情况下,我使用
1*
True/False
布尔值强制为数字
0
1


您也可以在筛选表上使用
COUNTROWS

True_Measure  = COUNTROWS(FILTER(Table_Name, Table_Name[Column_Name] = TRUE()))
False_Measure = COUNTROWS(FILTER(Table_Name, Table_Name[Column_Name] = FALSE()))

如果您真的想使用
COUNTAX
,那么它将如下所示:

True_Measure  = COUNTAX(FILTER(Table_Name, Table_Name[Column_Name] = TRUE()), 1)
False_Measure = COUNTAX(FILTER(Table_Name, Table_Name[Column_Name] = FALSE()), 1)

问题出在COUNTAX()函数的第二个参数中。它应该是要计数的列/项,而不是列出的同一个筛选器项

因此,这些函数应该为您提供所需的结果:

False_Measure = COUNTAX(FILTER('Table_Name', 'Table_Name'[Column_Name]=FALSE()), [Column_Name])

True_Measure = COUNTAX(FILTER('Table_Name', 'Table_Name'[Column_Name]=TRUE()), [Column_Name])

此功能的文档已列出。

此解决方案非常完美。我考虑的路线需要3个额外的措施,不支持向下钻取。因此,这在各方面都是优越的。(注意:我确实发现我在问题中使用的DAX确实有效。当我创建问题时,我在导入时遇到了数据问题,这打破了我的语法。)我在解决方案中发现了一个有趣的特性。如果您在Power BI中的许多视觉效果中使用该度量值,则应在度量值末尾添加+0。否则,如果度量值返回时没有匹配项,则结果值不是数字。+0强制它返回0。例如,这将为您提供一个数值,即使度量值没有匹配项:False\u Measure=COUNTAX(FILTER('Table\u Name','Table\u Name'[Column\u Name]=False(),[Column\u Name])。这不适用于
TRUE()
False()
。Power BI返回错误消息:
DAX比较操作不支持将文本类型的值与True/False类型的值进行比较。考虑使用值或格式化函数来转换其中的一个值。听起来好像你有一个文本列而不是一个布尔列。你必须和同一类型的比较。
False_Measure = COUNTAX(FILTER('Table_Name', 'Table_Name'[Column_Name]=FALSE()), [Column_Name])

True_Measure = COUNTAX(FILTER('Table_Name', 'Table_Name'[Column_Name]=TRUE()), [Column_Name])