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() )
关键逻辑说明
- 起始库存锚定:
_last_actual_inventory提取今日的实际库存总值,作为预测的基准起始值 - 滚动累加实现:通过
SUMX遍历从明日到当前预测日期的所有日期,累计每日的库存净变动,再叠加起始库存,得到当日的滚动预测值 - 日期范围区分:明确划分历史日期、未来7天、超范围三个区间,分别返回对应结果
注意事项
- 确保Date表包含连续的日期序列,避免因日期中断导致累计计算错误
- 若Daily Inventory中今日无数据,可调整
_last_actual_inventory逻辑为取最近有记录的库存值,例如用LASTDATE('DailyInventory'[Date])替代_today进行匹配
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

