Слово «куб» пугает тех, кто впервые сталкивается с OLAP, хотя за ним стоит простая идея. Разберём её на примере сети магазинов, которая хочет анализировать продажи.
Меры: что считаем
Мера — числовой показатель, который можно складывать или как-то иначе агрегировать: выручка, количество проданных единиц, себестоимость, число чеков. Меры отвечают на вопрос «сколько?».
Некоторые меры вычисляются из других. Валовая прибыль — это выручка минус себестоимость, средний чек — выручка, делённая на число чеков. Такие вычисляемые меры описываются в модели формулой и пересчитываются на лету для любого среза.
Измерения: в каком разрезе считаем
Измерение — справочник, по которому группируются меры: время, магазин, товар, покупатель. Измерения отвечают на вопросы «когда?», «где?», «что?» и «кто?».
У измерения есть атрибуты (у товара: бренд, категория, цвет) и иерархии — заранее заданные пути детализации:
| Измерение | Иерархия |
|---|---|
| Время | Год → Квартал → Месяц → День |
| Магазин | Регион → Город → Магазин |
| Товар | Категория → Подкатегория → Товар |
Иерархии позволяют пользователю «проваливаться» от года к месяцу или от региона к конкретному магазину в один клик.
Куб: пересечение всего со всем
Представьте три измерения как оси: время, магазин, товар. Каждая комбинация значений — ячейка, а в ячейке лежат меры. Выручка молочной продукции в магазинах Северо-Запада в марте — это одна ячейка такого куба. Если измерений больше трёх, геометрическая картинка ломается, но принцип остаётся: куб — это все возможные пересечения измерений.
С кубом работают несколькими типичными операциями:
- срез — фиксируем одно значение измерения, например «только 2025 год»;
- детализация и свёртка — движемся вниз или вверх по иерархии;
- поворот — меняем местами строки и столбцы отчёта.
Почему это быстро
Сервер не пересчитывает миллионы строк продаж каждый раз. В многомерной модели SSAS часть агрегатов (например, выручка по месяцам и регионам) хранится заранее. В табличной модели данные лежат в памяти в сжатом колоночном формате, и суммирование по нужным колонкам идёт очень быстро. В обоих случаях отчёт открывается за секунды.
Как выглядит запрос
Пользователь обычно не пишет запросов: он перетаскивает поля в сводной таблице. Но под капотом Excel отправляет запрос на языке MDX:
SELECT
[Measures].[Выручка] ON COLUMNS,
[Магазин].[Регион].MEMBERS ON ROWS
FROM [Продажи]
WHERE [Время].[Месяц].&[2025-03]
А для табличной модели меры описывают на языке DAX:
Валовая прибыль := SUM ( Продажи[Выручка] ) - SUM ( Продажи[Себестоимость] )
Средний чек := DIVIDE ( [Выручка], DISTINCTCOUNT ( Продажи[НомерЧека] ) )
Формула пишется один раз и работает в любом разрезе: по магазину, по месяцу, по бренду.
Чтобы модель работала, под ней должны лежать правильно подготовленные данные. Об этом — в статье о схеме «звезда».