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

如何在PowerBI中用DAX计算过去4周(不含当前周)移动平均?

在PowerBI中用DAX计算过去4周(不含当前周)的移动平均

首先需要确保你有一个日期表,并与POS数据表建立关系,日期表需包含统一规则的周编号(如ISO周)和年份列,避免跨年周统计错误。以下是针对两种常见需求的DAX度量值:

需求1:过去4周POS总额的平均值

适用于需要将4周的总POS金额除以4得到平均的场景:

POS for P4W = 
VAR CurrentWeek = MAX('Date'[ISO Week Number])
VAR CurrentYear = MAX('Date'[Year])
-- 处理跨年周场景:当前周为年初前4周时,包含上一年的对应周
VAR PreviousWeeks = 
    IF(
        CurrentWeek <= 4,
        UNION(
            SELECTCOLUMNS(
                FILTER(ALL('Date'), 'Date'[Year] = CurrentYear - 1 && 'Date'[ISO Week Number] >= 53 - (4 - CurrentWeek)),
                "Year", 'Date'[Year],
                "Week", 'Date'[ISO Week Number]
            ),
            SELECTCOLUMNS(
                FILTER(ALL('Date'), 'Date'[Year] = CurrentYear && 'Date'[ISO Week Number] < CurrentWeek),
                "Year", 'Date'[Year],
                "Week", 'Date'[ISO Week Number]
            )
        ),
        SELECTCOLUMNS(
            FILTER(ALL('Date'), 'Date'[Year] = CurrentYear && 'Date'[ISO Week Number] >= CurrentWeek - 4 && 'Date'[ISO Week Number] < CurrentWeek),
            "Year", 'Date'[Year],
            "Week", 'Date'[ISO Week Number]
        )
    )
VAR TotalP4W = 
    CALCULATE(
        SUM('POS Data'[POS Amount]),
        TREATAS(PreviousWeeks, 'Date'[Year], 'Date'[ISO Week Number]),
        ALLSELECTED('POS Data'[Product ID]) -- 保留产品粒度(单品/品类等)的筛选上下文
    )
RETURN
    DIVIDE(TotalP4W, 4, 0) -- DIVIDE避免除以0错误,默认返回0

需求2:过去4周每周POS的平均值

适用于需要先计算每周的POS总额,再取这4周平均值的场景:

POS for P4W (周度平均) = 
VAR CurrentWeek = MAX('Date'[ISO Week Number])
VAR CurrentYear = MAX('Date'[Year])
VAR PreviousWeeks = 
    IF(
        CurrentWeek <= 4,
        UNION(
            SELECTCOLUMNS(
                FILTER(ALL('Date'), 'Date'[Year] = CurrentYear - 1 && 'Date'[ISO Week Number] >= 53 - (4 - CurrentWeek)),
                "Year", 'Date'[Year],
                "Week", 'Date'[ISO Week Number]
            ),
            SELECTCOLUMNS(
                FILTER(ALL('Date'), 'Date'[Year] = CurrentYear && 'Date'[ISO Week Number] < CurrentWeek),
                "Year", 'Date'[Year],
                "Week", 'Date'[ISO Week Number]
            )
        ),
        SELECTCOLUMNS(
            FILTER(ALL('Date'), 'Date'[Year] = CurrentYear && 'Date'[ISO Week Number] >= CurrentWeek - 4 && 'Date'[ISO Week Number] < CurrentWeek),
            "Year", 'Date'[Year],
            "Week", 'Date'[ISO Week Number]
        )
    )
VAR WeeklyPOS = 
    CALCULATETABLE(
        ADDCOLUMNS(
            SUMMARIZE('POS Data', 'Date'[Year], 'Date'[ISO Week Number]),
            "WeeklyTotal", SUM('POS Data'[POS Amount])
        ),
        TREATAS(PreviousWeeks, 'Date'[Year], 'Date'[ISO Week Number]),
        ALLSELECTED('POS Data'[Product ID])
    )
RETURN
    AVERAGEX(WeeklyPOS, [WeeklyTotal])

关键注意事项

  • 日期表需标记为日期表(PowerBI中右键日期表→标记为日期表),确保时间上下文识别准确。
  • 周编号的规则必须统一(如每周起始日是周一还是周日),POS数据的日期需与日期表的周划分完全匹配,避免统计偏差。
  • ALLSELECTED('POS Data'[Product ID])确保度量值能适配不同产品粒度(单品、品类、部门)的筛选需求,不会被全局筛选覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:10:12