Динамическое ранжирование в силе би

У меня есть требование, в котором мне нужно получить 5 лучших брендов, основанных на долях продаж в графике.

Сценарий выглядит следующим образом: Пример данных, как показано ниже

Brand  Sales
-----------
H      3500
B      2500
I      2200
A      1500
J      1400
K      900
E      800
F      700
L      650
D      600
C      500
N      200
M      150
G      100
Others null

Теперь требуется всегда показывать топ-5 брендов по продажам. т. е. топ-4 брендов и 5-й бренд представлены как другие, объединяющие все остальные бренды.

Когда пользователь выбирает какую-либо марку из среза (одиночный выбор), этот конкретный бренд должен быть ранжирован - 1-й и, как обычно, следующие 3 лучших бренда, а последний - "Другие", объединяющий остальные.

Мне удалось получить 4 лучших бренда и другие. Но, застрял в получении динамического рейтинга на основе выбора слайсера.

Пожалуйста, ознакомьтесь с нижеприведенными мерами, которые я создал:

Сумма продаж

SumSales = SUM(Sheet1[Sales])

Ранг

Rank = RANKX(ALL(Sheet1[Brand ]),[SumSales])

Топ-5

Top5 = IF ([Rank] <= 4,[SumSales],
  IF(HASONEVALUE(Sheet1[Brand ]),
    IF(VALUES(Sheet1[Brand ]) = "Others",
       SUMX ( FILTER ( ALL ( Sheet1[Brand ] ), [Rank] > 4 ), [SumSales] )
    )
  )
)

1 ответ

Это сложнее, чем я ожидал, но все же возможно.


Во-первых, давайте создадим вычисляемый столбец, который ранжирует бренды, которые будут использоваться позже.

Rank = RANKX(ALL(Sheet1), Sheet1[Sales])

Ключевой идеей здесь является то, что вам нужна отдельная таблица для использования в качестве слайсера, иначе вы не сможете увидеть все бренды, когда сделаете выбор. Давайте определим новую таблицу Brands следующее:

Brands = SUMMARIZECOLUMNS(Sheet1[Brand ], Sheet1[Rank])

Мы будем использовать эту таблицу для нашего слайсера.

Далее мы создаем довольно сложную меру, чтобы включить всю необходимую логику:

Top5 = 
    VAR BrandRank = SELECTEDVALUE(Brands[Rank])
    RETURN IF(MAX(Sheet1[Brand ]) = "Others",
               CALCULATE(SUM(Sheet1[Sales]), ALL(Sheet1)) -
               CALCULATE(SUM(Sheet1[Sales]), ALL(Sheet1),
                   Sheet1[Rank] >= BrandRank, Sheet1[Rank] < BrandRank + 5),
                IF(COUNTROWS(ALLSELECTED(Brands[Brand ])) = 1,
                    IF(MAX(Sheet1[Rank]) >= BrandRank &&
                       MAX(Sheet1[Rank]) < BrandRank + 5,
                           SUM(Sheet1[Sales]),
                           BLANK()),
                    IF(MAX(Sheet1[Rank]) <= 5,
                           SUM(Sheet1[Sales]),
                           BLANK())))

Затем вы можете использовать эту меру в матрицах и кольцевых диаграммах.

Другие вопросы по тегам