首页 > 解决方案 > RANKX 没有给出正确的结果

问题描述

我需要创建一个根据价值对用户进行排名的度量(而不是列)。

在这里,我尝试使用 RANKX 功能:

ranking = 
RANKX(
    ADDCOLUMNS(
        SUMMARIZE(dim_User, 
            dim_User[UserID],
            dim_User[FirstName]
        ),
        "Ttl Trans", [Ttl Transactions]
)
, [Ttl Transactions]
)

在此处输入图像描述

使用相同的结果:

rating2 = 
RANKX(
    SUMMARIZE(dim_User,
    dim_User[FirstName]
), [Ttl Transactions]
)

试过这样:

rating1 = 
RANKX(
    SUMMARIZE(dim_User,
    dim_User[FirstName],
    "Trans",[Ttl Transactions]
), [Trans]
)

但是给了我一个错误:

The value for 'Trans' cannot be determined. Either the column doesn't exist, or there is no current row for this column.

我也尝试过使用 COUNTROWS() 函数,但也没有成功。

如果我使用表格而不是表格表达式,它似乎可以工作。我在这里想念什么?

更新: 添加ALL(dim_User)仍然给我 1

ranking = 
RANKX(
    ADDCOLUMNS(
        SUMMARIZE(ALL(dim_User), 
            dim_User[UserID],
            dim_User[FirstName]
        ),
        "Ttl Trans", [Ttl Transactions]
)
, [Ttl Transactions]
)

更新

无论我选择什么用户,rating卡片中的 a 始终为 1。

在此处输入图像描述

标签: powerbidaxpowerbi-desktop

解决方案


编写度量时,会在其本地过滤器上下文中对其进行评估。特别是,在您的度量中dim_User被过滤FirstName,因此,Ttl Trans仅与具有相同FirstName.

由于您是基于用户进行排名,因此您希望删除视觉对象引入的过滤器上下文以获得您期望的排名。我建议将 table 参数替换dim_UserALL(dim_User)删除该表上的所有过滤,或者 - 更有可能是您想要的选项 -ALLSELECTED(dim_User)删除视觉对象引入的本地过滤器上下文,同时保留切片器或页面级过滤器的任何过滤器上下文.


对于您的卡,您需要模拟表中存在的过滤器上下文:

UserRanking =
VAR SelectedUser = SELECTEDVALUE ( dim_User[Name_FirstLast] )
RETURN
    CALCULATE (
        RANKX ( ALL ( dim_User ), [Ttl Transactions] ),
        dim_User[Name_FirstLast] = SelectedUser
    )

推荐阅读