Урок 23 · 8 мин чтения

Time intelligence: YTD, прошлый год, скользящее среднее

Функции времени превращают «выручку» в «выручку с начала года» и «к прошлому году» одной строкой — если есть таблица дат.

Управленческая аналитика почти всегда про время: с начала года, к прошлому году, в среднем за период. В DAX для этого целое семейство функций — time intelligence. Они выглядят как магия, но под ними простая идея: взять текущий период и сдвинуть или расширить его границы.

Обязательное условие — таблица дат

Прежде чем что-то писать: нужна нормальная таблица дат, помеченная как date table (наш Календарь). Без неё функции времени работают непредсказуемо.

Не пропускайте этот шаг

Пометьте Календарь как таблицу дат (Table tools → Mark as date table → столбец Дата). Это календарь без пропусков, с одной строкой на каждый день. Половина «странных» багов time intelligence — из-за того, что таблицу дат забыли пометить.

Прошлый год: SAMEPERIODLASTYEAR

Выручка ПГ =
CALCULATE ( [Выручка], SAMEPERIODLASTYEAR ( Календарь[Дата] ) )

SAMEPERIODLASTYEAR сдвигает текущий период ровно на год назад, а CALCULATE считает выручку в этом сдвинутом контексте. На основе этого строятся приросты:

Выручка YoY % =
DIVIDE ( [Выручка] - [Выручка ПГ], [Выручка ПГ] )
В нашем наборе только 2026

Учебный датасет — за один год, поэтому Выручка ПГ выйдет пустой: прошлого года в данных нет. Это нормально — урок про то, как пишутся эти функции. На реальных данных за 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.

Что обязательно нужно, чтобы функции time intelligence (YTD, прошлый год) работали корректно?
Time intelligence опирается на помеченную таблицу дат с одной строкой на день и без пропусков. Без неё функции считают непредсказуемо — это причина половины «странных» багов.
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

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

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

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