如何使用聚合从单个表中使用DAX在Power Bi矩阵中创建排名

时间:2019-07-04 15:16:21

标签: matrix powerbi dax rank

我试图基于Power BI中最近12个月内销售的案例(MAT12_cs)对供应商进行排名。

以下是示例数据:

Table_sales

Supplier,   Product,    Account,    Rep,    MAT12_cs
Sup1,   Prod1,  Acc1,   Rep1,   56
Sup1,   Prod1,  Acc2,   Rep2,   45
Sup1,   Prod2,  Acc1,   Rep1,   43
Sup1,   Prod2,  Acc2,   Rep2,   66
Sup2,   Prod3,  Acc1,   Rep1,   15
Sup2,   Prod4,  Acc3,   Rep2,   104
Sup3,   Prod5,  Acc4,   Rep3,   86
Sup3,   Prod5,  Acc1,   Rep1,   80

这是我期望的结果:

Supplier,   MAT12_cs,   Rank
Sup1,   210,    1
Sup3,   166,    2
Sup2,   119,    3
Total,  495

我在某种程度上尝试了RANKX:

Rank = RANKX(Table_sales,SUM(MAT12_CS))

到处都有1。

我尝试过类似的操作,但我认为缺少某些功能可以使它起作用:

Rank = 
VAR ProdSales = SUM('Table_sales'[MAT12_cs])
VAR tblSales =
    SUMMARIZE (
        'Table_sales',
        'Table_sales'[Supplier],
        "Total Sales", SUM ( 'Table_sales'[MAT12_cs] )
    )
RETURN
    IF(ProdSales>0,COUNTROWS(FILTER(tblSales,[Total Sales]>ProdSales))+1,BLANK())

这给了我总计,而不是我应该用计数代替来获得排名。

1 个答案:

答案 0 :(得分:1)

创建一个度量(我称您的表为“ Sales”):

Total Sale = SUM ( Sales[MAT12_cs] )

创建另一个度量:

Sale Rank =
IF (
    HASONEVALUE ( Sales[Supplier] ),
    RANKX ( ALL ( Sales[Supplier] ), [Total Sale] )
)

将这些措施放入针对供应商的矩阵或表格中。结果:

enter image description here

说明:

您必须使用ALL(Table)而不是RANKX中的“ Table”。如果没有ALL,则RANKX将看不到整个数据(必须对所有销售进行排名),它只会看到过滤表。例如,在第一行中,您将仅看到供应商1的销售额,因为此表中的“销售”已由Sup1过滤。结果,RANKX排名仅一项记录,这就是为什么每行获得1分的原因。当我们使用ALL时,RANKX将(正确)看到所有数据。

获得所有供应商的访问权后,RANKX对其进行逐个迭代,然后为每个供应商计算其销售额,然后对它们进行排名。

需要HASONEVALUE部分才能从总数中删除排名。