基于动态表的排名 - Power BI

问题描述 投票:0回答:1

我在报告中创建了一个带有字段参数的表格,以允许用户手动过滤列。

字段参数如下所示:

Select column = {
    ("Column 1", NAMEOF('Participation'[A]), 2),
    ("Column 2", NAMEOF('Participation'[B]), 3),
    ("Column 3", NAMEOF('Participation'[C]), 4),
    ("Column 4", NAMEOF('Participation'[D]), 5),
...
}

表格将如下所示,其中“回合”是基于日历表的静态,其他列基于字段参数。

圆形 A B C D ...
9 月 22 日 75% x% x% x%
10 月 23 日 80% x% x% x%
11 月 23 日 90% x% x% x%
... x% x% x% x%

最后,我想显示每列前 3 名的参与率。例如,我使用按钮选择A列,我想在图表中显示:

  1. 90% 11 月 23 日
  2. 80% 10 月 23 日
  3. 75% 9 月 22 日

基于一列的排名很容易,但动态显示它有很大问题。网上大多数解释动态表的解决方案都不是基于字段参数的。

我已经尝试过这样的:

Ranking Team = 
VAR SelectedColumn = SELECTEDVALUE('Select column'[Select column Felder])
RETURN
    SWITCH (
        SelectedColumn,
        "A", RANKX(ALL('Participation'), [A], , DESC),
        "B", RANKX(ALL('Participation'), [B], , DESC),
        "C", RANKX(ALL('Participation'), [C], , DESC),
        "D", RANKX(ALL('Participation'), [D], , DESC),
        "E", RANKX(ALL('Participation'), [E], , DESC),
        "F", RANKX(ALL('Participation'), [F], , DESC),
        "G", RANKX(ALL('Participation'), [G], , DESC),
        "H", RANKX(ALL('Participation'), [H], , DESC),
        BLANK()
    )

不幸的是它不起作用。我认为问题是这个DAX不是基于我的字段参数表。

坦克为您提供帮助。

powerbi dax ranking
1个回答
0
投票

这里的问题是,您尝试根据用户选择对列进行动态排名,但 DAX 不允许基于字符串名称进行直接动态列引用。因此,即使您的 SWITCH 语句完全正常,您也无法即时更改 RANKX 函数中使用的列。

首先,确保字段参数返回您在 SWITCH 语句中使用的确切列名称(例如“A”、“B”、“C”...)。

然后使用度量根据所选值动态获取列值:

Selected Participation Value = 
VAR SelectedColumn = SELECTEDVALUE('Select column'[Select column Felder])
RETURN 
SWITCH(
    SelectedColumn,
    "A", 'Participation'[A],
    "B", 'Participation'[B],
    "C", 'Participation'[C],
    "D", 'Participation'[D],
    BLANK()
)

然后,使用上述度量创建排名度量:

Ranking Team = 
RANKX(ALL('Participation'), [Selected Participation Value], , DESC)

请记住,您需要事先了解所有列才能设置 SWITCH 语句。如果您有一组经常更改的动态列,那么它就不适合。

© www.soinside.com 2019 - 2024. All rights reserved.