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

ABC и Парето-сегментация

Классика управленческой аналитики: разложить товары и клиентов на A/B/C по вкладу в выручку. Статический и динамический варианты.

Правило Парето — 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 — фундамент ассортиментной аналитики. Дальше — ещё один частый паттерн: новые против вернувшихся клиентов. Следующий урок.

Чем динамическая ABC-классификация (мерой) отличается от статической (столбцом)?
Расчётный столбец считает класс раз при обновлении — его удобно класть в срез, но он не реагирует на фильтры. Мера считает ABC на лету под выбранный контекст, но дороже. Выбор — по тому, нужна ли реакция на срезы.
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

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

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

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