Урок 26 · 9 мин чтения

TopN с «Прочими»

Показать топ-N позиций, а хвост свернуть в одну строку «Прочие» — с корректным итогом. Паттерн с таблицей ранга.

«Покажи топ-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-паттерны продолжим (события в процессе, валюты), а следом — экспертный курс эксплуатации. Курс пополняется.

Зачем для «топ-5 + Прочие» нужна несвязанная таблица ранга?
Строка «Прочие» должна прийти из измерения в визуале. Если связать таблицу ранга с товарами, она начнёт их фильтровать. Поэтому таблица несвязанная, а мера через SELECTEDVALUE метки решает: ранг 1–N — товар, «Прочие» — сумма хвоста.
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

Нужно внедрить
это в компании?

Соберём DWH, модель и дашборды под ваши данные. Бесплатная консультация — 30 минут.

Телефон+7 918 042 34 43