«Покажи топ-5 товаров, а остальные собери в Прочие» — частый запрос: не плодить сотню строк, но и не терять остаток. Простая мера топ-N (из базового курса) умеет скрыть хвост, но не умеет показать его одной строкой. Для «Прочих» нужен отдельный приём. Разбираем по мотивам DAX Patterns SQLBI и practical-приёмов.
Почему простой топ-N не хватает
Мера вида «верни значение, если ранг ≤ N» убирает хвост из визуала — но строки Прочие не появляется, и сумма видимого меньше общей. Бизнесу нужно: топ-5 плюс строка Прочие = 100%.
Решение: несвязанная таблица ранга
Делаем вспомогательную таблицу с метками: 1, 2, …, N, Прочие — не связанную с товарами. Кладём её в визуал по строкам. А мера решает, что показать в каждой строке:
- в строках 1…N — выручку товара с соответствующим рангом;
- в строке
Прочие— сумму всех товаров с рангом > N.
Выручка TopN+Прочие =
VAR _N = 5
VAR _Метка = SELECTEDVALUE ( Ранг[Метка] )
VAR _Ранги =
ADDCOLUMNS (
VALUES ( Товары[Товар] ),
"@r", RANKX ( ALL ( Товары[Товар] ), [Выручка],, DESC, DENSE ),
"@v", [Выручка]
)
RETURN
SWITCH (
TRUE (),
_Метка = "Прочие",
SUMX ( FILTER ( _Ранги, [@r] > _N ), [@v] ),
ISNUMBER ( VALUE ( _Метка ) ),
SUMX ( FILTER ( _Ранги, [@r] = VALUE ( _Метка ) ), [@v] )
)
В строке Прочие суммируется весь хвост, в строках 1–5 — товар нужного ранга. Итог сходится с общей выручкой.
Чтобы строка Прочие вообще появилась в визуале, в нём должно быть измерение с такой строкой. Связывать его с товарами нельзя (иначе оно их отфильтрует) — поэтому таблица ранга несвязанная, а мера сама сопоставляет метку с товарами по рангу.
Вариант проще: топ-N + отдельная мера «Прочие»
Если строгая строка Прочие не нужна, а нужно «топ-5 на графике и подпись остатка», берут две меры: топ-N (фильтрует визуал) и «Прочие» = [Выручка всего] − [Выручка топ-N] в отдельной карточке. Дешевле и часто достаточно.
Тонкости
- Динамический N. Замените
VAR _N = 5наSELECTEDVALUEиз what-if параметра (урок про what-if) — пользователь сам крутит N. - Сортировка. Метку
Прочиеставьте последней (отдельный столбец порядка в таблице ранга). - Производительность.
RANKXпо большому каталогу в мере недёшев; на десятках тысяч SKU оптимизируйте.
Главная ошибка топ-N — показать пять строк и молча потерять хвост: сумма на экране не сходится с реальной выручкой. Строка Прочие (или отдельная мера остатка) обязательна, если важна полнота.
Что дальше
TopN с «Прочими» закрыли. DAX-паттерны продолжим (события в процессе, валюты), а следом — экспертный курс эксплуатации. Курс пополняется.