我有下面两栏,排名第一是期望的结果。基本上我想让它根据PRIO对DAYS_OLD进行排名。
DAYS_OLD PRIO RANK
643 ST 1
643 ST 1
643 ST 1
387 2 1
318 HM 1
315 HM 2
295 HM 3
263 2 2
241 ST 2
235 HM 4
235 2 3
232 2 4
您可以在上面看到ST的值643为RANK 1,而不是1,2,3。这有可能吗?
我得到的代码就是这个
rank =
RANKX(
ALL(ADW_DEFECTS), ADW_DEFECTS[DAYS_OLD],
,,Dense
)
但是我无法为PRIO添加过滤器。
答案 0 :(得分:0)
下面的代码看起来可以在计算列中产生所需的结果。
RANK = RANKX(
SUMMARIZE(
ADW_DEFECTS,
ADW_DEFECTS[DAYS_OLD]
),
CALCULATE(
MAX( ADW_DEFECTS[DAYS_OLD] )
),
CALCULATE(
SELECTEDVALUE( ADW_DEFECTS[DAYS_OLD] )
),
DESC,
Dense
)
此代码可作为一种措施。
RANK =
IF (
ISFILTERED( ADW_DEFECTS[DAYS_OLD] )
&& HASONEVALUE( ADW_DEFECTS[DAYS_OLD] ),
RANKX(
CALCULATETABLE(
VALUES( ADW_DEFECTS[DAYS_OLD] ),
REMOVEFILTERS( ADW_DEFECTS[DAYS_OLD] )
),
CALCULATE( VALUES( ADW_DEFECTS[DAYS_OLD] ) )
)
)
与使用计算列的方法相比,使用度量的方法更简单。基本上,它只是在ADW_DEFECTS [DAYS_OLD]的所有值上计算ADW_DEFECTS [DAYS_OLD]列的值的RANKX。
为了忽略ADW_DEFECTS [DAYS_OLD]的重复值,该列在CALCULATETABLE内部包裹了VALUES,使RANKX遍历ADW_DEFECTS [DAYS_OLD]的唯一值。
仅当在当前过滤器上下文中可见单个值ADW_DEFECTS [DAYS_OLD]时,该计算才有意义。因此,您需要IF检查过滤器上下文,并且当它不包含适当的过滤器时不返回任何内容。
结果将如下所示: