请求调整Power BI账户级日滚动平均度量值(适配缺失数据)
账户专属滚动平均度量值调整
原始数据
| Date | Account | Value |
|---|---|---|
| 12/26/2023 | AAA | 497 |
| 12/26/2023 | BBB | 328 |
| 12/26/2023 | CCC | 398 |
| 12/22/2023 | AAA | 997 |
| 12/22/2023 | BBB | 709 |
| 12/22/2023 | CCC | 943 |
| 12/21/2023 | AAA | 825 |
| 12/21/2023 | CCC | 130 |
| 12/20/2023 | AAA | 275 |
原有度量值(按日求和的滚动平均)
DailySum = SUM('Table'[Value]) AvgDaily = var thisDate = MAX('Table'[Date]) var lastN = TOPN(10, SUMMARIZE( FILTER(ALL('Table'), 'Table'[Date] <= thisDate), 'Table'[Date], "Sum", [Value] ), [Date], DESC ) return IF(COUNTROWS(lastN) = 10, AVERAGEX(lastN, [Sum]) )
当前需求
不再忽略账户维度,计算每个账户专属的滚动平均:
- 取该账户最近3个数据实例(而非固定最近3个日期,适配数据缺失场景)
- 示例:AAA账户在12/26的滚动平均为
(497+997+825)/3 = 773
调整后的度量值
AccountRollingAvg = VAR CurrentAccount = SELECTEDVALUE('Table'[Account]) VAR CurrentDate = MAX('Table'[Date]) -- 获取当前账户下,日期小于等于当前日期的所有数据,并按日期倒序取最近3条 VAR Last3Records = TOPN( 3, FILTER( ALL('Table'), 'Table'[Account] = CurrentAccount && 'Table'[Date] <= CurrentDate ), 'Table'[Date], DESC ) -- 计算平均,若不足3条可返回实际平均值(如需仅当满3条才返回,可添加IF判断) RETURN AVERAGEX(Last3Records, 'Table'[Value])
补充说明
CurrentAccount捕获当前上下文的账户,确保计算限定在单个账户范围内Last3Records自动跳过该账户无数据的日期,只取存在记录的最近3条- 如果需要仅当账户有至少3条数据时才返回平均值,可将返回语句修改为:
RETURN IF(COUNTROWS(Last3Records) >= 3, AVERAGEX(Last3Records, 'Table'[Value]))
内容的提问来源于stack exchange,提问作者bigjdawg43
相关产品推荐
相关产品推荐

