如何通过聚合从单个 table 使用 DAX 创建 power bi 矩阵排名

How to create a ranking in power bi matrix with DAX from a single table with aggregation

我正在尝试根据过去 12 个月 (MAT12_cs) 在 Power BI 中的矩阵中售出的案例对供应商进行排名。

这是一个示例数据:

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())

这给了我总数,我不知道我应该用什么来代替 countrows 来获得排名。

创建一个度量(我简称为你的table"Sales"):

Total Sale = SUM ( Sales[MAT12_cs] )

创建另一个度量:

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

将这些措施放入矩阵或 table 针对供应商。结果:

解释:

您必须在 RANKX 中使用 ALL(Table) 而不仅仅是 'Table'。如果没有 ALL,RANKX 将看不到全部数据(它必须对所有销售进行排名),它只会看到 filtered table。例如,在第一行中,您只会看到供应商 1 的销售额,因为您的 table "Sales" 已在该行中被 Sup1 过滤。结果,RANKX 仅对一项记录进行排名,这就是为什么您在每行中获得 1 的原因。当我们使用 ALL 时,RANKX 将(正确地)看到所有数据。

RANKX获取到所有供应商后,逐一迭代,对每个供应商计算其销售额,然后进行排名。

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