Power BI DAX百分比计算遇无穷大错误,求修正方案
DAX计算百分比出现无穷大错误的解决方法
问题场景
- 基于Yardi数据创建矩阵,需计算各GL代码(对应唯一Rank行号)的金额占**Rank=24(实际收入总计)**的百分比
- 预期效果:所有行显示「当前行金额 / Rank=24金额」的百分比
- 实际问题:仅Rank=24的行显示正确百分比,其余行均出现无穷大错误
原错误DAX代码
PercentageMeasure = VAR TotalSelectedAmount = CALCULATE( SUM(Onepage[Amount]), ALLSELECTED(Onepage[Property Code]) ) var TotalActualIncome = CALCULATE( SUM(Onepage[Amount]),ALLSELECTED(Onepage[Property Code]), FILTER(Onepage, Onepage[Property Code] IN VALUES(Onepage[Property Code]) && Onepage[Month] in VALUES(Onepage[Month]) && Onepage[Year] in VALUES(Onepage[Year]) && Onepage[Rank] = 24) ) RETURN ([Total Selected Amount]*100 / [Total Actual Income])
问题原因
- 除数为空导致无穷大:当处于非Rank=24的行上下文时,
TotalActualIncome的FILTER逻辑会继承当前行的Rank筛选,导致筛选后无数据返回空值,直接除以空值就会出现无穷大错误 - 变量引用错误:返回语句中错误引用了度量值
[Total Selected Amount],而非定义的变量TotalSelectedAmount - 筛选条件冗余:使用
IN VALUES()的判断完全多余,ALLSELECTED已经保留了所选维度的筛选上下文
修正后的DAX代码
PercentageMeasure = VAR TotalSelectedAmount = SUM(Onepage[Amount]) VAR TotalActualIncome = CALCULATE( SUM(Onepage[Amount]), ALLSELECTED(Onepage[Rank]), // 清除当前行的Rank筛选,确保能获取到Rank=24的金额 Onepage[Rank] = 24, ALLSELECTED(Onepage[Property Code], Onepage[Year], Onepage[Month]) // 保留用户所选的物业、年月筛选 ) RETURN DIVIDE(TotalSelectedAmount * 100, TotalActualIncome, 0) // 用DIVIDE处理除数为空/0的情况,返回默认值0
修正说明
- 使用
DIVIDE函数替代直接除法,自动处理除数为空或0的情况,避免错误,第三个参数可设置默认返回值(这里设为0) - 用
ALLSELECTED(Onepage[Rank])清除当前行的Rank筛选上下文,确保无论当前行的Rank是什么,都能正确获取到Rank=24的实际收入总计金额 - 简化筛选逻辑,直接保留用户所选的Property Code、Year、Month维度,无需冗余判断
- 修正变量引用,直接使用定义好的
TotalSelectedAmount变量
内容的提问来源于stack exchange,提问作者Ramya Boricha
相关产品推荐
相关产品推荐

