代码之家  ›  专栏  ›  技术社区  ›  Serdia

RANKX未给出正确的结果-Powe BI桌面

  •  0
  • Serdia  · 技术社区  · 6 年前

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

    这里我尝试使用RANKX函数:

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

    enter image description here

    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.

    如果我使用一个表,而不是一个表表达式,它似乎是有效的。

    更新: 添加 ALL(dim_User)

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

    使现代化

    无论我选择哪个用户,在 rating

    enter image description here

    0 回复  |  直到 6 年前
        1
  •  1
  •   Alexis Olson    6 年前

    编写度量值时,将在其本地筛选器上下文中对其进行计算。特别地, dim_User FirstName 在你的尺度之内,因此是排名 Ttl Trans 仅与其他用户相比具有相同的性能 .

    由于您是基于用户进行排名的,因此您希望删除visual Studio引入的过滤器上下文,以便获得您期望的排名。我建议替换表格参数 ALL(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
        )