DAX度量值填充空白并保留后续月份期末最大值代码调试
DAX实现期末值向后持续填充空白单元格方案
需求说明
需要实现两类表格填充逻辑:
- 用相邻列的有效值填充
Average Actual FTE列的空白单元格 - 当某月份出现期末实际值后,后续所有空白月份持续保留该期末值,直到出现新的期末值再替换为新值向后填充
现有数据样例
| 月份 | Forecast | Average Actual FTE | Actuals end period |
|---|---|---|---|
| January | 0.99 | 1.25 | |
| February | 1.5 | 0.8 | |
| March | 1.19 | 0.77 | |
| April | 1.03 | 0.75 | |
| May | 1.1 | 1.63 | 1.63 |
| June | 0.99 | 1.63 | |
| July | 1 | 1.63 | |
| August | 3.5 | 1.63 | |
| September | 2.1 | 1.63 | |
| October | 1.6 | 1.63 | |
| November | 1.9 | 1.63 | |
| December | 3.5 | 1.64 |
原有未达预期的DAX代码
Actuals end period = VAR max_period = MAXX ( ALLSELECTED ( 'Actual Hours'), 'Actual Hours'[Date]) VAR sum_ = 'Actual Hours'[Actuals] VAR y = CALCULATE ( [Actuals], FILTER ( ALLSELECTED ( 'Actual Hours' ), 'Actual Hours'[Date] = max_period ) )RETURN IF ( ISBLANK ( [Actuals] ), y + sum_ )
代码问题说明
原有代码直接取全选范围最大日期对应的实际值,没有做逐行的前置非空值判断,会导致期末值出现前的空白行错误填充、新期末值出现时无法自动更新。
修正后DAX代码
Actuals end period = CALCULATE ( SELECTEDVALUE ( 'Actual Hours'[Average Actual FTE] ), FILTER ( ALLSELECTED ( 'Actual Hours' ), 'Actual Hours'[Date] <= MAX ( 'Actual Hours'[Date] ) && NOT ISBLANK ( 'Actual Hours'[Average Actual FTE] ) ), REMOVEFILTERS ( 'Actual Hours'[Date] ) )
实现逻辑
- 针对每一行的日期,筛选当前日期及之前所有日期范围
- 过滤掉该范围内
Average Actual FTE为空的行 - 取距离当前行日期最近的非空值返回,自动实现:有实际值的月份返回自身值,空值月份返回上一个最近的有效期末值,出现新的有效期末值时自动替换为新值向后持续填充。
内容的提问来源于stack exchange,提问作者Smooth
相关产品推荐
相关产品推荐

