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

How to calculate number of non blank rows based on the value using dax

我有一个包含数值和空白记录的 table。我正在尝试计算非空白且大于 20 的行数。

+--------+
| VALUES |
+--------+
|      2 |
|      0 |
|     13 |
|     40 |
|        |
|      1 |
|    200 |
|      4 |
|    135 |
|        |
|     35 |
+--------+

我尝试了不同的选项,但不断出现下一个错误:"Cannot convert value '' of type Text to type Number"。我知道空白单元格被视为文本,因此我的过滤器 (>20) 不起作用。将空白转换为“0”不是一个选项,因为稍后我需要使用相同的值来计算 AVG 和中位数。

CALCULATE(
    COUNTROWS(Table3),
    VALUE(Table3[VALUES]) > 20
    )

或结果为“10”:

=CALCULATE(
    COUNTROWS(ALLNOBLANKROW(Table3[VALUES])),
    VALUE(Table3[VALUES]) > 20
    )

例子中的最终结果table应该是:4

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

首先,VALUE 函数需要一个字符串。它将 "123" 之类的字符串转换为整数 123,因此我们不要使用它。


最简单的方法是使用像 COUNTX.

这样的迭代器函数
CountNonBlank = COUNTX(Table3, IF(Table3[Values] > 20, 1, BLANK()))

请注意,这里我们不需要 BLANK()(空)的单独案例,因为 BLANK() > 20 的计算结果为 False

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

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

您可以在 CALCULATE 中使用相同的 FILTER,但这有点不够优雅。

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

编辑

我不推荐 CALCULATE 版本。如果您有更多列和更多条件,只需将它们添加到您的 FILTER。例如

CountNonBlank =
COUNTROWS(
    FILTER(Table3,
        Table3[Values] > 20
            && Table3[Text] = "xyz"
            && Table3[Number] <> 0
            && Table3[Date] <= DATE(2018, 12, 31)
    )
)

您也可以使用 || 代替 && 来执行 OR 逻辑。