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
相关产品推荐
相关产品推荐

