Внимание!
Работа по созданию OLAP кубов и проведению анализа данных требует полного функционала SQL Server. Для этого есть две редакции: developer и enterprise. Версия Developer бесплатная и рекомендована для образовательных целей. Enterprise версия бесплатно предоставляется на период 180 дней.
Обе версии можно скачать по ссылке https://www.microsoft.com/ru-ru/sql-server/sql-server-downloads.
Возможная ошибка
Если у вас уже создана своя база данных Cinema, то восстановление из резервной копии с именем существующей базы данных не возможно. В этом случае необходимо удалить свою БД с таким названием (можно сделать резервную копию перед удалением на всякий случай), а потом уже разворачивать предоставленную в курсе версию.
1. Уточняющий запрос по продукту и файлы ошибок
Второй уточняющий запрос посвящён продукту. Система предупреждает: указано, что
строки без пары нужно выгружать в отдельный файл, но сам файл не выбран. Поэтому выбираем файл для
ошибок. Плоский файл (flat file) здесь не нужен; используем
неструктурированный файл (row-file). Создаём файл
«Продакт Эрр» — ошибки по продукту. Также заранее создаём файлы для будущих
измерений (dimension): «Адрес» и
«Сотрудник», чтобы не возвращаться к этому позже. В настройках выбираем файл
«Продакт Эрр» и все колонки для выгрузки.
2. Уточняющий запрос по сотруднику
Третья размерность — сотрудник. Логика та же: дальше идут только совпавшие строки,
несовпавшие попадают в файл ошибок. Используется частичное кэширование
(caching). Соединяемся с хранилищем и выбираем таблицу
«Сотрудник».
Соответствие с сотрудником: ставим галочку на ключ, сопоставляем Sales Person ID с
Business Entity ID. Также выгружается департамент сотрудника.
Департамент должен быть актуален на момент продажи, поэтому Order Date
сопоставляем с Start Date.
При первом проходе возникает несовпадение типов: в измерении сотрудника указан Date,
а в источнике — DateTime. Исправляем тип, сохраняем, обновляем таблицу и повторяем
сопоставление. После этого связываем Line Total, Quantity,
Product ID, City, State,
Province и Sales Person с Business Entity ID.
Правило: идентификатор сотрудника в продаже должен совпасть с идентификатором в измерении
«Сотрудник». Один сотрудник встречается столько раз, сколько раз он менял
департамент. Поэтому нужно выбрать версию сотрудника на тот момент, когда он работал в департаменте,
соответствующем дате продажи. За дату продажи отвечает Order Date — второй параметр
в условии. Используем оператор Between: дата продажи должна находиться между
Start Date и End Date.
Затем выгружаем ошибки в отдельный файл: выбираем файл «Сотрудник», все столбцы.
3. Агрегация фактов
Перед загрузкой факта нужно выполнить агрегацию (aggregate).
Показатели Line Total и Quantity суммируются. Операция
суммирования ставится после полного соответствия по всем измерениям. Берём строки, успешно прошедшие
сопоставление, и суммируем Quantity и Line Total. Объединение идёт
по Employee ID, Product ID, Address ID и
Order Date. Если в одну дату один сотрудник продал один товар с доставкой на один
адрес, такие продажи нужно просуммировать.
4. Загрузка в хранилище
Результат загружаем в хранилище (data warehouse), в
таблицу фактов (fact table). Назначаем имена:
Product Error, Employee Error, Aggregate,
Fact DB. Убираем проверку ограничений. Задаём соответствие:
Order Date → Date, Order Quantity → Quantity,
Line Total → Amount. Сохраняем процедуру.
На верхнем уровне процедура выглядит так:
- Очистка хранилища от старых значений.
- Параллельная загрузка измерений.
- Загрузка информации из базы данных.
- Загрузка всех продаж в таблицу фактов с сопоставлением по измерениям и суммированием по общим ключам.
5. Запуск и проверка
Настраиваем подключение (connection), компилируем,
выполняем развертывание (deploy) и запускаем
пакет (package). При первом запуске возникает ошибка: в
очистке не указано, в рамках какого подключения она выполняется. Указываем подключение хранилища.
Смотрим ход выполнения. Очистка завершена, загрузка измерений завершена, идёт загрузка фактов. Можно
провалиться на уровень ниже и видеть количество обработанных строк. Выгрузка из базы заканчивается,
затем проходят сопоставление по адресу, продукту и сотруднику, после — суммирование. Основной перепад
по числу строк происходит на стадии суммирования. В рассмотренном запуске из 121 000 строк до
суммирования дошло 60 000; 60 000 строк по сотрудникам попало в ошибку. Причины требуют отдельного
анализа.
6. Результат
В хранилище заполнены измерения «Адрес», «Сотрудник»,
«Продукт» и центральная таблица фактов. Бизнес-аналитик видит ID
продавца, ID товара, ID адреса, дату заказа, денежную сумму и количество. Данные представлены в форме
схемы «звезда» (star schema). ETL-процедура
(Extract, Transform, Load — извлечение, преобразование, загрузка) выполнила
выгрузку, загрузку, проверку соответствия идентификаторов, правило по дате и суммирование. Это основа
для дальнейшего построения OLAP-кубов
(Online Analytical Processing cube). В файлах ошибок видны проблемы
кодировки, основные ошибки попали в измерение сотрудника. Далее предстоит собирать OLAP-кубы из
готовых схем «звезда» и «снежинка» и завершить курс практикой по анализу данных.
Краткие итоги
Практическая ценность материала заключается в демонстрации полного цикла подготовки аналитических
данных: от выбора источников и выделения измерений до получения согласованной таблицы фактов.
Основная логика строится на последовательном контроле качества: сначала определяются правила
сопоставления, затем создаются механизмы изоляции ошибочных записей, после чего выполняется агрегация
и загрузка. Такой порядок снижает риск загрязнения хранилища и позволяет локализовать проблемы по
конкретному измерению.
Ключевой методический прием — учет историчности. Если атрибут объекта меняется во времени, его нельзя
присоединять по текущему значению; необходимо выбирать версию, действовавшую на дату события. Это
делает модель пригодной для ретроспективного анализа.
Отдельный акцент — управление типами данных и ключами. Даже небольшое расхождение форматов может
остановить загрузку, поэтому проверка соответствия должна быть частью проектирования. Агрегация по
общим ключам превращает множество транзакций в компактный показатель, удобный для анализа.
Практическое применение связано с подготовкой данных для бизнес-аналитика: пользователь получает не
сырые выгрузки, а структурированную схему «звезда», где факты связаны с измерениями. Это основа для
последующего построения OLAP-кубов и анализа продаж. Ошибки при этом не исчезают, а становятся
объектом отдельного разбора, что поддерживает управляемое качество данных.
В целом материал формирует понимание того, что загрузка в хранилище — это не единичная операция, а
регламентированный процесс с проверками, ветвлениями и контролем полноты. Успешность определяется не
только корректностью кода, но и прозрачностью правил: какие ключи считаются равными, какие даты задают
историческую версию, какие строки допустимо агрегировать. Если эти правила зафиксированы,
сопровождение и масштабирование решения становятся предсказуемыми.
Цель практики — построить ETL-процедуру, которая выгружает продажи из базы данных, сопоставляет их с
измерениями и загружает в хранилище по схеме «звезда».
Сначала настраивается уточняющий запрос по продукту. Если строки не находят пару, их
нужно выгружать в отдельный файл ошибок. Выбирается не плоский файл, а неструктурированный row-file.
Создаётся файл «Продакт Эрр». Заранее создаются файлы для будущих измерений:
«Адрес» и «Сотрудник». В настройках выбираются все колонки для
выгрузки.
Затем обрабатывается измерение «Сотрудник». Только совпавшие строки идут дальше,
несовпавшие попадают в файл ошибок. Соединение идёт с хранилищем. Для сотрудника сопоставляются
Sales Person ID и Business Entity ID. Дополнительно выгружается
департамент сотрудника. Департамент должен быть актуален на момент продажи, поэтому
Order Date связывается с Start Date. При несовпадении типов
Date и DateTime тип исправляется, таблица обновляется,
сопоставление повторяется.
Важное правило: один сотрудник может встречаться в измерении несколько раз, если менял департамент.
Поэтому нужно выбрать ту версию сотрудника, которая действовала на дату продажи. Используется
оператор Between: дата продажи должна быть между Start Date и
End Date. Ошибки по сотрудникам также выгружаются в отдельный файл.
Перед загрузкой фактов выполняется агрегация. Суммируются Quantity
и Line Total. Строки объединяются по Employee ID,
Product ID, Address ID и Order Date. Если в одну
дату один сотрудник продал один товар на один адрес, такие продажи суммируются.
Результат загружается в таблицу фактов хранилища. Назначаются имена:
Product Error, Employee Error, Aggregate,
Fact DB. Убирается проверка ограничений. Соответствие для факта:
Order Date → Date, Order Quantity → Quantity,
Line Total → Amount. Процедура сохраняется.
На верхнем уровне процедура: очищает хранилище от старых значений, параллельно загружает измерения,
загружает данные из базы, затем загружает продажи в таблицу фактов с сопоставлением и суммированием.
Для запуска настраивается подключение, выполняется компиляция, развертывание и запуск пакета. Если
очистка не выполняется, нужно указать подключение хранилища. Во время выполнения видно, сколько строк
обработано. Выгрузка из базы заканчивается, затем идут сопоставления по адресу, продукту и сотруднику,
после — суммирование. Основной перепад строк возникает на суммировании. В рассмотренном запуске из
121 000 строк до суммирования дошло 60 000; 60 000 строк по сотрудникам попало в ошибку.
В результате в хранилище заполнены измерения «Адрес», «Сотрудник»,
«Продукт» и таблица фактов. Бизнес-аналитик видит ID продавца, ID товара, ID адреса,
дату заказа, сумму и количество. Данные представлены в форме схемы «звезда». ETL-процедура выполнила
выгрузку, загрузку, проверку ключей, правило по дате и суммирование. Это основа для дальнейшего
построения OLAP-кубов. Далее предстоит собирать OLAP-кубы из готовых схем «звезда» и «снежинка» и
завершить курс практикой по анализу данных.
1. ETL-процедура загружает в хранилище только нужные данные о продажах.
2. Ошибочные строки по измерениям выгружаются в отдельные файлы.
3. Для каждого измерения заранее создаются целевые файлы ошибок.
4. Соответствие ключей связывает продажи с измерениями.
5. История департаментов сотрудника учитывается через интервал Start Date–End Date.
6. Несовпадение типов Date и DateTime нужно исправлять до запуска.
7. Агрегация суммирует Quantity и Line Total по общим ключам.
8. Общие ключи: сотрудник, продукт, адрес, дата заказа.
9. Таблица фактов хранит ID продавца, товара, адреса, дату, сумму и количество.
10. Перед загрузкой фактов выполняется очистка хранилища.
11. При запуске важен указанный коннекшн в очистке.
12. Большая часть ошибок может возникать на этапе соответствия сотрудников.
1. Зачем для уточняющего запроса по продукту выбирать отдельный файл ошибок?
2. Чем неструктурированный row-file отличается от плоского файла в контексте выгрузки ошибок?
3. Какие измерения загружаются до таблицы фактов и почему?
4. Как сопоставляются ключи продажи и измерения «Сотрудник»?
5. Почему одного сотрудника в измерении может быть несколько строк?
6. Как правило Between по Start Date и End Date обеспечивает актуальность департамента?
7. Что делать при несовпадении типов Date и DateTime?
8. Какие поля суммируются при агрегации и по каким ключам?
9. Что означает объединение по четырём полям?
10. Какова роль очистки хранилища перед загрузкой?
11. Как определить, на каком этапе возникла ошибка при выполнении пакета?
12. Какие данные видит бизнес-аналитик в таблице фактов?