PowerBI:如何通过关联表分组统计不同婚姻状态的人数?
按团队+岗位分组统计婚姻状态人数的DAX实现
你之前用SUMX只得到团队总人数,核心问题是没针对当前分组和特定婚姻状态做双重筛选。以下是两种可行的实现方案:
方案1:用SUMMARIZE + CALCULATE(推荐,性能更优)
直接基于人员列表表按team code和position name分组,同时添加各婚姻状态的统计列:
婚姻状态统计 = SUMMARIZE( '人员列表', '人员列表'[team code], '人员列表'[position name], "Single", CALCULATE(COUNT('人员列表'[姓名]), '人员列表'[marital situation] = "Single"), "Married", CALCULATE(COUNT('人员列表'[姓名]), '人员列表'[marital situation] = "Married"), "Divorced", CALCULATE(COUNT('人员列表'[姓名]), '人员列表'[marital situation] = "Divorced") )
SUMMARIZE负责生成唯一的团队编码+岗位分组,确保每个分组只出现一次。CALCULATE会自动继承外层SUMMARIZE的分组上下文,再叠加婚姻状态的筛选,精准统计分组内对应状态的人数。
方案2:用SUMX实现(符合你的尝试方向)
如果一定要用SUMX,需要明确限定筛选范围:
婚姻状态统计_SUMX版 = ADDCOLUMNS( -- 先生成唯一的团队+岗位分组表 SUMMARIZE('人员列表', '人员列表'[team code], '人员列表'[position name]), -- 统计Single人数:筛选当前分组下婚姻状态为Single的行,每行计1 "Single", SUMX( FILTER('人员列表', '人员列表'[team code] = EARLIER('人员列表'[team code]) && '人员列表'[position name] = EARLIER('人员列表'[position name]) && '人员列表'[marital situation] = "Single" ), 1 ), -- 统计Married人数 "Married", SUMX( FILTER('人员列表', '人员列表'[team code] = EARLIER('人员列表'[team code]) && '人员列表'[position name] = EARLIER('人员列表'[position name]) && '人员列表'[marital situation] = "Married" ), 1 ), -- 统计Divorced人数 "Divorced", SUMX( FILTER('人员列表', '人员列表'[team code] = EARLIER('人员列表'[team code]) && '人员列表'[position name] = EARLIER('人员列表'[position name]) && '人员列表'[marital situation] = "Divorced" ), 1 ) )
EARLIER函数用来获取外层分组的team code和position name,确保只筛选当前分组内的数据。SUMX遍历筛选后的行,每行累加1,实现计数效果。
为什么之前的SUMX只返回总人数?
因为你没有添加婚姻状态筛选和分组范围限定,SUMX默认遍历整个人员列表表,自然得到的是团队总人数而非分组内特定状态的人数。
内容的提问来源于stack exchange,提问作者Laurynas G
相关产品推荐
相关产品推荐

