DAX公式问题:CALCULATE函数月度值缺失但总计正确
DAX公式问题分析与解决方案
问题根源
你的ActualsReleased公式存在两个核心问题:
- 筛选上下文覆盖:
FILTER('reporting Time','reporting Time'[DateId]<=SELECTEDVALUE([Version date]))直接对整个时间表进行筛选,会覆盖矩阵中日期维度(年度/月份)的行上下文筛选,导致公式无法按当前行的日期分组(如某一月)计算对应数据。 - 上下文交互异常:当选择2023年3月31日作为Version date时,2023年的月份日期自然满足
<=2023-03-31,但2023年之前的年度/月份日期也符合条件,却无法显示数据——这是因为原公式的全局筛选替代了行上下文的分组筛选,导致公式计算的是所有符合条件日期的总和,而非当前行分组的数值,视觉上表现为仅2023年行有数据。
修改后的DAX公式
方案1:使用KEEPFILTERS保留行上下文
ActualsReleased = CALCULATE( SUM('reporting ActualsProducedReleased'[ActualsReleasedWX]), KEEPFILTERS('reporting Time'[DateId] <= SELECTEDVALUE([Version date])) )
方案2:简化筛选逻辑(效果一致)
如果不需要复杂的表筛选,直接使用列筛选更高效:
ActualsReleased = CALCULATE( SUM('reporting ActualsProducedReleased'[ActualsReleasedWX]), 'reporting Time'[DateId] <= SELECTEDVALUE([Version date]), KEEPFILTERS('reporting Time') )
额外建议
- 确保
[Version date]来自独立的参数表(而非reporting Time表),避免切片器选择与日期维度的上下文冲突。如果当前[Version date]属于reporting Time表,建议新建一个仅包含日期的参数表用于切片器。 - 修改后公式会保留矩阵的日期分组上下文,支持正常钻取到月度维度,同时年度总计仍会正确计算所有
<=Version date的数值总和。
内容的提问来源于stack exchange,提问作者Visualizer
相关产品推荐
相关产品推荐

