如何在带有条件的2个值的POWER BI中使用RankX

时间:2020-09-29 16:39:27

标签: powerbi dax powerquery

我在Power Bi中具有下表,并希望基于两列添加计算出的列,但按以下组合的顺序排名不变。例如:

ORDER =如果[最大目标数]> 0%且[TAG] ='FALSE',则[分散数]
如果[最大目标)> 0%并且[标记] ='TRUE'然后[显着计数]
如果[[TAG] ='FALSE'然后[DISTINCT COUNT]
如果[TAG] ='TRUE'然后[DISTINCT COUNT]

这是我的表格样本,具有理想的结果:

Order Company#  Company_Name    Goal_Name   Max_GOAL    TAG
    1   1001    COMPANY NAME 1  GOAL 1      25%         FALSE
    2   1001    COMPANY NAME 1  GOAL 2      81%         FALSE
    3   1001    COMPANY NAME 1  GOAL 3      40%         FALSE
    4   1001    COMPANY NAME 1  GOAL 4      26%         TRUE
    5   1001    COMPANY NAME 1  GOAL 5      0%          FALSE
    6   1001    COMPANY NAME 1  GOAL 6      0%          TRUE
    1   1002    COMPANY NAME 2  GOAL 1      26%         FALSE
    2   1002    COMPANY NAME 2  GOAL 2      66%         FALSE
    3   1002    COMPANY NAME 2  GOAL 3      40%         FALSE
    4   1002    COMPANY NAME 2  GOAL 4      68%         TRUE
    5   1002    COMPANY NAME 2  GOAL 5      0%          FALSE
    6   1002    COMPANY NAME 2  GOAL 6      0%          FALSE

这也是我尝试过并工作的示例代码,以防其他人需要它:

    RANKX(FILTER (
        GroupGoalMapping,
        GroupGoalMapping[GroupNumber] = EARLIER ( GroupGoalMapping[GroupNumber] ) 
    ),
    RANKX ( ALL ( GroupGoalMapping ), GroupGoalMapping[AnnualMaximum] * IF(GroupGoalMapping[AlternateGoal]="FALSE",2),, DESC )
        + DIVIDE (
            RANKX ( ALL ( GroupGoalMapping ), GroupGoalMapping[AnnualMaximum] * IF(GroupGoalMapping[AlternateGoal]="TRUE",1)  ,, DESC ),
            COUNTROWS ( ALL ( GroupGoalMapping ) ) + 1
        )
        + DIVIDE (
            DIVIDE (
                RANKX ( ALL ( GroupGoalMapping ), GroupGoalMapping[GoalName_Order] ,, ASC,Dense ),
                ( COUNTROWS ( ALL ( GroupGoalMapping ) ) + 1 )
            ),
            COUNTROWS ( ALL ( GroupGoalMapping ) ) + 1
        ),
    ,
    ASC,
    DENSE
)

1 个答案:

答案 0 :(得分:0)

我知道了:

RANKX(FILTER (
            GroupGoalMapping,
            GroupGoalMapping[GroupNumber] = EARLIER ( GroupGoalMapping[GroupNumber] ) 
        ),
        RANKX ( ALL ( GroupGoalMapping ), GroupGoalMapping[AnnualMaximum] * IF(GroupGoalMapping[AlternateGoal]="FALSE",2),, DESC )
            + DIVIDE (
                RANKX ( ALL ( GroupGoalMapping ), GroupGoalMapping[AnnualMaximum] * IF(GroupGoalMapping[AlternateGoal]="TRUE",1)  ,, DESC ),
                COUNTROWS ( ALL ( GroupGoalMapping ) ) + 1
            )
            + DIVIDE (
                DIVIDE (
                    RANKX ( ALL ( GroupGoalMapping ), GroupGoalMapping[GoalName_Order] ,, ASC,Dense ),
                    ( COUNTROWS ( ALL ( GroupGoalMapping ) ) + 1 )
                ),
                COUNTROWS ( ALL ( GroupGoalMapping ) ) + 1
            ),
        ,
        ASC,
        DENSE
    )