Последний штрих блока про DAX — не функция, а приём, который отличает аккуратную меру от нечитаемой. Это переменные: VAR и RETURN. Освоите — и ваши меры станут понятными вам же через полгода.
Проблема без переменных
Возьмём прирост к прошлому году в «лоб», без переменных:
Выручка YoY % =
DIVIDE (
[Выручка] - CALCULATE ( [Выручка], SAMEPERIODLASTYEAR ( Календарь[Дата] ) ),
CALCULATE ( [Выручка], SAMEPERIODLASTYEAR ( Календарь[Дата] ) )
)
Здесь две беды. Во-первых, нечитаемо — выражение прошлого года повторяется дважды, глаз спотыкается. Во-вторых, оно и считается дважды — лишняя работа.
Решение: VAR + RETURN
Выносим повторяющиеся и промежуточные значения в переменные, а в RETURN собираем результат:
Выручка YoY % =
VAR _Текущая = [Выручка]
VAR _ПрошлыйГод = CALCULATE ( [Выручка], SAMEPERIODLASTYEAR ( Календарь[Дата] ) )
VAR _Прирост = _Текущая - _ПрошлыйГод
RETURN
DIVIDE ( _Прирост, _ПрошлыйГод )
Та же логика — но читается сверху вниз как обычный текст, прошлый год посчитан один раз, и каждый шаг назван человеческим именем.
Две выгоды разом: читаемость (каждый шаг — именованная строка) и скорость (значение в переменной вычисляется один раз и переиспользуется, а не пересчитывается при каждом упоминании).
Правила хорошего тона
- Имя с префиксом
_—_ПрошлыйГод,_Прирост. Так переменная не путается со столбцами и мерами. - Описательные имена —
_ПрошлыйГодлучше, чем_xили_v2. - Одна переменная — одна мысль — не пакуйте полрасчёта в одну строку.
RETURN— всегда последний, единая точка выхода.
Переменные «ленивые» и считаются один раз
Две технические детали, которые приятно знать:
VARвычисляется только если используется вRETURN. Объявили, но не сослались — расчёт не выполнится.- Значение переменной замораживается в момент объявления, в текущем контексте. Это и помогает, и иногда удивляет: переменная не «пересчитывается» дальше по мере смены контекста — она хранит то, что было на момент
VAR.
Любая мера сложнее одной строки — сразу через VAR/RETURN. Это не «для красоты»: через месяц вы откроете свою же меру и поймёте её за секунды, а не будете распутывать вложенные скобки.
Что дальше
На этом блок про DAX закрыт: вы знаете агрегации, итераторы, CALCULATE, фильтры, логику, связи, время и VAR/RETURN. Этого хватает, чтобы написать подавляющее большинство управленческих мер. Дальше в курсе — как показать всё это: выбор графика и дизайн дашборда.