Схема «звезда»: факты и измерения
Учимся раскладывать данные на факты и измерения — фундамент быстрой модели.
Звезда (star schema) — структура модели, где в центре таблица фактов (события с числами), а вокруг — таблицы измерений (справочники с атрибутами).
Зачем вообще модель
Можно свалить все данные в одну широкую таблицу — и многие новички так и делают. Но «плоская» таблица плохо сжимается, тяжело фильтруется и дублирует справочные данные в каждой строке. Профессиональный подход — разложить данные на факты и измерения. Это не каприз, а проверенная десятилетиями методология хранилищ данных (Кимбалл), и движок Power BI оптимизирован именно под неё.
Факты и измерения
Различать их просто по вопросу «что измеряем / в каком разрезе».
| Таблица фактов | Таблица измерений | |
| Что хранит | события: продажи, заказы | справочники: товары, клиенты, даты |
| Содержимое | числа (сумма, кол-во) + ключи | атрибуты (название, категория, регион) |
| Размер | много строк (миллионы) | мало строк (сотни/тысячи) |
| Пример | Sales | Product, Customer, Date |
Как выглядит звезда
┌───────────┐
│ Date │
│ (дата) │
└─────┬─────┘
│
┌──────────┐ ┌──┴───────┐ ┌──────────┐
│ Product ├──┤ SALES ├──┤ Customer │
│ (товар) │ │ (факты) │ │ (клиент) │
└──────────┘ └──┬───────┘ └──────────┘
│
┌─────┴─────┐
│ Store │
│ (магазин) │
└───────────┘В центре — Sales с числами и ключами (product_id, customer_id, date, store_id). По краям — измерения, описывающие каждый ключ. Срез по региону, фильтр по категории, разбивка по месяцам — всё это приходит из таблиц-измерений и «стекает» в факты по связям.
Почему звезда быстрее
Движок VertiPaq лучше всего сжимает таблицы измерений (мало уникальных значений) и эффективно фильтрует факты через связи. В плоской таблице категория «Электроника» повторяется в миллионах строк; в звезде она хранится один раз в справочнике Product. Меньше повторов — лучше сжатие — быстрее отчёт.
Как работает под капотом
Когда пользователь выбирает в срезе «регион = Юг», фильтр применяется к таблице Customer, затем по связи «спускается» к фактам Sales и оставляет только строки нужных клиентов. Меры считаются уже по этому отфильтрованному набору. Поэтому корректная звезда с однонаправленными связями делает поведение фильтров предсказуемым — это напрямую связано с контекстом фильтра в DAX, который мы изучим дальше.
Частые ошибки
- Одна гигантская плоская таблица. Тормозит, раздувает модель, дублирует справочники.
- Снежинка вместо звезды без нужды. Дробление измерений на под-справочники усложняет модель; для большинства задач звезда достаточна.
- Числа-меры в таблицах измерений. Измерения — это атрибуты для разрезов, а не место для сумм.
Итог
- Звезда: факты (числа+ключи) в центре, измерения (справочники) по краям.
- Такая структура лучше сжимается и быстрее фильтруется, чем плоская таблица.
- Фильтры из измерений «стекают» в факты по связям — основа предсказуемого поведения отчёта.