Power BI(DAX)技术问询:All()函数仅针对Column1列的2个值未生效
分析度量值[B]在Column1选B/D时数值异常的原因及解决办法
让我来帮你拆解这个问题,先理清楚核心矛盾点:为什么选Column1的A/C/E/F时度量值B结果一致,选B/D时就变了?
问题根源:度量值[A]中的日期计算受Column1筛选影响
先看你的度量值[A]的核心逻辑:它通过MAX('Date-Table'[Date])获取当前筛选上下文下的最大日期,再计算上年年末的日期,最后取该日期的有机余额。
这里的关键问题是:MAX('Date-Table'[Date])会受到当前Column1筛选的影响。举个例子:
- 当你选Column1=A/C/E/F时,这些类别在最新的日期都有数据,所以
MAX('Date-Table'[Date])取到的是整个数据集的最新日期,计算出来的上年年末日期固定,最终[A]的结果一致,度量值B的总和也一致。 - 但当你选Column1=B或D时,如果这两个类别在最新日期没有数据(比如B的最新数据只到2023年10月,而其他类别到2023年12月),那么
MAX('Date-Table'[Date])就会取到B/D有数据的最后一个日期,导致上年年末日期偏移,[A]的结果自然就变了,度量值B的总和也跟着变。
解决办法:让[A]中的日期计算不受Column1筛选影响
要解决这个问题,我们需要让MAX('Date-Table'[Date])忽略Column1的筛选,确保取到的是整个模型的最新日期。修改度量值[A]的日期变量即可:
修改后的度量值[A]公式
A = var _date = CALCULATE(MAX('Date-Table'[Date]), ALL('Table'[Column1])) // 清除Column1的筛选,确保日期取全局最新 var _month = MONTH(_date) var _prior_year_date = if(_month=1,EOMONTH(_date,-13),EOMONTH(_date,-_month)) var _prior_year_end_organic_balance = CALCULATE([Organic Balance],FILTER(ALL('Date-Table'),[Date]=_prior_year_date)) return _prior_year_end_organic_balance
如果希望_date完全不受任何筛选影响(包括其他表的筛选),可以把ALL('Table'[Column1])换成ALL()或者ALL('Date-Table'),根据你的业务需求调整。
优化度量值[B]的写法(可选)
你的度量值[B]逻辑是对的,但可以简化成更易读的形式:
B = CALCULATE([A], 'Table'[Column1] IN {"C", "D", "F"}, ALL('Table'[Column1]))
用IN运算符替代多个||,代码更简洁清晰。
验证效果
修改后,不管你在Column1中选择哪个值,度量值[A]都会基于全局最新日期计算上年年末余额,度量值[B]也会稳定返回C/D/F三个类别的总余额,不会再出现B/D选项下的数值异常。
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

