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

PowerBI DAX度量求助:实现行级连续两行值的滚动平均值

按行实现滚动平均的DAX解决方案

核心问题解析

原代码里VAR MyIndex = MyTable,[index]属于语法错误,DAX无法直接通过这种方式引用表列。另外因为存在缺失日期,常规基于日期偏移的滚动平均逻辑失效,必须依赖行的排名序号来锁定连续行。

修正后的RollingAvg度量

RollingAvg = 
VAR CurrentDate = MAX(Table1[Datum])
VAR MyTable = 
    SUMMARIZE (
        ALLSELECTED(Table1),
        Table1[Datum],
        "RowIndex", RANKX(ALLSELECTED(Table1), Table1[Datum],, ASC, DENSE),
        "MeasureValue", [AVG]
    )
VAR CurrentIndex = 
    MAXX(
        FILTER(MyTable, [Datum] = CurrentDate),
        [RowIndex]
    )
VAR RollingRows = 
    FILTER(
        MyTable,
        [RowIndex] >= CurrentIndex - 1 && [RowIndex] <= CurrentIndex
    )
RETURN
    AVERAGEX(RollingRows, [MeasureValue])

代码说明

  • CurrentDate:抓取当前行上下文对应的日期
  • MyTable:生成包含所有选中日期、连续行排名(用DENSE避免排名断层)、基础度量值的计算表
  • CurrentIndex:匹配当前日期对应的行排名序号
  • RollingRows:筛选出当前行和前一行(若存在)
  • 最后用AVERAGEX计算这两行的平均值

基础度量AVG的语法修正

原AVG度量存在括号遗漏和表名拼写错误,修正后代码如下:

AVG = 
VAR fest = AVERAGE(Table1[FEST])
VAR avg_all = 
    CALCULATE(
        AVERAGE(Table1[FCI]),
        FILTER(
            ALLSELECTED(Table1),
            Table1[MATERIAL] = MAX(Table1[MATERIAL]) &&
            Table1[PLANT] = MAX(Table1[PLANT])
        )
    )
VAR mwtr = 
    CALCULATE(
        AVERAGEX(Table1, Table1[FCI] - avg_all),
        Table1[FCI] <> BLANK()
    )
VAR result = mwtr + avg_all - fest
RETURN result

注意事项

  • 确保Table1[Datum]为日期类型且无重复值,若存在重复日期需调整SUMMARIZE逻辑合并重复项
  • 排名参数DENSE可避免因日期缺失导致的排名跳号,保证连续行逻辑准确
  • 如需计算更多连续行(如3行平均),只需将CurrentIndex - 1改为CurrentIndex - 2即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:40:32