Урок 05 · 11 мин чтения

Calculation groups: один набор вместо десятков мер

Как не плодить [Выручка PY], [Выручка YTD], [Выручка %рост] для каждой меры — а задать расчёт один раз и применять ко всем.

У вас 10 базовых мер (выручка, маржа, количество…) и для каждой нужны варианты: прошлый год, YTD, рост %, скользящее среднее. Это 10 × 5 = 50 почти одинаковых мер. Каждое исправление логики «прошлый год» — 10 правок. Calculation groups убирают этот ад: расчёт описывается один раз и применяется к любой мере. Опираемся на calculation groups в SQLBI.

На каком примере

Учебный набор: меры [Выручка], [Маржа], [Количество] и желание иметь для каждой PY, YTD, %рост — не плодя 9 отдельных мер.

Проблема, которую они решают

Без calculation groups time-intelligence пишут «в лоб»:

Выручка PY = CALCULATE ( [Выручка], SAMEPERIODLASTYEAR ( Календарь[Дата] ) )
Маржа PY   = CALCULATE ( [Маржа],   SAMEPERIODLASTYEAR ( Календарь[Дата] ) )
Кол-во PY  = CALCULATE ( [Количество], SAMEPERIODLASTYEAR ( Календарь[Дата] ) )

Логика «прошлый год» дублируется в каждой мере. Поменялась бизнес-логика — правите везде. Не масштабируется.

Идея: расчёт как переменная-измерение

Calculation group — это таблица с пунктами расчёта (calculation items), каждый из которых — преобразование, применяемое к текущей мере. Внутри пункта мера обозначается плейсхолдером SELECTEDMEASURE().

Создаём группу «Время» с пунктами:

Текущий      = SELECTEDMEASURE ()
PY           = CALCULATE ( SELECTEDMEASURE (), SAMEPERIODLASTYEAR ( Календарь[Дата] ) )
YTD          = CALCULATE ( SELECTEDMEASURE (), DATESYTD ( Календарь[Дата] ) )
% роста      =
    VAR _Cur = SELECTEDMEASURE ()
    VAR _Py  = CALCULATE ( SELECTEDMEASURE (), SAMEPERIODLASTYEAR ( Календарь[Дата] ) )
    RETURN DIVIDE ( _Cur - _Py, _Py )
SELECTEDMEASURE() — главный фокус

SELECTEDMEASURE() — это «та мера, к которой сейчас применяют группу». Пункт «PY» не знает, выручка это или маржа, — он оборачивает любую меру в контекст прошлого года. Поэтому одна группа из 4 пунктов даёт варианты для всех мер сразу: 3 меры × 4 пункта = 12 комбинаций без единой лишней меры.

Как это выглядит в отчёте

Пункты группы появляются как значения отдельного «измерения». Кладёте его, например, в столбцы матрицы, базовую меру — в значения. На пересечении Power BI применяет нужный пункт к выбранной мере. Один столбец-переключатель — и матрица показывает «Текущий / PY / YTD / %роста» для любой меры.

Чем создаются

Calculation groups не делаются в стандартном Power BI Desktop напрямую (исторически — только внешними инструментами; в свежих версиях появился базовый редактор). Рабочий инструмент — Tabular Editor (бесплатный TE2 или платный TE3): создаёте таблицу-группу, добавляете пункты с DAX, задаёте Ordinal для порядка и формат-стринги.

Format strings — важная деталь

Разные пункты могут требовать разный формат: «%роста» — это проценты, а «Текущий» — рубли. У calculation item есть dynamic format string — выражение формата, переопределяющее формат базовой меры:

-- для пункта «% роста»
Format String Expression = "0.0%"

Так одна и та же [Выручка] в пункте «Текущий» покажется как «1 234 ₽», а в «%роста» — как «12,3%».

Грабли calculation groups
  • Precedence (приоритет). Если групп несколько (например, «Время» и «Валюта»), порядок их применения задаётся свойством Precedence — иначе результат непредсказуем.
  • Боковые эффекты на простых мерах. Пункт применяется ко всему, включая меры, которым time-intelligence не нужен. Иногда нужен защитный код (проверка ISSELECTEDMEASURE или возврат BLANK).
  • Не злоупотребляйте. Группа — мощный, но неочевидный механизм; новому человеку в модели её логику надо объяснять. Документируйте.

Что дальше

Механизм calculation groups освоили. Дальше — его главное применение: собрать весь time intelligence (YTD, PY, YOY, rolling) в один набор. Следующий урок.

Что делает SELECTEDMEASURE() внутри пункта calculation group?
Пункт группы описывает преобразование (например, «прошлый год») над абстрактной мерой SELECTEDMEASURE(). Power BI подставляет в него ту меру, что выбрана в визуале. Так 4 пункта дают варианты сразу для всех базовых мер, без дублирования формул.
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

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

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

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