如何在Power BI中用Total_Amount_Of_Miles度量值总计计算占比?
DAX度量值占比计算解决方案
问题场景
基于Port表构建区域(A、B、C、D)的人数及跑步里程统计,已创建以下度量值计算人均跑步里程取整:
Total_Amount_Of_Miles = INT(SUMX( DISTINCT(Port[People]),CALCULATE(SUM(Port[Miles_Run]))/CALCULATE(COUNT(Port[People]))))
尝试用Total_Share = [Total_Amount_Of_Miles]/SUM([Total_Amount_Of_Miles])计算各区域占比时,因度量值依赖上下文无法直接求和报错。
解决方法
核心思路是通过上下文清除函数获取全局/筛选后的总计值,再做占比计算,推荐以下两种方案:
方案1:计算全局总计占比(不受切片器筛选影响)
Total_Share = VAR TotalOverall = CALCULATE([Total_Amount_Of_Miles], ALL(Port)) RETURN DIVIDE([Total_Amount_Of_Miles], TotalOverall, 0)
ALL(Port)清除所有筛选上下文,计算出整个Port表的Total_Amount_Of_Miles总计值DIVIDE函数自动处理除零错误,第三个参数为除零时的默认返回值(这里设为0)
方案2:计算筛选后总计占比(适配切片器等外部筛选)
如果需要保留切片器、筛选器的筛选结果,仅清除当前行的区域上下文,用ALLSELECTED():
Total_Share = VAR TotalSelected = CALCULATE([Total_Amount_Of_Miles], ALLSELECTED(Port)) RETURN DIVIDE([Total_Amount_Of_Miles], TotalSelected, 0)
ALLSELECTED()保留外部筛选条件,仅移除当前行的区域筛选,得到筛选范围内的总计值
原公式错误原因
SUM([Total_Amount_Of_Miles])会逐行计算每个区域的度量值后再求和,这和需要的“总计聚合值”逻辑不符。因为Total_Amount_Of_Miles本身是基于上下文聚合的结果,必须通过CALCULATE结合上下文清除函数,直接获取总计维度的聚合值。
内容的提问来源于stack exchange,提问作者AnOrdinaryPing
相关产品推荐
相关产品推荐

