基于已有度量值实现多月份连续滚动预测的DAX问题求助
连续滚动预测的DAX度量值修改方案
需求说明
现有三个度量值:[% Accepted]、[% Accepted Prior Month]、[Avg % Change],需要实现:
- 当[% Accepted]因当月无数据为空时,通过「上月值(含预测值) + 当月[Avg % Change]」计算预测值
- 支持多月份连续滚动预测:以上一月的预测值作为下一月的前置值,叠加对应月份的[Avg % Change]持续计算
当前DAX度量值
Forecast = VAR _CurrentValue = [% Accepted] VAR _ProjectedValue = [% Accepted Prior Month] + [Avg % Change] RETURN IF(ISBLANK(_CurrentValue), _ProjectedValue, _CurrentValue)
问题
该度量值仅能计算第一个空白月份的预测值,后续空白月份无法引用上月的预测值,仅返回[Avg % Change]本身。
效果对比
预期效果
| Month Year | % Accepted | % Accepted Prior Month | Avg % Change | Forecast |
|---|---|---|---|---|
| Apr 2023 | Null | Null | -2.00 | 10.03 |
| Mar 2023 | Null | Null | -1.5 | 12.03 |
| Feb 2023 | Null | Null | 2.00 | 13.53 |
| Jan 2023 | Null | 10.3 | 1.23 | 11.53 |
| Dec 2022 | 10.3 | 11.28 | -3.1 | 10.3 |
| Nov 2022 | 11.28 | 14.5 | 2.14 | 11.28 |
当前效果
| Month Year | % Accepted | % Accepted Prior Month | Avg % Change | Forecast |
|---|---|---|---|---|
| Apr 2023 | Null | Null | -2.00 | -2.00 |
| Mar 2023 | Null | Null | -1.5 | -1.5 |
| Feb 2023 | Null | Null | 2.00 | 2.00 |
| Jan 2023 | Null | 10.3 | 1.23 | 11.53 |
| Dec 2022 | 10.3 | 11.28 | -3.1 | 10.3 |
| Nov 2022 | 11.28 | 14.5 | 2.14 | 11.28 |
修改后的DAX度量值
Forecast = VAR CurrentMonthEnd = MAX('Date'[MonthEndDate]) // 需确保日期表包含每月月末日期列 VAR PriorMonthEnd = EOMONTH(CurrentMonthEnd, -1) VAR ActualValue = [% Accepted] // 递归获取上月的预测值 VAR PriorForecast = CALCULATE( [Forecast], 'Date'[MonthEndDate] = PriorMonthEnd ) // 获取最后一个有实际值的接受率 VAR LastActualValue = CALCULATE( [% Accepted], FILTER( ALL('Date'), 'Date'[MonthEndDate] < CurrentMonthEnd && NOT(ISBLANK([% Accepted])) ), LASTNONBLANK('Date'[MonthEndDate], [% Accepted]) ) RETURN IF( NOT(ISBLANK(ActualValue)), ActualValue, IF( NOT(ISBLANK(PriorForecast)), PriorForecast + [Avg % Change], LastActualValue + [Avg % Change] ) )
说明
- 递归逻辑:通过调用自身度量值
[Forecast]获取上月的预测值,实现滚动计算 - 初始值处理:当是第一个空白月份时,自动获取最后一个有实际值的[% Accepted]作为初始值
- 时间准确性:使用月末日期确保时间序列的连续性,避免因月份文本排序问题导致计算错误
内容的提问来源于stack exchange,提问作者Jenna
相关产品推荐
相关产品推荐

