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

时间:2019-01-15 21:56:20

标签: powerbi dax powerpivot

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

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

我尝试了不同的选项,但不断收到下一个错误:“无法将Text类型的v​​alue转换为Number类型”。我知道空白单元格被视为文本,因此我的过滤器(> 20)不起作用。将空格转换为“ 0”不是一种选择,因为我以后需要使用相同的值来计算AVG和中位数。

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

或得到“ 10”的结果:

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

示例表中的最终结果应为:4

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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


最简单的方法是使用COUNTX之类的迭代器函数。

CountNonBlank = COUNTX(Table3, IF(Table3[Values] > 20, 1, BLANK()))

请注意,由于BLANK()的值为BLANK() > 20,因此我们不需要为False(空)加上大小写。

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

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

您可以在FILTER内使用相同的CALCULATE,但这并不那么优雅。

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)
    )
)

您也可以使用||进行“或”运算,而不用使用&&进行“与”运算。