Урок 24 · 7 мин чтения

VAR и RETURN: читаемые и быстрые меры

Переменные превращают нагромождение функций в понятную меру — и попутно ускоряют расчёт. Главная привычка хорошего DAX.

Последний штрих блока про DAX — не функция, а приём, который отличает аккуратную меру от нечитаемой. Это переменные: VAR и RETURN. Освоите — и ваши меры станут понятными вам же через полгода.

Проблема без переменных

Возьмём прирост к прошлому году в «лоб», без переменных:

Выручка YoY % =
DIVIDE (
    [Выручка] - CALCULATE ( [Выручка], SAMEPERIODLASTYEAR ( Календарь[Дата] ) ),
    CALCULATE ( [Выручка], SAMEPERIODLASTYEAR ( Календарь[Дата] ) )
)

Здесь две беды. Во-первых, нечитаемо — выражение прошлого года повторяется дважды, глаз спотыкается. Во-вторых, оно и считается дважды — лишняя работа.

Решение: VAR + RETURN

Выносим повторяющиеся и промежуточные значения в переменные, а в RETURN собираем результат:

Выручка YoY % =
VAR _Текущая = [Выручка]
VAR _ПрошлыйГод = CALCULATE ( [Выручка], SAMEPERIODLASTYEAR ( Календарь[Дата] ) )
VAR _Прирост = _Текущая - _ПрошлыйГод
RETURN
    DIVIDE ( _Прирост, _ПрошлыйГод )

Та же логика — но читается сверху вниз как обычный текст, прошлый год посчитан один раз, и каждый шаг назван человеческим именем.

Зачем VAR

Две выгоды разом: читаемость (каждый шаг — именованная строка) и скорость (значение в переменной вычисляется один раз и переиспользуется, а не пересчитывается при каждом упоминании).

Правила хорошего тона

  • Имя с префиксом __ПрошлыйГод, _Прирост. Так переменная не путается со столбцами и мерами.
  • Описательные имена_ПрошлыйГод лучше, чем _x или _v2.
  • Одна переменная — одна мысль — не пакуйте полрасчёта в одну строку.
  • RETURN — всегда последний, единая точка выхода.

Переменные «ленивые» и считаются один раз

Две технические детали, которые приятно знать:

  • VAR вычисляется только если используется в RETURN. Объявили, но не сослались — расчёт не выполнится.
  • Значение переменной замораживается в момент объявления, в текущем контексте. Это и помогает, и иногда удивляет: переменная не «пересчитывается» дальше по мере смены контекста — она хранит то, что было на момент VAR.
Привычка по умолчанию

Любая мера сложнее одной строки — сразу через VAR/RETURN. Это не «для красоты»: через месяц вы откроете свою же меру и поймёте её за секунды, а не будете распутывать вложенные скобки.

Что дальше

На этом блок про DAX закрыт: вы знаете агрегации, итераторы, CALCULATE, фильтры, логику, связи, время и VAR/RETURN. Этого хватает, чтобы написать подавляющее большинство управленческих мер. Дальше в курсе — как показать всё это: выбор графика и дизайн дашборда.

Зачем выносить повторяющееся выражение в VAR?
Переменная вычисляется один раз и переиспользуется в RETURN — это и понятнее (именованные шаги), и быстрее (нет повторного расчёта). Для простой меры в одну строку VAR не обязателен.
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

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

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

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