多课程筛选下DAX计算过往通过率异常问题求助
修正多选课程时DAX过往通过率计算错位问题
问题描述
创建包含非连续课程开始日期的表格时,单课程(如Engl或Math)的过往通过率显示正常,但多选课程后,DAX计算的过往通过率出现错位,所有值向上偏移一个课程。
期望效果
| 课程开始日期 | 课程ID | 通过率 | 过往通过率 |
|---|---|---|---|
| 08/11/2023 | Engl | 75% | 80% |
| 04/11/2023 | Engl | 80% | 65% |
| 01/25/2023 | Engl | 65% | |
| 08/11/2023 | Math | 91% | 52% |
| 04/11/2023 | Math | 52% | 78% |
| 01/25/2023 | Math | 78% | |
| 08/11/2023 | Hist | 72% | 61% |
| 04/11/2023 | Hist | 61% | 88% |
| 01/25/2023 | Hist | 88% |
实际错误结果
| 课程开始日期 | 课程ID | 通过率 | 过往通过率 |
|---|---|---|---|
| 08/11/2023 | Engl | 75% | 52% |
| 04/11/2023 | Engl | 80% | 78% |
| 01/25/2023 | Engl | 65% | |
| 08/11/2023 | Math | 91% | 61% |
| 04/11/2023 | Math | 52% | 88% |
| 01/25/2023 | Math | 78% | |
| 08/11/2023 | Hist | 72% | 80% |
| 04/11/2023 | Hist | 61% | 65% |
| 01/25/2023 | Hist | 88% |
原DAX代码
Previous Passing Rate= var CurrentYearMonth = SELECTEDVALUE('Course Info Table'[YearMonth]) var PreviousYearMonth = CALCULATE( MAX('Course Info Table'[YearMonth]), ALLSELECTED('Course Info Table'), KEEPFILTERS('Course Info Table'[YearMonth] < CurrentYearMonth), KEEPFILTERS('Course Info Table'[Course ID]='Course Info Table'[Course ID])) var result = CALCULATE([Passing Rate], ALLSELECTED('Course Info Table'), 'Course Info Table'[YearMonth] = PreviousYearMonth) return result
问题原因
原代码中KEEPFILTERS('Course Info Table'[Course ID]='Course Info Table'[Course ID])是无效筛选条件,同一列自身相等永远成立,导致计算PreviousYearMonth时没有限定在当前行的课程ID范围内,而是在所有选中课程中查找小于当前YearMonth的最大值,最终跨课程取到了其他课程的日期,造成结果错位。
修正后的DAX代码
Previous Passing Rate = VAR CurrentCourseID = SELECTEDVALUE('Course Info Table'[Course ID]) VAR CurrentYearMonth = SELECTEDVALUE('Course Info Table'[YearMonth]) VAR PreviousYearMonth = CALCULATE( MAX('Course Info Table'[YearMonth]), ALLSELECTED('Course Info Table'), 'Course Info Table'[Course ID] = CurrentCourseID, 'Course Info Table'[YearMonth] < CurrentYearMonth ) VAR Result = CALCULATE( [Passing Rate], ALLSELECTED('Course Info Table'), 'Course Info Table'[Course ID] = CurrentCourseID, 'Course Info Table'[YearMonth] = PreviousYearMonth ) RETURN Result
改动说明
- 新增
CurrentCourseID变量,获取当前行的课程ID,确保所有计算限定在同一课程的上下文内 - 在计算
PreviousYearMonth和最终结果Result时,明确添加'Course Info Table'[Course ID] = CurrentCourseID的筛选条件,彻底避免跨课程取值 - 移除冗余的
KEEPFILTERS,使筛选逻辑更清晰直接
修正后,多选课程时每个课程的过往通过率会正确对应自身的历史数据,不会再出现错位问题。
内容的提问来源于stack exchange,提问作者Jenna
相关产品推荐
相关产品推荐

