Таблица дат (Date Dimension)
Создаём отдельную таблицу-календарь — без неё не работает аналитика по периодам.
Таблица дат — справочник со сплошным календарём (по строке на каждый день), к которому привязываются факты для расчётов по времени.
Зачем нужна отдельная таблица дат
Почти любой бизнес-отчёт смотрит на время: продажи по месяцам, рост год к году, накопительный итог. Все эти расчёты (time intelligence в DAX) требуют специальной таблицы дат. Использовать столбец даты прямо из фактов нельзя по двум причинам: в фактах есть пропуски (дни без продаж выпадут из оси), и в фактах нет удобных атрибутов вроде «название месяца» или «квартал».
Каким должен быть календарь
Правильная таблица дат обязана быть непрерывной: ни одного пропущенного дня от первой до последней даты периода. Тогда на графике февраль не «схлопнется» из-за дня без заказов. Помимо самой даты, в неё добавляют производные столбцы для разрезов:
| Столбец | Пример | Зачем |
| Дата | 2026-06-22 | ключ связи |
| Год | 2026 | фильтр/ось по годам |
| Номер месяца | 6 | сортировка месяцев |
| Название месяца | Июнь | читабельная ось |
| Квартал | Q2 | квартальные отчёты |
| День недели | Понедельник | анализ по дням |
Как создать
Таблицу дат генерируют формулой DAX (например, функцией CALENDAR, задающей диапазон от минимальной до максимальной даты) или собирают в Power Query. Затем добавляют столбцы года/месяца/квартала. Ниже — учебный пример заполнения диапазона дат на чистом Python, чтобы прочувствовать логику «строка на каждый день»:
from datetime import date, timedelta
start = date(2026, 1, 1)
end = date(2026, 1, 7)
d = start
while d <= end:
print(d.isoformat(), "| год:", d.year, "| месяц:", d.month)
d += timedelta(days=1)Вывод:
2026-01-01 | год: 2026 | месяц: 1 2026-01-02 | год: 2026 | месяц: 1 2026-01-03 | год: 2026 | месяц: 1 2026-01-04 | год: 2026 | месяц: 1 2026-01-05 | год: 2026 | месяц: 1 2026-01-06 | год: 2026 | месяц: 1 2026-01-07 | год: 2026 | месяц: 1
Пометить и связать
Готовую таблицу нужно пометить как таблицу дат (Mark as Date Table) — так Power BI поймёт, что это календарь, и функции time intelligence заработают корректно. Затем создаётся связь «один-ко-многим»: Date[Дата] → Sales[order_date]. Часто полезный приём — сортировка по столбцу: чтобы «Июнь» стоял после «Мая», а не по алфавиту, столбец «Название месяца» сортируют по «Номеру месяца».
Как работает под капотом
Функции вроде TOTALYTD внутри строят набор дат от начала года до текущей и применяют его как фильтр к фактам через связь с таблицей дат. Если календарь дырявый или таблица не помечена, движок не может корректно сформировать эти диапазоны — расчёты по периодам ломаются или дают неверные суммы.
Частые ошибки
- Использовать дату из фактов вместо отдельной таблицы. Пропуски дней и нехватка атрибутов ломают аналитику по времени.
- Дырявый календарь. Любой пропущенный день искажает периоды и накопительные итоги.
- Месяцы по алфавиту. Без «сортировки по столбцу» порядок месяцев на оси будет неверным.
Итог
- Отдельная непрерывная таблица дат обязательна для time intelligence.
- Добавьте столбцы года/месяца/квартала и пометьте таблицу как таблицу дат.
- Свяжите её с фактами и настройте сортировку названий месяцев по номеру.