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

DAX动态库存预测度量优化:基于前一日值迭代计算

动态库存预测DAX度量优化

问题背景

现有5张关联表:

  • Daily Inventory:存储每日库存总值
  • AFPO、EKPO:入库物料表,数值计入库存增加值
  • RESB:需求表,数值从库存总值中扣除
  • Date:日期维度表,通过日期字段与其他表关联

需要实现未来7天每日库存滚动预测:次日库存 = 前一日计算后库存 + 当日入库(AFPO+EKPO) - 当日需求(RESB)。原度量问题在于所有未来日期均基于当日初始库存计算,未实现滚动累加。

优化后的DAX度量

Inventory Forecast = 
VAR _today = TODAY()
VAR _last_actual_inventory = 
    CALCULATE(
        SUM('DailyInventory'[Total Value]),
        'Date'[Date] = _today
    )
-- 计算单日库存净变动:入库总值 - 需求总值
VAR _daily_movement = 
    SUM('AFPO'[Value]) + SUM('EKPO'[Value]) - SUM('RESB'[Value])
-- 处理历史日期:直接返回实际库存
VAR _historical_inventory = 
    SUM('DailyInventory'[Total Value])
-- 处理未来7天滚动预测:初始库存累加从明日到当前日期的所有变动
VAR _forecast_inventory = 
    _last_actual_inventory + 
    CALCULATE(
        SUMX(
            DATESBETWEEN('Date'[Date], _today + 1, MAX('Date'[Date])),
            SUM('AFPO'[Value]) + SUM('EKPO'[Value]) - SUM('RESB'[Value])
        ),
        ALLSELECTED('Date')
    )
RETURN
    SWITCH(
        TRUE(),
        -- 今日及之前的历史日期返回实际库存
        MAX('Date'[Date]) <= _today, _historical_inventory,
        -- 未来7天返回滚动预测值
        MAX('Date'[Date]) > _today && MAX('Date'[Date]) <= _today + 7, _forecast_inventory,
        -- 超出7天范围返回空(可按需调整)
        BLANK()
    )

关键逻辑说明

  1. 起始库存锚定:_last_actual_inventory提取今日的实际库存总值,作为预测的基准起始值
  2. 滚动累加实现:通过SUMX遍历从明日到当前预测日期的所有日期,累计每日的库存净变动,再叠加起始库存,得到当日的滚动预测值
  3. 日期范围区分:明确划分历史日期、未来7天、超范围三个区间,分别返回对应结果

注意事项

  • 确保Date表包含连续的日期序列,避免因日期中断导致累计计算错误
  • 若Daily Inventory中今日无数据,可调整_last_actual_inventory逻辑为取最近有记录的库存值,例如用LASTDATE('DailyInventory'[Date])替代_today进行匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:57:06