如何在Power BI中向下填充度量值'Last Games Attendance'
实现Power BI中自动向下填充的"Last Games Attendance"列
背景说明
现有Date表,其中Attendance列包含数值与零值(零值表示场地关闭)。此前已实现计算列获取上一次有考勤的数值,但仅在Attendance非零的行显示结果,零值行返回空白。现需调整逻辑,实现自动向下填充最近的有效考勤值,达到指定表格效果。
原计算列代码(仅作参考)
Last Game Attendance Number = VAR CurrentDate = 'Date'[Date] VAR LastAttendanceDate = MAXX( FILTER( 'Date', 'Date'[Date] < CurrentDate && 'Date'[Attendance] > 0 ), 'Date'[Date] ) RETURN IF( 'Date'[Attendance] = 0, BLANK(), LOOKUPVALUE('Date'[Attendance], 'Date'[Date], LastAttendanceDate) )
新需求对应的DAX计算列代码
Last Games Attendance = VAR CurrentDate = 'Date'[Date] -- 筛选当前日期之前所有有有效考勤的记录 VAR PreviousValidAttendances = FILTER('Date', 'Date'[Date] < CurrentDate && 'Date'[Attendance] > 0) RETURN -- 若无前序有效考勤,返回0;否则取最近一次的考勤值 IF( COUNTROWS(PreviousValidAttendances) = 0, 0, MAXX(TOPN(1, PreviousValidAttendances, 'Date'[Date], DESC), 'Date'[Attendance]) )
代码逻辑说明
- 定义
CurrentDate变量存储当前行的日期; - 筛选出当前日期之前所有
Attendance大于0的有效记录; - 若不存在前序有效考勤记录(如第一个有考勤的日期或其之前的零值行),返回0;
- 若存在前序有效记录,取其中日期最近的一条记录的
Attendance值,实现自动向下填充效果。
验证效果
生成的表格将与期望效果一致:
| Date | Attendance | Last Games Attendance |
|---|---|---|
| 06/01/24 | 0 | 0 |
| 07/01/24 | 52314 | 0 |
| 08/01/24 | 0 | 52314 |
| 09/01/24 | 0 | 52314 |
| 10/01/24 | 16895 | 52314 |
| 11/01/24 | 0 | 16895 |
| 12/01/24 | 0 | 16895 |
| 13/01/24 | 48536 | 16895 |
| 14/01/24 | 78236 | 48536 |
| 15/01/24 | 12247 | 78236 |
| 16/01/24 | 0 | 78236 |
| 17/01/24 | 52314 | 12247 |
内容的提问来源于stack exchange,提问作者Barry
相关产品推荐
相关产品推荐

