Правило Парето — 20% позиций дают 80% результата — в рознице превращается в ABC-классификацию: товары (или клиенты) делят на A (вершина, до ~70% выручки), B (следующие ~70–90%) и C (длинный хвост). Это типовой паттерн; разбираем оба способа — статический и динамический. База — DAX Patterns SQLBI.
Идея
Сортируем товары по выручке по убыванию, считаем накопленную долю и режем по порогам:
- A — пока накопленная доля ≤ 70%;
- B — от 70% до 90%;
- C — остальное.
A — то, на чём держится бизнес; C — кандидаты на вывод из ассортимента.
Статический вариант — расчётный столбец
Если класс фиксируется при обновлении модели (не пересчитывается под срезы), это расчётный столбец в таблице товаров:
ABC класс = -- расчётный столбец в Товары
VAR _Value = [Выручка]
VAR _Total = SUMX ( ALL ( Товары ), [Выручка] )
VAR _CumAboveOrEqual =
SUMX (
FILTER ( ALL ( Товары ), [Выручка] >= _Value ),
[Выручка]
)
VAR _CumPct = DIVIDE ( _CumAboveOrEqual, _Total )
RETURN
SWITCH ( TRUE (),
_CumPct <= 0.7, "A",
_CumPct <= 0.9, "B",
"C"
)
Для каждого товара считаем долю всех товаров с выручкой не меньше его — это и есть его место в накопленной кривой. Плюс: класс можно класть в срез. Минус: не реагирует на фильтры (пересчитывается только при обновлении).
Класс должен реагировать на срез (период, регион)? Нужна динамическая версия — мерой. Класс фиксированный, по нему фильтруют и группируют? Хватает расчётного столбца. Собрать статический можно в нашем генераторе DAX-мер (паттерн ABC).
Динамический вариант — мера
Если ABC должен меняться под выбранный период/регион, класс считают мерой на лету. Логика та же (накопленная доля), но всё внутри CALCULATE/итераторов в текущем контексте. Это дороже, зато «живое»: выбрали 2026 и ЮФО — классы пересчитались под эти данные.
Наивный ABC мерой (RANKX + накопленная сумма) на десятках тысяч SKU считается медленно — секунды и больше. Оптимизируют разбиением на блоки (GENERATESERIES) — мы применяли это на реальной модели и ускоряли в десятки раз. Для среднего каталога хватает прямого варианта.
XYZ — про стабильность
Рядом с ABC часто считают XYZ — классификацию по стабильности спроса (коэффициент вариации): X — ровный спрос, Z — рваный. Матрица ABC×XYZ (AX, CZ…) даёт стратегию по каждой группе: что держать всегда, что под заказ.
Что дальше
ABC — фундамент ассортиментной аналитики. Дальше — ещё один частый паттерн: новые против вернувшихся клиентов. Следующий урок.