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

Календарь в DAX (с готовым кодом)

Полноценная таблица дат — фундамент любой временной аналитики. Строим её на DAX и забираем готовый код.

В базовом курсе мы загрузили готовый Календарь из CSV. На реальном проекте таблицу дат чаще создают прямо в модели — на DAX. Это фундамент: без неё не работает ни одна функция time intelligence. Разберём, как построить календарь правильно, и заберём готовый код.

Зачем отдельная таблица дат

Соблазн — фильтровать по дате прямо из факта (Продажи[Дата]). Так делать не надо. Нужна отдельная таблица дат, потому что:

  • по ней строятся все TI-функции (YTD, прошлый год) — им нужен непрерывный ряд дат без пропусков;
  • один календарь связывается со всеми фактами разом (продажи, отгрузки, платежи);
  • в нём удобно держать год, квартал, день недели, признак рабочего дня — в разрезах.
Отключите авто-календарь

Power BI по умолчанию создаёт скрытую авто-таблицу дат на каждый столбец с датой. Это раздувает модель и не переиспользуется. Отключите (Options → Data Load → снять «Auto date/time») и сделайте одну явную таблицу.

CALENDAR и CALENDARAUTO

Две базовые функции:

  • CALENDAR ( начало, конец ) — ряд дат между двумя границами, которые вы задаёте сами;
  • CALENDARAUTO () — сам определяет диапазон по всем датам в модели (удобно, но требует хотя бы одного столбца-даты).

Дальше «обвешиваем» ряд нужными столбцами через ADDCOLUMNS:

Календарь =
VAR _Base = CALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2026, 12, 31 ) )
RETURN
ADDCOLUMNS (
    _Base,
    "Год",           YEAR ( [Date] ),
    "Месяц",         MONTH ( [Date] ),
    "НазваниеМесяца", FORMAT ( [Date], "MMMM" ),
    "ГодМесяц",      FORMAT ( [Date], "YYYY-MM" ),
    "Квартал",       "Q" & ROUNDUP ( MONTH ( [Date] ) / 3, 0 ),
    "ДеньНедели",    FORMAT ( [Date], "ddd" ),
    "Дата",          [Date]
)
Готовый код — забрать

Полная версия с кварталами, годом-месяцем, номером дня недели и признаком рабочего дня — скачать calendar.dax. Вставьте в Modeling → New table, поправьте границы дат под свои данные.

Обязательный шаг: пометить как таблицу дат

После создания — Table tools → Mark as date table → столбец Дата. Без этого половина TI-функций считает непредсказуемо. Это самая частая причина «странных» багов времени.

Две тонкости, на которых спотыкаются

Сортировка месяцев. Столбец НазваниеМесяца (текст «январь», «февраль») по умолчанию сортируется по алфавиту → «август» окажется первым. Задайте сортировку по Месяц (числу) через Column tools → Sort by column.

Полный год. Календарь должен покрывать все даты фактов и быть непрерывным — от 1 января первого года до 31 декабря последнего. Дыры ломают накопительные итоги.

Финансовый год и праздники

Для финансового года, начинающегося не с января, CALENDARAUTO принимает месяц конца года: CALENDARAUTO(6). Праздники держите отдельным справочником и подтягивайте LOOKUPVALUE — это надёжнее, чем зашивать их в формулу.

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

Создайте календарь из урока на диапазон DATE(2024,1,1)DATE(2026,12,31) и пометьте как таблицу дат. Сколько строк (дней) должно получиться?

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

1096 строк. 2024 — високосный (366 дней), 2025 и 2026 — по 365: 366 + 365 + 365 = 1096. Если число другое — проверьте границы в CALENDAR (частая опечатка — DATE(2026,12,30) вместо 31) и что диапазон без дыр.

Что дальше

Календарь готов и помечен. Теперь он раскрывает всю мощь функций времени. В следующем уроке разберём time intelligence вглубь — на проверенных паттернах: YTD, прошлый год, скользящие окна и нестандартные календари.

Что обязательно сделать с таблицей дат после её создания на DAX?
Пометка «Mark as date table» — обязательный шаг: без неё функции time intelligence работают непредсказуемо. И не забудьте отключить авто-календарь Power BI.
Прогресс сохраняется в вашем браузере.
§ Power BI под ключ

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

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

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