Введение в OLAP и хранилища данных

OLAP-куб. Дополнение третьего измерения

Рассматривается завершающий этап построения измерений: добавление в измерение «Клиент» даты первой покупки и создание измерения «Продукт» с переносом ключевых атрибутов товара. Показано, зачем нужны статус, даты начала и окончания, характеристики товара. Объясняется, что OLAP-куб не сводится к SELECT-запросу: он ускоряет доступ к мерам, использует MDX, распараллеливает нагрузку и подготавливает иерархии.

Основные мысли

В результате изучения лекции слушатель будет способен:
1. Называть атрибуты, добавляемые в измерения «Клиент» и «Продукт».
2. Объяснять назначение даты первой покупки, статуса, дат начала и окончания товара.
3. Различать хранение данных в схемах «звезда» и «снежинка» и аналитический доступ через OLAP-куб.
4. Понимать роль MDX, мер, фильтров и иерархий при работе с многомерными данными.
5. Оценивать преимущества OLAP-куба по быстродействию и распределению нагрузки.
6. Применять логику переноса атрибутов для завершения измерений.
Показывать лекцию целиком
Краткое изложение

1. Завершение измерения «Клиент»

Перед последним измерением «Продукт» (Product) в измерение «Клиент» (Customer) нужно добавить атрибут Дата первой покупки (Date First Purchase). Это первая дата покупки в магазине. Добавляется простым переносом поля. После сохранения переходим к измерению «Продукт» (Product). Источник раскрывается полностью, пока перенесён только ключ.

2. Создание измерения «Продукт»

Переносим атрибуты товара:

Нужно знать, продаётся товар до сих пор или нет, поэтому важен статус. Даты начала и окончания позволяют проверить, что на момент покупки товар был актуален. Сохраняем список атрибутов. Измерение «Продукт» готово.

3. Промежуточный результат и его отличие от SELECT

На этом этапе создан проект: структура OLAP-куба (OLAP cube), указанные измерения (dimensions), подмножество полей из исходных больших измерений. Может показаться, что задача решается обычным запросом SELECT: выбрать не всё, а часть информации. То есть пока мы лишь сократили объём выборки. Но это не так. Ещё не показана интеллектуальная компонента, которая даёт мгновенный быстрый доступ к мерам (measures) из таблицы фактов (fact table) на основании фильтров или условий по измерениям. Этот механизм ускорения уже реализован в фоне, но не виден явно. OLAP-куб умнее, чем схема «звезда» (star schema) или «снежинка» (snowflake schema). Схема «снежинка» подходит для хранения, но когда важен вопрос быстродействия, OLAP-куб существенно превосходит прямой SELECT-запрос к схеме «звезда» или «снежинка».

4. OLAP-куб, MDX и производительность

Для запросов к многомерным данным используется язык MDX (Multidimensional Expressions — язык многомерных выражений). Создаваемая структура работает намного быстрее обычного SELECT к первичному источнику. OLAP-кубов много, поэтому доступ распараллеливается: нагрузка распределяется, и каждый пользователь работает с тем кубом, который представляет для него интерес. Хранилище одно, и без кубов всем пришлось бы одновременно подключаться к нему за нужной информацией.

5. Распараллеливание и иерархии

На кубе далее создаются иерархии (hierarchies). Они позволяют значительно быстрее и эффективнее работать с данными. Поэтому происходящее не сводится к простому набору фильтров: за этим стоит создание сложных структур.

Краткие итоги

Практическая ценность многомерной модели раскрывается через разделение хранения и анализа. Данные удобно размещать в схемах, приспособленных для целостности и связей, но управленческие вопросы требуют быстрых срезов, фильтрации и сравнений. Поэтому между источником и пользователем появляется слой, где заранее подготовлены измерения, меры и связи. Он не просто сокращает выборку, а меняет способ доступа: вместо тяжёлых соединений по первичным таблицам пользователь работает с уже организованной структурой.

Полнота измерений важна не сама по себе. Дата первой покупки, статус товара, даты начала и окончания превращают измерения в инструменты исторической корректности. Они позволяют отделять актуальные объекты от устаревших и не приписывать факту свойства, которых в момент события не было. Стоимостные, складские и классификационные атрибуты дают основу для детализации: анализ можно вести по товарным линиям, классам, стилям, моделям и запасам, не возвращаясь каждый раз к исходной системе.

Ключевое отличие аналитической структуры от обычного запроса состоит в наличии скрытого механизма ускорения. Пользователь видит фильтры и разрезы, но за ними стоит предварительно организованная многомерная модель. Она обеспечивает быстрый доступ к мерам из таблицы фактов. Язык многомерных выражений становится инструментом формулировки запросов, а не заменой хранилища. Хранение и вычисление разделяются: схема «снежинка» может отвечать за размещение данных, тогда как куб — за скорость и удобство анализа.

