Power BI中用度量值计算双定性变量占总计比例及ALLSELECTED解析
DAX度量值计算占总计数的百分比问题解答
示例数据
example = {("Alice", "Yellow"),("Alice", "Yellow"),("Mark", "Blue"),("Mark", "Blue"), ("Mark", "Blue"), ("Mark", "Blue"), ("Alice", "Red"), ("Mark", "Yellow"), ("Alice", "Blue")}
需求说明
在簇状条形图中添加数据标签,显示每个「姓名+颜色」组合的出现次数占所有数据总计数的百分比。比如:
- Alice的蓝色条形标签为11%(1/9)
- Mark的蓝色条形标签为44%(4/9)
尝试与疑问
我已经能用Power Query的「分组依据」功能实现,但想仅通过DAX度量值完成。梳理的步骤是:
- 获取总行数作为分母;
- 获取「姓名+颜色」组合的计数作为分子;
- 分子除以分母得到百分比。
我写出了CALCULATE(COUNTROWS(example)),能正确得到每个组合的计数,但不知道如何处理除法的分子分母关系。
后来找到可行的度量值方案,但不理解ALLSELECTED的作用:
已实现的度量值代码
- 组合计数度量值:
num of occurences = CALCULATE ( COUNT ( example[Value1] ) )
- 总计数度量值:
total cases selection only example = CALCULATE ([num of occurences], ALLSELECTED(example[Value2], example[Value1]))
- 百分比度量值:
proportion = DIVIDE([num of occurences], [total cases selection only example])
核心疑问:明明没加任何手动筛选,为什么移除ALLSELECTED就无法得到总计数?
原理解释
关键在于DAX的筛选上下文:簇状条形图的每个数据点(条形)都会自动生成「姓名+颜色」的行筛选上下文——也就是说,默认情况下,DAX只会统计当前条形对应的组合数据。
ALLSELECTED的作用
它会移除当前可视化对象(簇状条形图)中对example[Value1](姓名)和example[Value2](颜色)的局部筛选,让CALCULATE能统计整个图表范围内的总数据量(也就是9),而不是当前条形的单个计数。
你觉得没加筛选,但条形图本身就是筛选器——每个条形都限定了「某个人+某个颜色」的范围,ALLSELECTED就是帮你跳出这个局部范围,拿到全局总计数。
替代方案对比
如果用ALL(example)替代ALLSELECTED,也能得到总计数,但ALLSELECTED更灵活:之后如果添加切片器等外部筛选,它会自动适配筛选后的总计数;而ALL(example)会始终返回整个表的总行数,不受外部筛选影响。
内容的提问来源于stack exchange,提问作者plast1cd0nk3y
相关产品推荐
相关产品推荐

