DAX问题:统计项目中Value>1.0的姓名数量(COUNTROWS层级失效)
解决各项目中Value大于1.0的姓名计数问题
问题背景
给定数据集:
项目A:
- Name Value
- Joe 1.5
- Bob 1.0
- Sue 0.8
项目B:- Name Value
- Joe 1.5
- Bob 1.0
- Tom 1.8
需求是统计每个项目中Value值大于1.0的姓名数量,预期结果:项目A为1,项目B为2。目前使用COUNTROWS函数时仅在姓名层级有效,无法正确汇总到项目层级。
解决方案(DAX)
方法1:用CALCULATE绑定项目上下文
创建如下度量值,它会自动适配项目层级的筛选上下文:
Count_Values_Over_1 = CALCULATE( COUNTROWS('你的数据表'), '你的数据表'[Value] > 1.0 )
当你在矩阵或表格中以「项目」为行维度时,CALCULATE会自动锁定当前项目的范围,只统计该项目下Value>1.0的记录数,完美匹配需求的结果。
方法2:用SUMX手动迭代项目(适合复杂场景)
如果需要更灵活的逻辑控制,可以用SUMX遍历每个项目,逐个计算符合条件的行数:
Count_Values_Over_1 = SUMX( VALUES('你的数据表'[项目]), CALCULATE(COUNTROWS('你的数据表'), '你的数据表'[Value] > 1.0) )
VALUES('你的数据表'[项目])生成所有唯一项目的列表,SUMX逐个处理每个项目,计算对应项目下符合条件的行数,最终输出每个项目的统计结果。
为什么直接用COUNTROWS不行?
直接调用COUNTROWS('你的数据表')并筛选Value>1.0时,默认是全局范围的统计,不会自动关联项目的上下文。要么得到所有项目符合条件的总数,要么在项目层级无法正确过滤出当前项目的记录——CALCULATE的核心作用就是修改筛选上下文,让计算限定在当前项目的范围内。
内容的提问来源于stack exchange,提问作者Joe Palumbo
相关产品推荐
相关产品推荐