Распараллеливание доступа через множество кубов снижает конкуренцию за единое хранилище. Каждый куб обслуживает свой круг задач, поэтому нагрузка распределяется, а пользователи не блокируют друг друга. Иерархии усиливают этот эффект: они задают понятные маршруты навигации и позволяют быстрее получать агрегаты на разных уровнях. В результате модель становится не просто набором атрибутов, а рабочим контуром для повторяемых аналитических операций.

Практический вывод: качество такой системы зависит от дисциплины проектирования. Нужно заранее определить, какие атрибуты действительно важны, как проверять актуальность записей, где проходят границы между хранением и анализом. Тогда многомерная структура даёт не иллюзию фильтрации, а устойчивый прирост скорости, корректности и удобства работы с данными.

  1. Измерение «Клиент»

    Перед созданием измерения «Продукт» в «Клиент» добавляется Дата первой покупки (Date First Purchase) — первая дата покупки в магазине. Поле переносится просто.

  2. Измерение «Продукт»

    Переносятся атрибуты: стандартная стоимость (Standard Cost), уровень страхового запаса (Safety Stock Level), точка повторного заказа (Reorder Point), прайсовая цена (List Price), размер (Size), диапазон размеров (Size Range), вес (Weight), товарная линейка (Product Line), дилерская цена (Dealer Price), класс (Class), стиль (Style), название модели (Model Name), дата начала (Start Date), дата окончания (End Date), статус (Status). Статус показывает, продаётся ли товар до сих пор. Даты начала и окончания нужны для проверки актуальности товара на момент покупки.

  3. Что уже создано

    Создан проект OLAP-куба (OLAP cube), структура куба, измерения и подмножество полей из исходных больших измерений. Внешне это похоже на SELECT: выбирается часть информации. Но это не так. Ещё не показана интеллектуальная компонента, дающая мгновенный быстрый доступ к мерам (measures) из таблицы фактов (fact table) по фильтрам или условиям на измерения. Механизм ускорения уже реализован в фоне, но не виден явно. OLAP-куб умнее схем «звезда» (star schema) и «снежинка» (snowflake schema). «Снежинка» подходит для хранения. Когда важен вопрос быстродействия, OLAP-куб значительно превосходит прямой SELECT к «звезде» или «снежинке».

  4. MDX и производительность

    Для запросов к многомерным данным используется MDX (Multidimensional Expressions — язык многомерных выражений). Структура работает быстрее обычного SELECT к первичному источнику. OLAP-кубов много, поэтому доступ распараллеливается: нагрузка распределяется, каждый пользователь работает с нужным ему кубом. Хранилище одно, и без кубов всем пришлось бы одновременно подключаться к нему.

  5. Иерархии

    На кубе создаются иерархии (hierarchies). Они позволяют быстрее и эффективнее работать с данными. За внешним набором фильтров стоит создание сложных структур.

Выводы

1. Перед созданием измерения «Продукт» в измерение «Клиент» добавляется дата первой покупки.
2. Измерение «Продукт» получает товарные атрибуты: стоимость, запасы, цены, размер, вес, линейку, класс, стиль, модель, даты и статус.
3. Статус товара показывает, продаётся ли он до сих пор.
4. Даты начала и окончания нужны для проверки актуальности товара на момент покупки.
5. Создан проект OLAP-куба с измерениями и подмножеством полей.
6. Промежуточный результат внешне похож на SELECT, но это не одно и то же.
7. OLAP-куб содержит механизм быстрого доступа к мерам из таблицы фактов по фильтрам.
8. Этот механизм уже реализован, но пока не виден явно.
9. OLAP-куб умнее схем «звезда» и «снежинка»; «снежинка» подходит для хранения.
10. При запросах к многомерным данным используется MDX.
11. OLAP-куб работает быстрее прямого SELECT к первичному источнику.
12. Множество кубов распараллеливает нагрузку; иерархии ускоряют и делают работу эффективнее.

Вопросы для самопроверки

1. Какой атрибут добавляется в измерение «Клиент» перед созданием измерения «Продукт»?
2. Что означает дата первой покупки?
3. Почему в измерении «Продукт» важен статус товара?
4. Для чего нужны даты начала и окончания товара?
5. Какие товарные характеристики переносятся в измерение «Продукт»?
6. Что уже создано к промежуточному этапу?
7. Почему промежуточный результат нельзя свести к обычному SELECT?
8. Какая компонента даёт быстрый доступ к мерам из таблицы фактов?
9. В чём преимущество OLAP-куба перед схемой «звезда» или «снежинка»?
10. Какой язык используется для запросов к многомерным данным?
11. Как множество кубов влияет на нагрузку на хранилище?
12. Зачем на кубе создаются иерархии?
Вернуться к учебному плану