按总和对类别进行分类(Power BI)

时间:2019-03-13 11:21:43

标签: powerbi dax

我需要为仪表板对产品进行排名。每天,我们都存储产品的销售。结果,我们得到了这个数据集示例:

+-----------+------------+-------+
| product   | date       | sales |
+-----------+------------+-------+
| coffee    | 11/03/2019 | 15    |
| coffee    | 12/03/2019 | 10    |
| coffee    | 13/03/2019 | 28    |
| coffee    | 14/03/2019 | 1     |
| tea       | 11/03/2019 | 5     |
| tea       | 12/03/2019 | 2     |
| tea       | 13/03/2019 | 6     |
| tea       | 14/03/2019 | 7     |
| Chocolate | 11/03/2019 | 30    |
| Chocolate | 11/03/2019 | 4     |
| Chocolate | 11/03/2019 | 15    |
| Chocolate | 11/03/2019 | 10    |
+-----------+------------+-------+

我的尝试

我实际上设法对我的产品进行排名,但没有达到我想要的方式。实际上,排名过程会增加行数。例如,巧克力排在第一位,但我们记录了4行,因此咖啡排在5位而不是2位。

+-----------+------------+-------+-----+------+
| product   | date       | sales | sum | rank |
+-----------+------------+-------+-----+------+
| coffee    | 11/03/2019 | 15    | 54  | 5    |
| coffee    | 12/03/2019 | 10    | 54  | 5    |
| coffee    | 13/03/2019 | 28    | 54  | 5    |
| coffee    | 14/03/2019 | 1     | 54  | 5    |
| tea       | 11/03/2019 | 5     | 20  | 9    |
| tea       | 12/03/2019 | 2     | 20  | 9    |
| tea       | 13/03/2019 | 6     | 20  | 9    |
| tea       | 14/03/2019 | 7     | 20  | 9    |
| Chocolate | 11/03/2019 | 30    | 59  | 1    |
| Chocolate | 11/03/2019 | 4     | 59  | 1    |
| Chocolate | 11/03/2019 | 15    | 59  | 1    |
| Chocolate | 11/03/2019 | 10    | 59  | 1    |
+-----------+------------+-------+-----+------+

sum字段公式公式:

sum =
SUMX(
    FILTER(
         Table1;
         Table1[product] = EARLIER(Table1[product])
    );
    Table1[sales]
)

rank字段公式:

rank = RANKX(
    ALL(Table1);
    Table1[sum]
)

如您所见,我们获得以下排名:

  • 1 :巧克力
  • 5 :咖啡
  • 9 :茶

改进

我想将先前的结果转换为:

  • 1 :巧克力
  • 2 :咖啡
  • 3 :茶

您能帮我改善我的排名系统,并获得一个奇妙的1、2、3而不是这个丑陋且不切实际的1、5、9吗?

如果您不知道答案,只需简单地回答问题♥

1 个答案:

答案 0 :(得分:2)

幸运的是,这是一个简单的解决方法。

如果查看documentation for the RANKX function,您会注意到一个可选的ties参数,您可以将其设置为SkipDense。默认值为Skip,但您需要Dense。试试这个:

rank =
RANKX(
    ALL(Table1);
    Table1[sum];
    ;;
    "Dense"
)

(由于我们没有指定可选的;value参数,所以还有其他order分隔符。)