1. Задача: завершить измерение даты
В предыдущей работе были доработаны измерения покупателя (Customer) и продукта (Product). Осталось последнее измерение — дата (Date Dimension). Нужно сделать его удобным для пользователя: заменить технический ключ на читаемую дату, построить иерархию и настроить естественную сортировку.
2. Вычисляемое поле Simple Date
Возвращаемся на уровень источника данных. В источнике есть поле Full Date Alternate Key — полная дата. На его основе создаём вычисляемое поле (computed field) Simple Date — простая дата.
Формула: из полной даты отдельно берутся месяц, день и год, затем они соединяются в строку. Перед годом ставится запятая. Разделитель может быть любым — в зависимости от требований отчёта.
3. Замена ключа даты
Поле Simple Date появляется в списке вычисляемых полей. Теперь его можно использовать в описании измерения. Вместо технического ключа даты (Date Key), который выглядит как целое число без разделителей, в колонку имени (Name Column) подставляется Simple Date. Ключ становится осмысленным для пользователя.
4. Иерархия календарной даты
Создаётся очевидная иерархия: год → полугодие → квартал → месяц → дата.
После этого поле Full Date Alternate Key больше не нужно: оно уже использовано для создания вычисляемого поля. Его можно удалить из куба.
5. Жёсткие связи атрибутов
Связи в календаре настраиваются как жёсткие (rigid). Календарь не меняется: месяцы не меняют положение в году, кварталы не переходят в другие полугодия. Поэтому связи:
- день → месяц;
- месяц → квартал;
- квартал → полугодие;
- полугодие → год.
Порядок атрибутов задаётся правильно, чтобы иерархия работала предсказуемо.
6. Вычисляемые названия месяцев, кварталов и полугодий
Чтобы отчёт выглядел аккуратно, создаются дополнительные вычисляемые поля.
Month Name — имя месяца. Формула: название месяца + пробел + год. Например: «Январь 2019». Год нужен, чтобы различать одинаковые месяцы разных лет.
Quarter Name — имя квартала. Формула: номер квартала + слово «календарный» + год. Например: «Q1 календарный 2019».
Semester Name — имя полугодия. Формула: номер полугодия + год. Например: «H1 2019», «H2 2019».
Эти поля подставляются вместо старых названий в измерении.
7. Уникальность месяцев, кварталов и полугодий
Название месяца повторяется из года в год. Если учитывать только название, все январи разных лет смешаются. Поэтому уникальность месяца определяется парой месяц + год. Аналогично для квартала и полугодия: к ним добавляется год.
В ключевых полях год поднимается наверх. Это важно для сортировки: сначала данные сортируются по более старшему элементу иерархии — году, затем по месяцу, кварталу или полугодию.
8. Сортировка месяцев по номеру
После первой проверки видно: года, полугодия и кварталы сортируются правильно, а месяцы идут в алфавитном порядке: февраль, январь, март, апрель. Это не соответствует календарю.
Для исправления используется показатель Month Number of Year — номер месяца в году. Его добавляют в атрибуты, но выключают из иерархии, чтобы он не отображался пользователю. Затем в свойстве Order By для Month Name указывается этот номер месяца. После развёртывания куба месяцы сортируются естественно: январь, февраль, март и так далее.
9. Развёртывание и проверка
После изменений выполняется развёртывание (deploy) куба на сервере. Затем нужно переподключиться (reconnect), чтобы изменения вступили в силу. Проверяются:
- сортировка по годам;
- сортировка по полугодиям;
- сортировка по кварталам;
- сортировка по месяцам.
10. Анализ куба в Excel
Куб выгружается в Excel. В сводной таблице:
- Sales Amount — сумма продаж — помещается в значения;
- Product Model Lines — линейки моделей продуктов — в колонки;
- Customer Geography — география клиентов — в строки;
- календарная дата — в фильтры.
Выбирая год, квартал, полугодие или месяц, можно анализировать продажи по странам, регионам, городам и продуктовым линейкам. OLAP-куб содержит полноценное описание структуры данных, которое передаётся бизнес-аналитику. Анализ можно выполнять и внутри той же среды, где создавался куб.
Краткие итоги
Работа с измерением даты показывает, что аналитическая модель становится практичной только тогда, когда техническая структура преобразуется в понятную для пользователя. Ключевой шаг — замена числового ключа на вычисляемое читаемое поле. Это снижает риск ошибок в отчётах и делает навигацию по данным интуитивной. Построение иерархии задаёт порядок анализа: от общего уровня к детальному. Жёсткие связи отражают стабильность календаря и позволяют системе заранее знать, как связаны атрибуты.
Отдельного внимания требует уникальность: месяц, квартал и полугодие повторяются, поэтому без года они теряют различимость. Это влияет и на ключи, и на сортировку. Если сортировать месяцы по названию, получается алфавитный порядок, который противоречит бизнес-логике. Поэтому номер месяца используется как скрытый служебный атрибут сортировки. Такой подход можно переносить на другие измерения, где есть повторяющиеся названия и иерархические уровни. После развёртывания важно проверять не только наличие данных, но и порядок элементов. Сводная таблица Excel показывает практическую ценность куба: пользователь может выбрать период, разрез по продуктам и географии, не обращаясь к исходным таблицам. В результате аналитик получает управляемую структуру для анализа, а разработчик — воспроизводимый способ настройки.
Нужно завершить измерение даты в OLAP-кубе. Сначала на уровне источника данных создаётся вычисляемое поле Simple Date. Оно формируется из поля Full Date Alternate Key: отдельно берутся месяц, день и год, затем соединяются в строку. Перед годом ставится запятая. Разделитель может быть другим, если это нужно для отчёта.
Затем Simple Date подставляется вместо технического Date Key в колонку имени. Теперь пользователь видит читаемую дату, а не число без разделителей. После этого поле Full Date Alternate Key можно удалить из куба: оно уже использовано.
Строится иерархия даты: год → полугодие → квартал → месяц → дата. Связи между уровнями делаются жёсткими, потому что календарь не меняется: месяцы всегда идут в одном порядке, кварталы не переходят в другие полугодия.
Чтобы отчёт выглядел аккуратно, создаются дополнительные вычисляемые поля. Month Name — это название месяца плюс год, например «Январь 2019». Quarter Name — номер квартала, слово «календарный» и год. Semester Name — номер полугодия и год. Год нужен потому, что месяцы, кварталы и полугодия повторяются из года в год. Без года нельзя определить уникальность: все январи разных лет смешаются.
В ключевых полях год ставится выше месяца, квартала и полугодия. Это нужно для сортировки: сначала данные сортируются по году, затем по более младшему уровню. Если год будет ниже, порядок станет неправильным.
После первой проверки видно, что годы, полугодия и кварталы сортируются верно, а месяцы идут по алфавиту: февраль, январь, март. Это не соответствует календарю. Для исправления используется Month Number of Year — номер месяца в году. Его добавляют в атрибуты, но выключают из иерархии, чтобы он не отображался. Затем в свойстве Order By для Month Name указывают номер месяца. После этого месяцы сортируются как январь, февраль, март и далее.
После изменений куб нужно развернуть (deploy) на сервере и переподключиться (reconnect). Затем проверяют сортировку годов, полугодий, кварталов и месяцев. Куб выгружается в Excel. В сводной таблице Sales Amount помещается в значения, Product Model Lines — в колонки, Customer Geography — в строки, календарная дата — в фильтры. Выбирая год, квартал, полугодие или месяц, можно анализировать продажи по странам, регионам, городам и продуктовым линейкам. OLAP-куб содержит описание структуры данных для анализа. Анализ можно выполнять и в Excel, и внутри той же среды.
1. Измерение даты дорабатывается через вычисляемое поле Simple Date.
2. Simple Date формируется из полной даты и заменяет технический ключ.
3. Иерархия даты: год → полугодие → квартал → месяц → дата.
4. Связи календарных атрибутов делаются жёсткими.
5. Названия месяцев, кварталов и полугодий дополняются годом.
6. Уникальность месяца определяется парой «месяц + год».
7. Год в ключевых полях ставится выше месяца для правильной сортировки.
8. Сортировка месяцев по названию даёт алфавитный порядок.
9. Для правильного порядка используется номер месяца в году.
10. Номер месяца скрывается из иерархии и применяется в Order By.
11. После изменений куб нужно развернуть и переподключиться.
12. Куб можно анализировать в сводной таблице Excel.
1. Зачем в измерении даты создаётся вычисляемое поле Simple Date?
2. Как формируется Simple Date из полной даты?
3. Почему Simple Date подставляется вместо ключа даты?
4. Какая иерархия строится для календарной даты?
5. Почему связи между уровнями даты называются жёсткими?
6. Зачем к названию месяца добавляется год?
7. Почему уникальность месяца нельзя определять только по названию?
8. Как год в ключевых полях влияет на сортировку?
9. Что происходит с месяцами при сортировке по текстовому названию?
10. Для чего используется номер месяца в году?
11. Почему номер месяца выключается из иерархии?
12. Как проверить правильность сортировки после развёртывания куба?