Power BI-不同类别的等级

时间:2019-11-25 15:35:36

标签: powerbi dax

我有下面两栏,排名第一是期望的结果。基本上我想让它根据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添加过滤器。

1 个答案:

答案 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
)

Result

更新:使用测度

此代码可作为一种措施。

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检查过滤器上下文,并且当它不包含适当的过滤器时不返回任何内容。

结果将如下所示:

Result