Схема «звезда»: факты и измерения

Учимся раскладывать данные на факты и измерения — фундамент быстрой модели.

Звезда (star schema) — структура модели, где в центре таблица фактов (события с числами), а вокруг — таблицы измерений (справочники с атрибутами).

Зачем вообще модель

Можно свалить все данные в одну широкую таблицу — и многие новички так и делают. Но «плоская» таблица плохо сжимается, тяжело фильтруется и дублирует справочные данные в каждой строке. Профессиональный подход — разложить данные на факты и измерения. Это не каприз, а проверенная десятилетиями методология хранилищ данных (Кимбалл), и движок Power BI оптимизирован именно под неё.

Факты и измерения

Различать их просто по вопросу «что измеряем / в каком разрезе».

Таблица фактовТаблица измерений
Что хранитсобытия: продажи, заказысправочники: товары, клиенты, даты
Содержимоечисла (сумма, кол-во) + ключиатрибуты (название, категория, регион)
Размермного строк (миллионы)мало строк (сотни/тысячи)
ПримерSalesProduct, Customer, Date

Как выглядит звезда

            ┌───────────┐
            │  Date     │
            │ (дата)    │
            └─────┬─────┘
                  │
 ┌──────────┐  ┌──┴───────┐  ┌──────────┐
 │ Product  ├──┤   SALES  ├──┤ Customer │
 │ (товар)  │  │ (факты)  │  │ (клиент) │
 └──────────┘  └──┬───────┘  └──────────┘
                  │
            ┌─────┴─────┐
            │  Store    │
            │ (магазин) │
            └───────────┘

В центре — Sales с числами и ключами (product_id, customer_id, date, store_id). По краям — измерения, описывающие каждый ключ. Срез по региону, фильтр по категории, разбивка по месяцам — всё это приходит из таблиц-измерений и «стекает» в факты по связям.

Почему звезда быстрее

Движок VertiPaq лучше всего сжимает таблицы измерений (мало уникальных значений) и эффективно фильтрует факты через связи. В плоской таблице категория «Электроника» повторяется в миллионах строк; в звезде она хранится один раз в справочнике Product. Меньше повторов — лучше сжатие — быстрее отчёт.

Как работает под капотом

Когда пользователь выбирает в срезе «регион = Юг», фильтр применяется к таблице Customer, затем по связи «спускается» к фактам Sales и оставляет только строки нужных клиентов. Меры считаются уже по этому отфильтрованному набору. Поэтому корректная звезда с однонаправленными связями делает поведение фильтров предсказуемым — это напрямую связано с контекстом фильтра в DAX, который мы изучим дальше.

Частые ошибки

  • Одна гигантская плоская таблица. Тормозит, раздувает модель, дублирует справочники.
  • Снежинка вместо звезды без нужды. Дробление измерений на под-справочники усложняет модель; для большинства задач звезда достаточна.
  • Числа-меры в таблицах измерений. Измерения — это атрибуты для разрезов, а не место для сумм.

Итог

  • Звезда: факты (числа+ключи) в центре, измерения (справочники) по краям.
  • Такая структура лучше сжимается и быстрее фильтруется, чем плоская таблица.
  • Фильтры из измерений «стекают» в факты по связям — основа предсказуемого поведения отчёта.
Проверьте себя
1. Что хранит таблица фактов?
AНазвания категорий и регионов
BЧисловые события и ключи на измерения
CТолько текстовые описания
DНастройки визуалов
2. Почему звезда быстрее одной плоской таблицы?
AМеньше дублирования справочных данных и лучше сжатие
BЗвезда красивее
CПлоская таблица не открывается
DЗвезда хранит меньше фактов