You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI DAX基于日期切片器的计算列计算错误排查

问题成因
  • 本质是对Power BI中计算列和度量值的计算上下文逻辑理解错误:计算列在数据刷新阶段完成逐行计算,结果静态存储在数据模型中,不会响应报表层面切片器、筛选器的交互操作;只有度量值会在可视化对象渲染时,基于当前的筛选上下文动态计算,才能获取到切片器选中的日期范围。
  • 你编写的stok_till_date是度量值,当你在计算列中调用该度量值时,计算列的计算环境不存在切片器生成的筛选上下文,VALUES('Tarihler (Stok)'[Tarih])会返回日期表的全部日期值,计算得到的最小值就是日期表的最早日期2022年1月1日,和切片器选中的2022年7月1日自然不一致。
  • 你在计算列中使用SELECTEDVALUE获取当前行交易日期的写法属于冗余用法:计算列的行上下文下直接引用字段即可获取当前行值,不需要调用SELECTEDVALUE,且计算列本身不响应切片器筛选,整个判断逻辑从底层就无法生效。
修正方案

所有需要响应切片器动态筛选的库存计算逻辑,不要写在计算列中,全部通过度量值实现。
首先简化基础日期取值度量值:

stok_till_date = MIN('Tarihler (Stok)'[Tarih]) // 获取切片器选中的最小日期
stok_end_date = MAX('Tarihler (Stok)'[Tarih])  // 获取切片器选中的最大日期

再针对你需要的三个统计维度分别编写度量值:

  • 期初库存:统计切片器最小日期之前的累计库存
Dönem Başı Stok =
CALCULATE (
    SUM ( 'Stok Giriş-Çıkış'[Stok Giriş] ) - SUM ( 'Stok Giriş-Çıkış'[Stok Çıkış] ),
    'Tarihler (Stok)'[Tarih] < [stok_till_date],
    REMOVEFILTERS ( 'Tarihler (Stok)' ) // 清除切片器的日期范围筛选,才能统计选中日期前的全量历史数据
)
  • 区间交易数据:统计切片器选中日期范围内的出入库净值
Dönem İçi İşlem =
CALCULATE (
    SUM ( 'Stok Giriş-Çıkış'[Stok Giriş] ) - SUM ( 'Stok Giriş-Çıkış'[Stok Çıkış] ),
    DATESBETWEEN ( 'Tarihler (Stok)'[Tarih], [stok_till_date], [stok_end_date] )
)
  • 期末库存:统计切片器最大日期对应的累计库存
Dönem Sonu Stok = [Dönem Başı Stok] + [Dönem İçi İşlem]

提示:如果你的出入库表中出库值是单独存储的负值字段,可根据实际字段逻辑调整上述公式中的加减计算,核心是通过CALCULATE修改筛选上下文实现不同时间范围的统计。

内容的提问来源于stack exchange,提问作者Umut K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:45:31