请求设计基于条件显示值的DAX度量MEASURE_COLOUR
DAX度量MEASURE_COLOUR设计方案
核心规则对应逻辑
基于给定的判断规则,我们需要结合当前日期的RESULT值、选定日期范围内首次fail的位置,以及当前日期前连续pass的次数,返回对应颜色:
- 当
RESULT为pass时,直接返回GREEN - 当
RESULT为fail且满足以下任一条件,返回RED:- 是选定日期范围内第一次出现的
fail - 当前日期之前连续出现了9次
pass
- 是选定日期范围内第一次出现的
- 其他
fail场景返回BLUE
DAX度量代码实现
MEASURE_COLOUR = VAR CurrentResult = SELECTEDVALUE('Table'[RESULT]) VAR CurrentDate = SELECTEDVALUE('Table'[Date]) VAR DateRange = ALLSELECTED('Table'[Date]) VAR FirstFailDate = MINX(FILTER(DateRange, 'Table'[RESULT] = "fail"), 'Table'[Date]) VAR ConsecutivePassBefore = VAR CurrentRowRank = RANKX(DateRange, CurrentDate, , ASC) VAR LastFailRank = MAXX( FILTER( DateRange, 'Table'[Date] < CurrentDate && 'Table'[RESULT] = "fail" ), RANKX(DateRange, 'Table'[Date], , ASC) ) RETURN IF(ISBLANK(LastFailRank), CurrentRowRank - 1, CurrentRowRank - LastFailRank - 1) RETURN SWITCH( TRUE(), CurrentResult = "pass", "GREEN", CurrentResult = "fail" && (CurrentDate = FirstFailDate || ConsecutivePassBefore >= 9), "RED", CurrentResult = "fail", "BLUE", BLANK() )
代码逻辑拆解
变量定义:
CurrentResult:提取当前行的RESULT状态值CurrentDate:提取当前行的日期DateRange:获取用户选定的日期范围FirstFailDate:计算选定日期范围内首次出现fail的日期ConsecutivePassBefore:计算当前日期与上一次fail之间的连续pass次数;若之前无fail,则计算从范围起始到当前日期的pass次数
条件判断:
- 优先匹配
pass场景,返回GREEN - 针对
fail场景,先校验是否是首次fail或满足连续9次pass前置条件,满足则返回RED - 剩余
fail场景统一返回BLUE
- 优先匹配
示例场景验证
对应需求中的测试场景:
- 第1天pass → GREEN
- 第3天首次fail → RED
- 第4-12天连续pass → GREEN
- 第13天(连续9次pass后)fail → RED
- 第14天pass → GREEN
- 第15天fail(仅1次pass后)→ BLUE
内容的提问来源于stack exchange,提问作者Kitti Leelahasin
相关产品推荐
相关产品推荐

