Power BI中使用DAX统计两列不同字段值组合的出现次数
问题背景
我有一份名为"Error"的示例电子表格已连接至Power BI,相关样例数据见下图:
需求是统计特定Title(标题)与特定Severity(严重级别)的组合出现次数,基于样例数据的正确统计结果为:
- Memory Usage/Warning: 4
- Memory Usage/Critical: 1
- Event Log: Application/Information: 2
- Disk Usage(E:)/Warning: 2
当前编写的DAX公式如下:
Memory Usage/Warning = COUNTROWS(FILTER(GROUPBY(Error, Error[Title], Error[Severity]), Error[Title] = "Memory Usage"))
运行后得到的结果为 Memory Usage/Warning: 2,和预期结果不符,需要正确的DAX实现方式。
解决方法
原公式出错的原因很明确:
GROUPBY仅返回分组后的去重组,不带聚合计数逻辑,当前COUNTROWS统计到的2,是Title为Memory Usage对应的不同Severity的分组数量,不是原始数据里的实际行数- 过滤条件只匹配了Title字段,没有加Severity的判断,无法定位到具体的组合
单个组合度量值写法
如果需要单独计算每个指定组合的计数,不需要嵌套GROUPBY,直接对原表做双条件过滤计数即可,写法简单性能更高:
Memory Usage/Warning = COUNTROWS( FILTER( Error, Error[Title] = "Memory Usage" && Error[Severity] = "Warning" ) )
其他组合的度量值直接替换判断条件里的Title、Severity取值即可,比如计算Memory Usage/Critical的计数,就把Severity的匹配值改为"Critical"。
全组合批量统计(推荐)
不需要为每个组合单独写度量值,直接在报表中添加表格/矩阵可视化组件:
- 将
Error[Title]、Error[Severity]字段拖入行区域 - 添加值字段:选择任意非空列做计数,或者提前写一个基础度量值
记录数 = COUNTROWS(Error)拖入值区域
即可自动输出所有Title+Severity组合的统计结果,后续数据更新时结果会自动同步,不需要手动维护度量值。
内容的提问来源于stack exchange,提问作者broot19
相关产品推荐
相关产品推荐

