Как создать таблицу дат в Power BI

Что такое таблица дат и зачем она нужна?
Таблица дат — это справочная (dimension) таблица, где каждая строка соответствует одному календарному дню и содержатся атрибуты: год, квартал, месяц, день недели и т. д. Её ещё называют календарной таблицей.
Зачем нужна таблица дат в Power BI:
- Для корректных вычислений временной аналитики (time intelligence).
- Чтобы создавать и фильтровать даты в модели данных централизованно.
- Для удобного построения визуализаций с иерархиями (год → квартал → месяц → день).
- Чтобы гарантировать, что все даты стандартизированы и отсутствуют пропуски.
- Для правильного построения отношений между таблицами (fact и dimension).
Важно: без корректной таблицы дат функции вроде TOTALYTD, SAMEPERIODLASTYEAR и других временных функций DAX могут давать неправильные результаты.
Требования к таблице дат
Ключевые требования при создании таблицы дат:
- Первый столбец должен быть типа date/date-time и содержать только даты.
- Значения дат должны быть уникальными и без пустых строк.
- В таблице не должно быть пропусков: все даты в требуемом диапазоне должны присутствовать.
- После создания таблицу нужно пометить как «Date Table» в Power BI.
Автоматическое создание через Auto Date/Time
Power BI может автоматически генерировать календарные иерархии на основе ваших полей дат.
Как включить Auto date/time:
- Перейдите в Файл > Параметры и настройки.
- Выберите Параметры > Текущий файл > Загрузка данных > Time Intelligence.
- Отметьте «Enable Auto date/time».
Иерархия будет включать Year, Quarter, Month и Day.
Примечание: Auto Date/Time удобно для быстрого старта, но для производительных моделей и сложных расчётов рекомендуется создавать собственную таблицу дат и помечать её как Date Table.
Создание таблицы дат с помощью DAX
Power BI поддерживает функции CALENDAR и CALENDARAUTO. Разница — CALENDAR использует явно указанные границы, CALENDARAUTO пытается определить диапазон автоматически по данным модели.
Пример с CALENDAR (фиксированный диапазон):
- Перейдите на вкладку Главная.
- Нажмите Новая таблица.
- Введите DAX-формулу:
Date = CALENDAR(DATE(2022,1,1), DATE(2023,12,31))Если нужно, чтобы диапазон расширялся автоматически до текущей даты, используйте TODAY():
Date = CALENDAR(DATE(2022,1,1),TODAY())Добавление столбцов с базовыми атрибутами:
Year = YEAR('Date'[Date])
Month = MONTH('Date'[Date])
Month Cat = FORMAT('Date'[Date],"MMM")
Day = DAY('Date'[Date])
Week = "Week " & WEEKNUM('Date'[Date])
Qtr = "Qtr " & QUARTER('Date'[Date])После создания «Month Cat» обязательно отсортируйте этот столбец по числовому столбцу Month (Sort By Column), чтобы месяцы отображались в правильном порядке.
Продвинутый DAX: компактный и расширяемый шаблон
Если вы знакомы с DAX, удобнее создавать таблицу через VAR + ADDCOLUMNS — это позволяет сгенерировать базовый диапазон и добавить вычисляемые столбцы в одном выражении.
Пример скрипта:
DateTable =
VAR StartDate = DATE(2020, 1, 1) // You can set the start date according to your requirement
VAR EndDate = DATE(YEAR(TODAY()), 12, 31) // Set end date to the end of the current year
RETURN
ADDCOLUMNS (
CALENDAR (StartDate, EndDate),
"DayOfWeek", WEEKDAY([Date]),
"DayOfWeekName", FORMAT([Date], "dddd")
)
Как использовать:
- Нажмите Новая таблица.
- Вставьте скрипт и при необходимости измените StartDate.
Этот шаблон легко расширять: добавляйте FiscalYear, IsHoliday (булев), WeekOfYear и другие вычисляемые поля в ADDCOLUMNS.
Как пометить таблицу как таблицу дат
После создания таблицы важно пометить её в Power BI как Date Table — это позволяет Power BI корректно обрабатывать временные функции.
Шаги:
- Правой кнопкой мыши на имени таблицы в панели Поля.
- Выберите Отметить как таблицу дат.
- Или используйте соответствующую кнопку на ленте Power BI.
- Укажите столбец с датой и подтвердите Ok.
Когда собственная таблица дат не нужна и когда Auto Date/Time пригодится
Контрпримеры / когда не нужно создавать таблицу дат вручную:
- Небольшая однотабличная модель для быстрого ад-хок отчёта; Auto Date/Time ускоряет работу.
- Если вы не используете сложные временные расчёты и производительность не критична.
Когда ручная таблица предпочтительнее:
- Большие модели данных, где важна оптимизация памяти и контроля диапазона дат.
- Нужен финансовый год (fiscal year), начиная с нестандартной даты.
- Требуется учитывать праздники, скользящие окна и сложные бизнес-правила.
Альтернативные подходы
- CALENDARAUTO([fiscal_year_end_month]) — автоматически определяет диапазон дат из модели.
- Использование внешней таблицы календаря из CSV/SQL с уже подготовленными атрибутами (праздники, сезоны).
- Комбинация: импортировать базовый календарь и дополнять DAX-вычислениями.
Мини-пошаговая методология (быстрый SOP)
- Определите диапазон дат (покройте все фактические значения из ваших таблиц фактов).
- Создайте таблицу через CALENDAR/CALENDARAUTO или импортируйте внешний календарь.
- Добавьте ключевые столбцы: Year, MonthNum, MonthName, Day, DayOfWeek, WeekOfYear, Quarter.
- Добавьте бизнес-столбцы: FiscalYear, IsHoliday, Season, IsBusinessDay.
- Отсортируйте текстовые категории по числовым столбцам (MonthName по MonthNum).
- Пометьте таблицу как Date Table и укажите столбец дат.
- Создайте отношения между датой в фактах и датой в календаре.
- Прогоните тесты приёмки (см. раздел Критерии приёмки).
Ролевые чек-листы
Для аналитика:
- Убедиться в покрытии диапазона дат всей историей отчётов.
- Проверить корректность сортировки месяцев.
- Настроить расчёты year-to-date, period-over-period.
Для инженера данных:
- Проверить уникальность и отсутствие NULL в столбце даты.
- Оптимизировать формат данных (тип date вместо text).
- Добавить индексацию/оптимизацию в источнике при импорте большого календаря.
Для владельца продукта/бизнеса:
- Подтвердить требуемый формат финансового года.
- Дать список требуемых бизнес-атрибутов (праздники, сезонность).
Критерии приёмки
- Диапазон дат покрывает минимальную и максимальную дату фактов.
- Нет пустых или дублируемых дат.
- MonthName корректно отсортирован по MonthNum.
- Таблица помечена как Date Table в Power BI.
- Временные DAX-функции дают ожидаемые результаты (например, TOTALYTD).
Фактбокс: ключевые моменты
- Обязательное поле: уникальная дата (одна запись = один день).
- CALENDAR — явное задание диапазона; CALENDARAUTO — автоматическое определение.
- Пометка «Mark as Date Table» обязательна для корректной работы time intelligence.
Примеры тестовых сценариев и приёмки
- Создайте тестовый набор фактов, где минимальная дата = 2021-02-10 и максимальная = 2023-11-30. После создания календаря проверьте, что эти даты присутствуют.
- Тест для сортировки месяцев: убедитесь, что январь идёт перед февралем даже при использовании текстовых названий.
- Тест на годовую агрегацию: сравните сумму продаж за год, рассчитанную с помощью связи на таблицу дат, и суммой по исходным данным.
Глоссарий — 1 строкой
- Таблица дат: справочная таблица с одной строкой на каждый календарный день.
- Time intelligence: DAX-функции для расчётов по времени (YTD, MTD и др.).
- CALENDAR/CALENDARAUTO: DAX-функции для генерации диапазона дат.
Риски и рекомендации по их уменьшению
- Риск: пропуски в диапазоне дат → Рекомендация: всегда проверяйте min/max дат в фактах и включайте буфер по краям.
- Риск: неправильная сортировка месяцев → Рекомендация: используйте числовой столбец MonthNum и Sort By Column.
- Риск: дублирование календарей в модели → Рекомендация: одна централизованная таблица дат, используемая всеми фактами.
Резюме
Таблица дат — базовый и критически важный компонент любой модели Power BI, которая анализирует данные по времени. Для простых случаев подойдёт Auto date/time, но для серьёзных проектов рекомендуется собственная таблица дат, созданная через DAX или импортированная из надежного источника, помеченная как Date Table и снабжённая бизнес-атрибутами.
Короткий чек-лист: покрытие диапазона → уникальные даты → дополнительные атрибуты → сортировка → пометка как Date Table → создание связей.
Важно: перед деплоем проверьте ключевые временные расчёты (YTD, QoQ, SamePeriodLastYear) на тестовых данных.
Похожие материалы
Обзор приложения NPR для iPhone
Workflow: создать расширение iOS и автоматизировать задачи
Как пожаловаться на пользователя в Discord
Technology Previews в Lightroom Mobile — как включить
Спортивные обновления через Amazon Alexa