Урок 02 · 10 мин чтения

Time intelligence вглубь: YTD, PY, окна, календари

Полный набор временных приёмов на проверенных паттернах — от нарастающего итога до нестандартного календаря.

Базовый курс дал интуицию time intelligence. Здесь — рабочий набор приёмов, которыми закрывается почти любая временная задача. Все примеры — на нашем наборе с помеченной таблицей Календарь. Структура и формулы опираются на каноничные DAX Patterns Марко Руссо и Альберто Феррари.

Про данные за прошлый год

Сквозной учебный набор — это продажи за один 2026 год. Поэтому меры «прошлый год» (PY, YoY) на нём вернут пусто — сравнивать не с чем. Здесь они показаны как шаблоны формул: на реальном наборе с историей в 2+ года они сразу заработают.

Два способа сдвига: «обёртка» и «таблица дат»

У TI-функций два стиля, и полезно видеть оба.

Готовые обёртки — короткие, но менее гибкие:

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

Через таблицу дат внутри CALCULATE — длиннее, но управляемо и единообразно:

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

Выручка ПГ =
CALCULATE ( [Выручка], DATEADD ( Календарь[Дата], -1, YEAR ) )
Совет от SQLBI

Привыкайте к стилю CALCULATE ( [мера], DATES… ). Он единообразен (всегда «считай меру в этом наборе дат»), читается предсказуемо и легко комбинируется с другими фильтрами. Обёртки вроде TOTALYTD — синтаксический сахар поверх него.

Сравнения с прошлым

Выручка YoY     = [Выручка] - [Выручка ПГ]
Выручка YoY %   = DIVIDE ( [Выручка] - [Выручка ПГ], [Выручка ПГ] )

DATEADD сдвигает на произвольный шаг: -1, MONTH (к прошлому месяцу), -1, QUARTER (к прошлому кварталу). PARALLELPERIOD похож, но возвращает период целиком — удобно для «весь прошлый год» независимо от выбранного дня.

Накопительные и скользящие окна

Выручка QTD = CALCULATE ( [Выручка], DATESQTD ( Календарь[Дата] ) )
Выручка MTD = CALCULATE ( [Выручка], DATESMTD ( Календарь[Дата] ) )

Выручка за 90 дней =
CALCULATE (
    [Выручка],
    DATESINPERIOD ( Календарь[Дата], MAX ( Календарь[Дата] ), -90, DAY )
)

DATESINPERIOD — окно «N единиц назад от даты», основа скользящих средних. DATESBETWEEN — произвольный интервал между двумя датами, когда нужен полный контроль над границами.

Скользящее среднее

Средняя выручка за 3 мес =
VAR _Window = DATESINPERIOD ( Календарь[Дата], MAX ( Календарь[Дата] ), -3, MONTH )
RETURN
    DIVIDE (
        CALCULATE ( [Выручка], _Window ),
        CALCULATE ( DISTINCTCOUNT ( Календарь[ГодМесяц] ), _Window )
    )

Делим сумму за окно на число месяцев в окне — получаем среднее за месяц по последним трём.

Нестандартный (финансовый, недельный) календарь

Стандартные TI-функции предполагают григорианский год. Если год финансовый или учёт ведётся по неделям (4-4-5), обёртки не подойдут — границы периодов считают вручную через DATESBETWEEN по своим столбцам календаря (номер недели, финансовый период). У SQLBI это отдельные паттерны: month-related, week-related, custom calendars.

Выручка с начала фин. года =
CALCULATE (
    [Выручка],
    DATESYTD ( Календарь[Дата], "30/06" )   -- фин. год заканчивается 30 июня
)
Не пишите это руками каждый раз

Стандартные TI-меры собираются по шаблонам — забрать готовую (PY, YoY, YTD, скользящее) с подстановкой ваших таблиц можно в нашем генераторе DAX-мер. А когда временных мер становится много, весь набор (YTD, PY, YoY, скользящее) заменяют одной группой вычислений — этому посвящён отдельный урок в третьем, экспертном курсе.

Проверь себя на наборе

На сквозном наборе (продажи только за 2026 год) постройте [Выручка] по месяцам, рядом — YTD и меру прошлого года (SAMEPERIODLASTYEAR). Что покажут YTD в декабре и мера прошлого года?

Показать ответ

YTD в декабре = 9 826 588 ₽ — годовой итог (YTD копит с начала года). Мера прошлого года везде пустая: данных за 2025 в наборе нет, сравнивать не с чем. Это не ошибка формулы — на одногодичном наборе PY/YoY и должны быть пустыми. На реальном наборе с историей 2+ лет они сразу заработают.

Что дальше

Время освоили. Но что, если у факта две даты — заказа и отгрузки — и обе надо анализировать по одному календарю? Для этого нужны активные и неактивные связи. Следующий урок.

Какой стиль TI рекомендуют как самый единообразный и управляемый?
Стиль CALCULATE([мера], DATESYTD/DATEADD/…) читается единообразно («считай меру в этом наборе дат») и легко комбинируется с другими фильтрами. Обёртки — сахар поверх него.
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

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

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

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