Управленческая аналитика почти всегда про время: с начала года, к прошлому году, в среднем за период. В DAX для этого целое семейство функций — time intelligence. Они выглядят как магия, но под ними простая идея: взять текущий период и сдвинуть или расширить его границы.
Обязательное условие — таблица дат
Прежде чем что-то писать: нужна нормальная таблица дат, помеченная как date table (наш Календарь). Без неё функции времени работают непредсказуемо.
Пометьте Календарь как таблицу дат (Table tools → Mark as date table → столбец Дата). Это календарь без пропусков, с одной строкой на каждый день. Половина «странных» багов time intelligence — из-за того, что таблицу дат забыли пометить.
Прошлый год: SAMEPERIODLASTYEAR
Выручка ПГ =
CALCULATE ( [Выручка], SAMEPERIODLASTYEAR ( Календарь[Дата] ) )
SAMEPERIODLASTYEAR сдвигает текущий период ровно на год назад, а CALCULATE считает выручку в этом сдвинутом контексте. На основе этого строятся приросты:
Выручка YoY % =
DIVIDE ( [Выручка] - [Выручка ПГ], [Выручка ПГ] )
Учебный датасет — за один год, поэтому Выручка ПГ выйдет пустой: прошлого года в данных нет. Это нормально — урок про то, как пишутся эти функции. На реальных данных за 2–3 года они сразу оживут.
Нарастающий итог с начала года: TOTALYTD
Выручка YTD =
TOTALYTD ( [Выручка], Календарь[Дата] )
TOTALYTD накапливает выручку от 1 января до текущей даты в контексте. Есть аналоги TOTALQTD (с начала квартала) и TOTALMTD (с начала месяца). Для нестандартного финансового года у TOTALYTD есть второй аргумент — дата конца года.
Скользящее среднее и произвольное окно: DATESINPERIOD
DATESINPERIOD строит окно из N дней/месяцев назад от даты — для скользящих средних и расчётов «за последние N»:
Выручка за 30 дней =
CALCULATE (
[Выручка],
DATESINPERIOD ( Календарь[Дата], MAX ( Календарь[Дата] ), -30, DAY )
)
А DATEADD сдвигает период на произвольный шаг (− 1 месяц, − 1 квартал) — гибче, чем SAMEPERIODLASTYEAR, когда сравниваете не с годом назад.
Не пишите это руками каждый раз
Time-intelligence-меры стандартны и пишутся по шаблонам. Собрать прошлый год, YoY, YTD, скользящее среднее с подстановкой ваших таблиц можно в нашем генераторе DAX-мер — выбираете паттерн, получаете готовую формулу. А когда мер времени становится много, их заменяют одной группой вычислений (calculation group) — но это уже продвинутая тема.
Все функции времени требуют помеченную таблицу дат и работают по одному принципу: меняют границы периода (сдвинуть на год, расширить до начала года, взять окно N дней), а CALCULATE считает меру в новом периоде.
Положите [Выручка] по месяцам календаря, рядом — меру выручки нарастающим итогом с начала года (YTD). Чему будет равен YTD в декабре?
Показать ответ
9 826 588 ₽ — годовому итогу. YTD копит с начала года, поэтому в последнем месяце совпадает с общей выручкой. А вот мера «прошлый год» (PY) на этом наборе вернёт пусто: данные только за 2026 год, сравнивать не с чем — это нормально.
Что дальше
Мы прошли все ключевые группы функций. Остался последний штрих, который отличает аккуратную меру от каши, — переменные VAR/RETURN. Им и закроем блок про DAX.