В базовом курсе мы загрузили готовый Календарь из 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, прошлый год, скользящие окна и нестандартные календари.