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

DAX中基于日期特定变量的向前预测方法咨询

嘿,作为DAX新手能想到用参数表来控制节假日、淡季的预测调整,这思路已经很到位啦!我来一步步带你完成剩余的预测实现,分几个关键步骤来:

第一步:先把表关系理清楚

首先得确保你的三张表之间的关联是正确的:

  • 把销售表和日期表(也就是你说的年度时间变量表)用日期字段建立一对多关系(日期表是维度表,销售表是事实表);
  • 把预测参数表也和日期表用date字段建立单向关系(日期表 → 预测参数表,这样日期表的上下文能传递到参数表)。

这一步是基础,不然DAX没法正确匹配不同表的日期上下文哦。

第二步:计算无调整的基准预测值

先得有一个“基础销量预测”,比如用历史数据的平均值,或者去年同期的销量,这里给你一个通用的历史滚动平均示例,你可以根据业务调整:

基准预测销量 = 
VAR 过去12个月的销量 = 
    CALCULATE(
        AVERAGE(Sales[销量]),
        DATESINPERIOD('日期表'[Date], LASTDATE('日期表'[Date]), -12, MONTH)
    )
// 如果是想用去年同期的话,把上面换成SAMEPERIODLASTYEAR:
// VAR 去年同期销量 = CALCULATE(SUM(Sales[销量]), SAMEPERIODLASTYEAR('日期表'[Date]))
RETURN
过去12个月的销量

这个度量值会根据当前日期,自动计算对应SKU过去12个月的平均销量作为预测基准——如果是多SKU场景,行上下文会自动适配每个SKU的历史数据。

第三步:匹配预测参数表的调整系数

接下来要把你的increase参数对应到每个日期,没有参数的日期默认用1(也就是不调整),写一个度量值来获取调整系数:

预测调整系数 = 
VAR 当前日期 = MAX('日期表'[Date])
VAR 匹配到的系数 = LOOKUPVALUE(
    '预测参数表'[increase],
    '预测参数表'[date], 当前日期
)
// 如果找不到对应日期的参数,就返回1(无调整)
RETURN
IF(ISBLANK(匹配到的系数), 1, 匹配到的系数)

比如11/18/2018这个日期,就会返回1.25,其他没在参数表里的日期就返回1。

第四步:计算最终的预测销量

把基准预测和调整系数相乘,就得到带日期变量调整的最终预测了:

最终预测销量 = [基准预测销量] * [预测调整系数]

现在你把这个度量值放到矩阵里,行选SKU,列选日期(包括未来日期哦,记得日期表里要提前加好未来的日期),就能看到每个SKU在不同日期的预测值了——比如节假日会按参数提升,淡季会按参数降低。

额外优化:结合年度时间变量表的全局调整

如果你的年度时间变量表里有淡季/旺季的标记(比如Is_OffSeason列,值为TRUE/FALSE),还可以加入全局调整,比如淡季整体打8折,修改一下预测调整系数就行:

预测调整系数 = 
VAR 当前日期 = MAX('日期表'[Date])
VAR 参数系数 = LOOKUPVALUE(
    '预测参数表'[increase],
    '预测参数表'[date], 当前日期
)
VAR 淡季全局系数 = IF(MAX('年度时间变量表'[Is_OffSeason]) = TRUE(), 0.8, 1)
RETURN
IF(ISBLANK(参数系数), 1 * 淡季全局系数, 参数系数 * 淡季全局系数)

这样就同时结合了特定日期的节假日调整和全局的淡旺季调整。

几个小提醒
  • 日期表一定要是连续的,包括你要预测的未来日期,不然预测会有断层;
  • 如果某些SKU历史数据不足,可以给基准预测加个判断,比如:IF(ISBLANK(过去12个月的销量), CALCULATE(AVERAGE(Sales[销量]), ALL(Sales)), 过去12个月的销量),用整体平均兜底;
  • 基准预测的逻辑可以慢慢优化,比如从简单的平均换成指数平滑,或者用更复杂的时间序列模型,但作为新手先从基础版本入手就好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:37:13