每个月的 Rankx 函数 DAX Power BI

时间:2021-06-28 01:25:18

标签: powerbi dax rank

所以我在 Power BI 中有一个表格,其中包含快照日期、公司名称和评级。我想对每个特定月份的评级进行排名(没有月份有重复的公司)。

举个简单的例子,如下表:

<头>
快照日期 公司名称 评分
31/03/2021 A 1
31/03/2021 B 8
31/03/2021 C 6
31/03/2021 D 5
30/04/2021 A 4
30/04/2021 B 7
30/04/2021 C 9
30/04/2021 D 3

我想结束:

<头>
快照日期 公司名称 评分 排名
31/03/2021 A 1 1
31/03/2021 B 8 4
31/03/2021 C 6 3
31/03/2021 D 5 2
30/04/2021 A 4 2
30/04/2021 B 7 3
30/04/2021 C 9 4
30/04/2021 D 3 1

似乎该措施应该是这样的:

Rank = Rankx(filter(
                    all(table),
                    table[Snapshot_date].[month] = Earlier(table[Snapshot_date].month)
                    && table[Snapshot_date].[year] = Earlier(table[Snapshot_date].year)
                     ),
                     Calculate(Sum(table[Rating])),,1)

但在这里我收到一个错误,指出 Early 函数中的参数类型不正确,我指的是不存在的较早行上下文。

我也试过:

Rank = Rankx(allexcept(table,
                    table[Snapshot_date].[month], table[Snapshot_date].[year]
                     ),
                     Calculate(Sum(table[Rating])),,1)

然而,这只是对整个表格而不是每个月进行排名。

在只有两个月的上表的简单示例中,有效的是:

Rank = Rankx(filter(
                    all(table),
                    table[Snapshot_date].[month] = 1
                    && table[Snapshot_date].[year] = 2021)
                     ),
                     Calculate(Sum(table[Rating])),,1)

如果月份和年份是两个日期之一,这对两个月份都有效。但是,如果我使用的月份和年份不是两个日期之一,则排名都变为 1。

此外,我希望它可以在具有多个日期的大表上工作,并希望它是动态的。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您需要从计算中删除过滤器上下文(行过滤器)。 ALLEXCEPT 真的很有用,把你的小组放在这里。

使用此措施:

Rank = 

RANKX( 
            ALLEXCEPT( Sheet1,Sheet1[Snapshot_date] ),
             CALCULATE(SUM(Sheet1[Rating]))
  )