Как создать ранжирование по степенной би-матрице с DAX из одной таблицы с агрегацией - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь ранжировать поставщиков на основе их продаж, проданных за последние 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())

Это дает мне итоги, которые я не делаю, на что я должен заменить счетчики, чтобы иметь рейтинг.

1 Ответ

1 голос
/ 05 июля 2019

Создайте меру (я называю вашу таблицу «Продажи» для краткости):

Total Sale = SUM ( Sales[MAT12_cs] )

Создать другую меру:

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

Поместите эти меры в матрицу или таблицу по поставщикам. Результат:

enter image description here

Пояснение:

Вы должны использовать ALL (Таблица) вместо просто «Таблица» в RANKX. Без ALL RANKX не будет видеть все данные (как это должно быть, чтобы ранжировать все продажи), он будет видеть только таблицу отфильтрованный . Например, в первой строке вы увидите только продажи для поставщика 1, потому что ваша таблица «Продажи» отфильтрована в этой строке по Sup1. В результате RANKX оценивает только одну запись, поэтому вы получаете 1 в каждой строке. Когда мы используем ALL, RANKX (правильно) увидит все данные.

Получив доступ ко всем поставщикам, RANKX повторяет их один за другим, и для каждого поставщика рассчитывает свои продажи, а затем ранжирует их.

Часть HASONEVALUE необходима для удаления рейтинга из итогов.

...