Powerbi 如何使用dax根据值计算非空行数

Powerbi 如何使用dax根据值计算非空行数,powerbi,dax,powerpivot,Powerbi,Dax,Powerpivot,我有一个带有数值和空白记录的表。我试图计算一些不为空且大于20的行 +--------+ | VALUES | +--------+ | 2 | | 0 | | 13 | | 40 | | | | 1 | | 200 | | 4 | | 135 | | | | 35 | +--------+ 我尝试了不同的选项,但不断出现下一个错误:“无法将文本类型的值“”转换为数字类型”。我知道空白单元格

我有一个带有数值和空白记录的表。我试图计算一些不为空且大于20的行

+--------+
| VALUES |
+--------+
|      2 |
|      0 |
|     13 |
|     40 |
|        |
|      1 |
|    200 |
|      4 |
|    135 |
|        |
|     35 |
+--------+
我尝试了不同的选项,但不断出现下一个错误:“无法将文本类型的值“”转换为数字类型”。我知道空白单元格被视为文本,因此我的过滤器(>20)无法工作。将空白值转换为“0”不是一个选项,因为我以后需要使用相同的值来计算平均值和中值

CALCULATE(
    COUNTROWS(Table3),
    VALUE(Table3[VALUES]) > 20
    )
或因此获得“10”:

=CALCULATE(
    COUNTROWS(ALLNOBLANKROW(Table3[VALUES])),
    VALUE(Table3[VALUES]) > 20
    )
示例表中的最终结果应为:4


如有任何帮助,我将不胜感激

首先,
函数需要一个字符串。它将像
“123”
这样的字符串转换为整数
123
,所以我们不要使用它


最简单的方法是使用迭代器函数,如
COUNTX

CountNonBlank = COUNTX(Table3, IF(Table3[Values] > 20, 1, BLANK()))
请注意,
BLANK()
(null)在这里不需要单独的大小写,因为
BLANK()>20
的计算结果为
False

有很多其他方法可以做到这一点。另一个迭代器解决方案是:

CountNonBlank = COUNTROWS(FILTER(Table3, Table3[Values] > 20))
您可以在
计算
中使用相同的
过滤器
,但这有点不够优雅

CountNonBlank = CALCULATE(COUNT(Table3[Values]), FILTER(Table3, Table3[Values] > 20))

编辑

我不推荐
CALCULATE
版本。如果您有更多包含更多条件的列,只需将它们添加到
过滤器中即可。例如

CountNonBlank =
COUNTROWS(
    FILTER(Table3,
        Table3[Values] > 20
            && Table3[Text] = "xyz"
            && Table3[Number] <> 0
            && Table3[Date] <= DATE(2018, 12, 31)
    )
)
CountNonBlank=
计数行(
过滤器(表3,
表3[数值]>20
&&表3[文本]=“xyz”
&&表3[编号]0

&&Table3[Date]谢谢!虽然最后一个代码不起作用,但我得到了以下错误:“度量值‘Table3’[measure 3]中的计算错误:函数‘FILTER’已在用作表筛选器表达式的True/False表达式中使用。这是不允许的。”我尝试使用最后一段代码,因为我将有第二列和另一个条件,我认为在“Calculate”函数中添加该参数会更容易。我的错误是,我错放了一个括号。尽管我仍然得到一个错误:“函数COUNT接受一个计算结果为数字或日期的参数,不能处理字符串类型的值。”我不推荐最后一个。使用中间的一个并添加更多条件。我尝试了中间的一个,将其稍微更改为
COUNTROWS(FILTER(Table3,VALUE(Table3[Values])>20))
但仍然得到一个错误:“无法将类型文本的值“”转换为类型编号”是
Table3[Values]
数字列还是文本列?如果是数字列,则不应使用
值,正如我在回答的第一句中解释的那样。如果是文本列,则我不知道为什么要与数字进行比较。