Учебная дисциплина «Хранилища данных» для студентов специальности 080500.62 - Бизнес- информатика профиля «Архитектура предприятия» Лекция 9 СОЗДАНИЕ И.

Презентация:



Advertisements
Похожие презентации
Учебная дисциплина «Хранилища данных» для студентов специальности Бизнес- информатика профиля «Архитектура предприятия» Лекция 10 СОЗДАНИЕ.
Advertisements

Учебная дисциплина «Хранилища данных» для студентов специальности Бизнес- информатика профиля «Архитектура предприятия» Лекция 11 СОЗДАНИЕ.
ДАЛЕЕ БАЗА ДАННЫХ ACCESS Проектирование базы данных Создание базы данных Создание базы данных без помощи мастера Таблицы Создание таблицы в режиме конструктора.
Тема 5. Основы современной технологии программирования Программирование в средах современных информационных систем. Интегрированные системы разработки.
СУБД Microsoft Access 2003 Элементы языка SQL. Язык SQL SQL (Structured Query Language) – структурированный язык запросов Язык SQL применяется во многих.
Учебный курс Хранилища данных Лекция 8 Составление отчетов Лекции читает Кандидат технических наук, доцент Перминов Геннадий Иванович.
Зачетная работа по теме « Основы баз данных » Выполнила ученица 11-А класса Серегина Ольга.
Отладка программы. Классификация ошибок 1.синтаксические; 2. ошибки времени выполнения; 3.алгоритмические. Синтаксические ошибки, обнаруживает компилятор,
Создание базы данных с помощью Конструктора Создание базы данных без помощи Мастера Теперь попробуем создать базу данных без помощи Мастера. При запуске.
Выполнение запросов, создание и редактирование отчета MS Access.
ТАБЛИЦЫ База данных может включать множество таблиц, в которых хранятся данные по различным темам. Каждая таблица может состоять из множества полей различного.
СУБД Access Запросы Автор: Тутыгин В.С.. Назначение запросов Запросы обеспечивают простой доступ к определенному подмножеству записей одной или нескольких.
Основные возможности MS ACCESS. CУБД Access - Представляет из себя программное средство, при помощи которого можно создать многотабличную реляционную.
Администрирование информационных систем Администрирование БД. Управление разрешениями.
Слезко Полина Сергеевна Учитель информатики Белоярской СОШ Томской области.
Урок 3. Формы представления данных (таблицы, формы, запросы, отчеты)
База данных База данных – это конкретная предметная область, описанная с помощью таблиц.
Лекция 16 Лекция 16 Основы SQL. Описание отношений, доменов, ограничений целостности, представлений данных. Реализация операций реляционной алгебры в SQL.
ACCESS 2003 Создание таблиц На примере БД Отдел кадров.
Транксрипт:

Учебная дисциплина «Хранилища данных» для студентов специальности Бизнес- информатика профиля «Архитектура предприятия» Лекция 9 СОЗДАНИЕ И ЗАПОЛНЕНИЕ ХРАНИЛИЩ ДАННЫХ С ИСПОЛЬЗОВАНИЕМ MICROSOFT SQL SERVER Учебные вопросы: 1.Создание хранилищ данных. 2.Заполнение хранилища данных с помощью Data Transformation Services(DTS). 3.Выполнение пакетов DTS. Учебные вопросы: 1.Создание хранилищ данных. 2.Заполнение хранилища данных с помощью Data Transformation Services(DTS). 3.Выполнение пакетов DTS.

Учебные вопросы: 1.Структура многомерного хранилища данных. 2.Организация многомерного хранилища данных клиентскими и серверными OLAP- средствами. 3.Технические аспекты многомерного хранения данных. Учебные вопросы: 1.Структура многомерного хранилища данных. 2.Организация многомерного хранилища данных клиентскими и серверными OLAP- средствами. 3.Технические аспекты многомерного хранения данных. Цель лекции – сформировать представление у студентов о процедурах создания и заполнения хранилищ данных. Цель лекции

Литература 1.Информационные технологии управления : Учебник / Б. В. Черников. - М. : Форум, 2008 ; М. : Инфра-М, – 351 с.. - (Высшее образование). (ГРИФ) 2.Советов Б.Я., Цехановский В.В Информационные технологии: Учебник для вузов / - 3-е изд., стереотип. - М. : Высшая школа, [2] с. : ил, табл. - Библиогр.: с ISBN : УДК 002.6(075.8)004(075.8). 3.Консалтинг: от бизнес-стратегии к корпоративной информационно-управляющей системе / Г. Н. Калянов. - М. : Горячая линия-Телеком, с 4.Жуковский О.И. Информационные технологии: Учебное пособие. Рекомендовано СИБРУМЦ для межвузовского использования в качестве учебного пособия. – Томск : ТУСУР, с. : ил. - Библиогр.: с ISBN Проектирование реляционных хранилищ данных [Текст] : справочное издание / В. Е. Туманов, С. В. Маклаков. - М. : ДИАЛОГ- МИФИ, с 1.Информационные технологии управления : Учебник / Б. В. Черников. - М. : Форум, 2008 ; М. : Инфра-М, – 351 с.. - (Высшее образование). (ГРИФ) 2.Советов Б.Я., Цехановский В.В Информационные технологии: Учебник для вузов / - 3-е изд., стереотип. - М. : Высшая школа, [2] с. : ил, табл. - Библиогр.: с ISBN : УДК 002.6(075.8)004(075.8). 3.Консалтинг: от бизнес-стратегии к корпоративной информационно-управляющей системе / Г. Н. Калянов. - М. : Горячая линия-Телеком, с 4.Жуковский О.И. Информационные технологии: Учебное пособие. Рекомендовано СИБРУМЦ для межвузовского использования в качестве учебного пособия. – Томск : ТУСУР, с. : ил. - Библиогр.: с ISBN Проектирование реляционных хранилищ данных [Текст] : справочное издание / В. Е. Туманов, С. В. Маклаков. - М. : ДИАЛОГ- МИФИ, с

Вопрос 1. Создание хранилищ данных Как известно, типичная структура хранилища данных существенно отличается от структуры традиционной реляционной СУБД. Как правило, эта структура денормализована с целью повышения скорости выполнения запросов, поэтому она может допускать избыточность данных. Типичное хранилище данных содержит таблицу фактов со сведениями об объектах или событиях, совокупность которых будет в дальнейшем анализироваться, и несколько таблиц измерений, содержащих неизменяемые либо редко изменяемые данные. В качестве оперативной базы данных для нашего примера мы будем использовать базу данных Northwind из комплекта поставки Microsoft SQL Server Как известно, типичная структура хранилища данных существенно отличается от структуры традиционной реляционной СУБД. Как правило, эта структура денормализована с целью повышения скорости выполнения запросов, поэтому она может допускать избыточность данных. Типичное хранилище данных содержит таблицу фактов со сведениями об объектах или событиях, совокупность которых будет в дальнейшем анализироваться, и несколько таблиц измерений, содержащих неизменяемые либо редко изменяемые данные. В качестве оперативной базы данных для нашего примера мы будем использовать базу данных Northwind из комплекта поставки Microsoft SQL Server

Рисунок 1 - Структура хранилища данных Northwind_Mart, созданного на основе базы данных Northwind Рисунок 1 - Структура хранилища данных Northwind_Mart, созданного на основе базы данных Northwind

Структура данных этого хранилища приведена на рис. 1, а скрипт для создания базы данных с такой структурой (назовем ее Northwind_Mart) в листинге 1: CREATE DATABASE Northwind_Mart ON PRIMARY ( NAME=Northwind_Mart_Data, FILEN AME='d:\Program Files\Microsoft SQL Server\mssql\data\Northwind_Mart_Data.MDF', SIZE=5MB, FILEGROWTH=10% )LOG ON ( NAME=Northwind_Mart_Log, FILENAME=' d:\Program Files\Microsoft SQL Server\mssql\data\Northwind_Mart_Log.LDF', SI ZE=2MB, Структура данных этого хранилища приведена на рис. 1, а скрипт для создания базы данных с такой структурой (назовем ее Northwind_Mart) в листинге 1: CREATE DATABASE Northwind_Mart ON PRIMARY ( NAME=Northwind_Mart_Data, FILEN AME='d:\Program Files\Microsoft SQL Server\mssql\data\Northwind_Mart_Data.MDF', SIZE=5MB, FILEGROWTH=10% )LOG ON ( NAME=Northwind_Mart_Log, FILENAME=' d:\Program Files\Microsoft SQL Server\mssql\data\Northwind_Mart_Log.LDF', SI ZE=2MB,

FILEGROWTH=10% )GO USE Northwind_MartGO CREATE TABLE [dbo].[Customer_Dim] ( [CustomerKey] [int] IDENTITY (1, 1) NOT NULL, [CustomerID] [nchar] (5) NOT NULL, [CompanyName] [nvarchar] (40) NOT NULL, [ContactName] [nvarchar] (30) NOT NULL, [ContactTitle] [nvarchar] (30) NOT NULL, [Address] [nvarchar] (60) NOT NULL, [City] [nvarchar] (15) NOT NULL, [Region] [nvarchar] (15) NOT NULL, [PostalCode] [nvarchar] (10) NULL, [Country] [nvarchar] (15) NOT NULL, [Phone] [nvarchar] (24) NOT NULL, [Fax] [nvarchar] (24) NULL) ON [PRIMARY]GO CREATE TABLE [dbo].[Employee_Dim] ( [EmployeeKey] [int] IDENTITY (1, 1) NOT NULL, [EmployeeID] [int] NOT NULL, [EmployeeName] [nvarchar] (30) NOT NULL, [HireDate] [datetime] NULL) ON [PRIMARY]GO

CREATE TABLE [dbo].[Product_Dim] ( [ProductKey] [int] IDENTITY (1, 1) NOT NULL, [ProductID] [int] NOT NULL, [ProductName] [nvarchar] (40) NOT NULL, [SupplierName] [nvarchar] (40) NOT NULL, [CategoryName] [nvarchar] (15) NOT NULL, [ListUnitPrice] [money] NOT NULL) ON [PRIMARY]GO CREATE TABLE [dbo].[Sales_Fact] ( [TimeKey] [int] NOT NULL, [CustomerKey] [int] NOT NULL, [ShipperKey] [int] NOT NULL, [ProductKey] [int] NOT NULL, [EmployeeKey] [int] NOT NULL, [RequiredDate] [datetime] NOT NULL, [LineItemFreight] [money] NOT NULL, [LineItemTotal] [money] NOT NULL, [LineItemQuantity] [smallint] NOT NULL, [LineItemDiscount] [money] NOT NULL) ON [PRIMARY]GO CREATE TABLE [dbo].[Shipper_Dim] ( [ShipperKey] [int] IDENTITY (1, 1) NOT NULL, [ShipperID] [int] NOT NULL, [ShipperName] [nvarchar] (40) NOT NULL) ON [PRIMARY]GO CREATE TABLE [dbo].[Time_Dim] ( [TimeKey] [int] IDENTITY (1, 1) NOT NULL, [TheDate] [datetime] NOT NULL, [DayOfWeek] [nvarchar] (20) NOT NULL, [Month] [int] NOT NULL, [Year] [int] NOT NULL, [Quarter] [int] NOT NULL, [DayOfYear] [int] NOT NULL, [Holiday] [nvarchar] (1) NOT NULL, [Weekend] [nvarchar] (1) NOT NULL, [YearMonth] [nvarchar] (10) NOT NULL, [WeekOfYear] [int] NOT NULL) ON [PRIMARY]GO

ALTER TABLE [dbo].[Customer_Dim] WITH NOCHECK ADD CONSTRAINT [PK_Customer_Dim] PRIMARY KEY NONCLUSTERED ([CustomerKey]) ON [PRIMARY]GO ALTER TABLE [dbo].[Employee_Dim] WITH NOCHECK ADD CONSTRAINT [PK_Employee_Dim] PRIMARY KEY NONCLUSTERED ([EmployeeKey]) ON [PRIMARY]GO ALTER TABLE [dbo].[Product_Dim] WITH NOCHECK ADD CONSTRAINT [PK_Product_Dim] PRIMARY KEY NONCLUSTERED ([ProductKey]) ON [PRIMARY]GO ALTER TABLE [dbo].[Sales_Fact] WITH NOCHECK ADD CONSTRAINT [PK_Sales_Fact] PRIMARY KEY NONCLUSTERED ( [TimeKey], [CustomerKey], [ShipperK ey], [ProductKey], [EmployeeKey] ) ON [PRIMARY]GO ALTER TABLE [dbo].[Shipper_Dim] WITH NOCHECK ADD CONSTRAINT [PK_Shipper_Dim] PRIMARY KEY NONCLUSTERED ([ShipperKey]) ON [PRIMARY]GO ALTER TABLE [dbo].[Time_Dim] WITH NOCHECK ADD CONSTRAINT [PK_Time_Dim] PRIMARY KEY NONCLUSTERED ([TimeKey]) ON [PRIMARY]GO ALTER TABLE [dbo].[Sales_Fact] ADD CONSTRAINT [FK_Sales_Fact_Customer_Dim] FOREIGN KEY ([CustomerKey]) REFERENCES [dbo].[Customer_Dim] ([CustomerKey]), CONSTRAINT [FK_Sales_Fact_Employee_Dim] FOREIGN KEY ([EmployeeKey]) REFERENCES [dbo].[Employee_Dim] ([EmployeeKey]), CONSTRAINT [FK_Sales_Fact_Product_Dim] FOREIGN KEY ([ProductKey]) REFERENCES [dbo].[Product_Dim] ([ProductKey]), CONSTRAINT [FK_Sales_Fact_Shipper_Dim] FOREIGN KEY ([ShipperKey]) REFERENCES [dbo].[Shipper_Dim] ([ShipperKey]), CONSTRAINT [FK_Sales_Fact_Time_Dim] FOREIGN KEY ([TimeKey]) REFERENCES [dbo].[Time_Dim] ([TimeKey])GO

Проектирование хранилища и создание базы данных соответствующей структуры лишь первый шаг к созданию хранилища данных. Далее следует позаботиться о том, чтобы таблицы этого хранилища были заполнены данными, соответствующими текущему состоянию оперативной базы данных. Data Transformation Services (DTS) это набор служб SQL Server, предназначенных для организации импорта, экспорта, преобразования данных и переноса их между любыми источниками, доступными через интерфейсы OLE DB. С их помощью можно копировать структуры данных и сами данные из одной базы данных в другую, создавать средства для переноса данных, встроенные в приложения, а также пополнять хранилища данных из разнообразных источников (которые в общем случае вовсе не обязательно должны быть базами данных SQL Server). Для заполнения хранилища данных обычно требуется создать и выполнить так называемый пакет DTS (DTS package), содержащий описание последовательности всех действий, которые следует выполнить при переносе данных (включая преобразование типов данных, выполнение SQL-запросов и т.д.). Проектирование хранилища и создание базы данных соответствующей структуры лишь первый шаг к созданию хранилища данных. Далее следует позаботиться о том, чтобы таблицы этого хранилища были заполнены данными, соответствующими текущему состоянию оперативной базы данных. Data Transformation Services (DTS) это набор служб SQL Server, предназначенных для организации импорта, экспорта, преобразования данных и переноса их между любыми источниками, доступными через интерфейсы OLE DB. С их помощью можно копировать структуры данных и сами данные из одной базы данных в другую, создавать средства для переноса данных, встроенные в приложения, а также пополнять хранилища данных из разнообразных источников (которые в общем случае вовсе не обязательно должны быть базами данных SQL Server). Для заполнения хранилища данных обычно требуется создать и выполнить так называемый пакет DTS (DTS package), содержащий описание последовательности всех действий, которые следует выполнить при переносе данных (включая преобразование типов данных, выполнение SQL-запросов и т.д.). Вопрос 2. Заполнение хранилища данных с помощью Data Transformation Services (DTS)

Такой пакет можно выполнить с помощью SQL Server Enterprise Manager или утилиты dtsrun, сохранить его в службах метаданных (Meta Data Services; в прежних версиях SQL Server это хранилище называлось репозитарием) либо в виде структурированного файлового хранилища. Также возможно программное выполнение DTS-пакетов с помощью свойств и методов соответствующих объектов SQL DMO для этого можно автоматически сгенерировать код на языке Visual Basic. Создать пакет DTS можно с помощью соответствующего редактора DTS package editor. Для его запуска следует с помощью SQL Server Enterprise Manager соединиться с сервером, содержащим хранилище данных, найти в разделе Data Transformation Services элемент Meta Data Service Packages и выбрать опцию New Package из его контекстного меню. Далее нам требуется описать базу данных, в которой находится наше хранилище. Для этого необходимо перенести на рабочее пространство редактора пакетов DTS пиктограмму Microsoft OLE DB Provider for SQL Server с палитры Data tool в левой части окна редактора. После этого появится диалоговая панель Connection Properties для описания источников данных OLE DB, в которой нужно выбрать базу данных Northwind_Mart, указать параметры доступа к ней. Присвоим этому источнику данных имя NW_OLAP. Такой пакет можно выполнить с помощью SQL Server Enterprise Manager или утилиты dtsrun, сохранить его в службах метаданных (Meta Data Services; в прежних версиях SQL Server это хранилище называлось репозитарием) либо в виде структурированного файлового хранилища. Также возможно программное выполнение DTS-пакетов с помощью свойств и методов соответствующих объектов SQL DMO для этого можно автоматически сгенерировать код на языке Visual Basic. Создать пакет DTS можно с помощью соответствующего редактора DTS package editor. Для его запуска следует с помощью SQL Server Enterprise Manager соединиться с сервером, содержащим хранилище данных, найти в разделе Data Transformation Services элемент Meta Data Service Packages и выбрать опцию New Package из его контекстного меню. Далее нам требуется описать базу данных, в которой находится наше хранилище. Для этого необходимо перенести на рабочее пространство редактора пакетов DTS пиктограмму Microsoft OLE DB Provider for SQL Server с палитры Data tool в левой части окна редактора. После этого появится диалоговая панель Connection Properties для описания источников данных OLE DB, в которой нужно выбрать базу данных Northwind_Mart, указать параметры доступа к ней. Присвоим этому источнику данных имя NW_OLAP.

Перед заполнением таблиц в хранилище данных мы будем полностью очищать их содержимое. Для этой цели мы перенесем в рабочее пространство редактора пиктограмму Execute SQL Task. При этом на экране появится диалоговая панель Execute SQL Task Properties, в которой мы заполним поля Description (описание задачи) и SQL Statement (сюда мы добавим операторы для удаления данных из всех таблиц хранилища данных. Рисунок 2 - Диалоговая панель Execute SQL Task Properties

Что же касается задачи заполнения данными таблицы фактов, она может быть выполнена только после того, как будут заполнены все таблицы измерений. Поэтому сначала мы выделим оставшиеся экземпляры источника данных NW и источника данных NW_OLAP, затем выберем опцию WorkFlow из контекстного меню этого экземпляра источника данных NW_OLAP при этом пиктограммы окажутся соединены стрелкой, соответствующей задаче заполнения таблицы фактов. Далее нам следует одновременно выбрать пиктограмму NW_OLAP, участвующую в описании пяти задач заполнения таблиц измерений, и пиктограмму NW, участвующую в описании задачи заполнения таблицы фактов, а затем из контекстного меню выделенного источника данных NW выбрать опцию Workflow | On Success. Таким образом, мы указали, что заполнение таблицы фактов осуществляется только после успешного заполнения таблиц измерений (рис. 3).

Рисунок 3 - Описание последовательности выполнения задач заполнения хранилища данных

Далее нам следует описать, откуда берутся и как преобразовываются данные при переносе из оперативной базы данных в хранилище. Мы начнем с таблицы Time_Dim. Для этой цели дважды щелкнем мышью по одной из пяти стрелок, соответствующих задачам заполнения таблиц измерений. В появившейся диалоговой панели заполним поле Description, выберем опцию SQL Query и введем текст SQL-запроса, результат которого должен быть помещен в таблицу Time_Dim

SELECT DISTINCT S.ShippedDate AS TheDate, DateName(dw, S.ShippedDate) AS DayOfWeek, DatePart(mm, S.ShippedDate) AS [Month], DatePart(yy, S.ShippedDate) AS [Year], DatePart(qq, S.ShippedDate) AS [Quarter], DatePart(dy, S.ShippedDate) AS DayOfYear, 'N' AS Holiday, case DatePart(dw, S.ShippedDate) when (1) then 'Y' when (7) then 'Y' else 'N' end AS Weekend, DateName(month, S.ShippedDate) + '_' + DateName(year,S.ShippedDate) AS YearMonth, DatePart(wk, S.ShippedDate) AS WeekOfYear FROM Orders SWHERE S.ShippedDate IS NOT NULL SELECT DISTINCT S.ShippedDate AS TheDate, DateName(dw, S.ShippedDate) AS DayOfWeek, DatePart(mm, S.ShippedDate) AS [Month], DatePart(yy, S.ShippedDate) AS [Year], DatePart(qq, S.ShippedDate) AS [Quarter], DatePart(dy, S.ShippedDate) AS DayOfYear, 'N' AS Holiday, case DatePart(dw, S.ShippedDate) when (1) then 'Y' when (7) then 'Y' else 'N' end AS Weekend, DateName(month, S.ShippedDate) + '_' + DateName(year,S.ShippedDate) AS YearMonth, DatePart(wk, S.ShippedDate) AS WeekOfYear FROM Orders SWHERE S.ShippedDate IS NOT NULL

Рисунок 4 - Описание преобразования данных для таблицы Time_Dim

Следующая таблица измерений, Customer_Dim, будет заполняться не результатами запроса, а данными из таблицы Customers. Поэтому на странице Source следует отметить опцию Table/View, выбрать таблицу Customers в списке таблиц базы данных Northwind, на странице Destination выбрать таблицу Customer_Dim и проверить правильность соответствий между полями исходного набора данных и таблицы Customer_Dim. Было бы желательно преобразовать некоторые значения, содержащиеся в поле Region исходной таблицы (для одних стран это поле не содержит данных, тогда как для других может потребоваться анализ продаж по регионам или другим административным единицам). С этой целью мы удалим соответствие между полем Region обеих таблиц, нажмем кнопку New, из списка в диалоговом окне New Transformation выберем опцию ActiveX Script и в появившейся диалоговой панели ActiveX Script Transformation Properties отредактируем код на языке VBScript, описывающий преобразование данных в этом поле: Function Main() If IsNull(DTSSource("Region")) Then DTSDestination("Region") = "Other« Else DTSDestination("Region") = DTSSource("Region") End IfMain = DTSTransformStat_OK End Function Следующая таблица измерений, Customer_Dim, будет заполняться не результатами запроса, а данными из таблицы Customers. Поэтому на странице Source следует отметить опцию Table/View, выбрать таблицу Customers в списке таблиц базы данных Northwind, на странице Destination выбрать таблицу Customer_Dim и проверить правильность соответствий между полями исходного набора данных и таблицы Customer_Dim. Было бы желательно преобразовать некоторые значения, содержащиеся в поле Region исходной таблицы (для одних стран это поле не содержит данных, тогда как для других может потребоваться анализ продаж по регионам или другим административным единицам). С этой целью мы удалим соответствие между полем Region обеих таблиц, нажмем кнопку New, из списка в диалоговом окне New Transformation выберем опцию ActiveX Script и в появившейся диалоговой панели ActiveX Script Transformation Properties отредактируем код на языке VBScript, описывающий преобразование данных в этом поле: Function Main() If IsNull(DTSSource("Region")) Then DTSDestination("Region") = "Other« Else DTSDestination("Region") = DTSSource("Region") End IfMain = DTSTransformStat_OK End Function

Рисунок 5 - Описание преобразования данных для таблицы Customer_Dim с помощью скрипта

Для таблицы измерений Product_Dim последовательность действий сходна с той, что мы применяли при создании таблицы Time_Dim. Однако здесь, выбрав на странице Source диалоговой панели Transform Data Task Properties опцию SQL Query, мы нажмем кнопку Build Query и создадим запрос с помощью DTS Query Designer. В запросе используются таблицы Products и Categories базы данных Northwind, при этом поле UnitPrice таблицы Products переименовывается в ListUnitPrice. Выбрав на странице Destination таблицу Product_Dim, проверим корректность соответствий между полями исходного набора данных и таблицы Products_Dim. В данном случае мы видим, что поля SupplierID и SupplierName – разных типов, при этом то и другое поле описывают, по существу, одно и то же свойство члена измерения. В этой ситуации нам поможет подстановка значений (lookup). Перейдем на страницу Lookups, нажмем кнопку Add, придумаем имя для подстановки, например SupplierLookup, щелкнем по кнопке Query и в появившемся редакторе DTS Query Designer введем текст запроса: SELECT CompanyNameF ROM Suppliers WHERE (SupplierID = ?) Для таблицы измерений Product_Dim последовательность действий сходна с той, что мы применяли при создании таблицы Time_Dim. Однако здесь, выбрав на странице Source диалоговой панели Transform Data Task Properties опцию SQL Query, мы нажмем кнопку Build Query и создадим запрос с помощью DTS Query Designer. В запросе используются таблицы Products и Categories базы данных Northwind, при этом поле UnitPrice таблицы Products переименовывается в ListUnitPrice. Выбрав на странице Destination таблицу Product_Dim, проверим корректность соответствий между полями исходного набора данных и таблицы Products_Dim. В данном случае мы видим, что поля SupplierID и SupplierName – разных типов, при этом то и другое поле описывают, по существу, одно и то же свойство члена измерения. В этой ситуации нам поможет подстановка значений (lookup). Перейдем на страницу Lookups, нажмем кнопку Add, придумаем имя для подстановки, например SupplierLookup, щелкнем по кнопке Query и в появившемся редакторе DTS Query Designer введем текст запроса: SELECT CompanyNameF ROM Suppliers WHERE (SupplierID = ?)

Рисунок 6 - Создание запроса к оперативной базе данных с помощью DTS Query Designer

Далее на странице Transformations опишем соответствие между полями SupplierId и SupplierName. С этой целью нажмем кнопку New, из списка в диалоговом окне New Transformation выберем опцию ActiveX Script, укажем имена исходного и получаемого полей и в появившейся диалоговой панели ActiveX Script Transformation Properties отредактируем код на языке VBScript, описывающий преобразование данных в этом поле: Function Main() DTSDestination(SupplierName) = _DTSLookups(SupplierLookup).Execute(DTSSource(SupplierID).Va lue) Main = DTSTransformStat_OK End Function Далее на странице Transformations опишем соответствие между полями SupplierId и SupplierName. С этой целью нажмем кнопку New, из списка в диалоговом окне New Transformation выберем опцию ActiveX Script, укажем имена исходного и получаемого полей и в появившейся диалоговой панели ActiveX Script Transformation Properties отредактируем код на языке VBScript, описывающий преобразование данных в этом поле: Function Main() DTSDestination(SupplierName) = _DTSLookups(SupplierLookup).Execute(DTSSource(SupplierID).Va lue) Main = DTSTransformStat_OK End Function

Для заполнения данными следующей таблицы измерений, Employee_Dim, нам нужно указать, что два поля исходной таблицы Customers, FirstName и LastName, соответствуют одному полю EmployeeName таблицы Customer_Dim. Для этого нажмем кнопку New на странице Transformations, выберем опцию ActiveX Script и отметим оба поля, FirstName и LastName, в качестве исходных. Далее модифицируем код в диалоговой панели панели ActiveX Script Transformation Properties: Function Main() DTSDestination(EmployeeName) = DTSSource(FirstName) & _ & DTSSource(LastName) Main = DTSTransformStat_OK End Function Для заполнения данными следующей таблицы измерений, Employee_Dim, нам нужно указать, что два поля исходной таблицы Customers, FirstName и LastName, соответствуют одному полю EmployeeName таблицы Customer_Dim. Для этого нажмем кнопку New на странице Transformations, выберем опцию ActiveX Script и отметим оба поля, FirstName и LastName, в качестве исходных. Далее модифицируем код в диалоговой панели панели ActiveX Script Transformation Properties: Function Main() DTSDestination(EmployeeName) = DTSSource(FirstName) & _ & DTSSource(LastName) Main = DTSTransformStat_OK End Function

При описании преобразования данных для таблицы Shipper_Dim нам нужно проверить соответствие между полем CompanyName таблицы Shippers базы данных Northwind и полем ShipperName таблицы Shipper_Dim. Завершив работу с таблицами измерений, займемся преобразованием данных для таблицы фактов. В данном случае исходный набор данных, преобразуемый в таблицу Sales_Fact, представляет собой результат следующего запроса: SELECT Northwind_Mart.dbo.Time_Dim.TimeKey, Northwind_Mart.dbo.Customer_Dim.CustomerKey, Northwind_Mart.dbo.Shipper_Dim.ShipperKey, Northwind_Mart.dbo.Product_Dim.ProductKey, Northwind_Mart.dbo.Employee_Dim.EmployeeKey, Northwind.dbo.Orders.RequiredDate, Orders.Freight * [Order Details].Quantity / При описании преобразования данных для таблицы Shipper_Dim нам нужно проверить соответствие между полем CompanyName таблицы Shippers базы данных Northwind и полем ShipperName таблицы Shipper_Dim. Завершив работу с таблицами измерений, займемся преобразованием данных для таблицы фактов. В данном случае исходный набор данных, преобразуемый в таблицу Sales_Fact, представляет собой результат следующего запроса: SELECT Northwind_Mart.dbo.Time_Dim.TimeKey, Northwind_Mart.dbo.Customer_Dim.CustomerKey, Northwind_Mart.dbo.Shipper_Dim.ShipperKey, Northwind_Mart.dbo.Product_Dim.ProductKey, Northwind_Mart.dbo.Employee_Dim.EmployeeKey, Northwind.dbo.Orders.RequiredDate, Orders.Freight * [Order Details].Quantity /

(SELECT SUM(Quantity) FROM [Order Details] od WHERE od.OrderID = Orders.OrderID) AS LineItemFreight, [Order Details].UnitPrice * [Order Details].Quantity AS LineItemTotal, [Order Details].Quantity AS LineItemQuantity, [Order Details].Discount * [Order Details].UnitPrice * [Order Details].Quantity AS LineItemDiscount FROM Orders INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID INNER JOIN Northwind_Mart.dbo.Product_Dim ON [Order Details].ProductID= Northwind_Mart.dbo.Product_Dim.ProductID INNER JOIN Northwind_Mart.dbo.Customer_Dim ON Orders.CustomerID= Northwind_Mart.dbo.Customer_Dim.CustomerID INNER JOIN Northwind_Mart.dbo.Time_Dim ON Orders.ShippedDate = Northwind_Mart.dbo.Time_Dim.TheDate INNER JOIN Northwind_Mart.dbo.Shipper_Dim ON Orders.ShipVia = Northwind_Mart.dbo.Shipper_Dim.ShipperID INNER JOIN Northwind_Mart.dbo.Employee_Dim ON Orders.EmployeeID = Northwind_Mart.dbo.Employee_Dim.EmployeeID WHERE (Orders.ShippedDate IS NOT NULL) (SELECT SUM(Quantity) FROM [Order Details] od WHERE od.OrderID = Orders.OrderID) AS LineItemFreight, [Order Details].UnitPrice * [Order Details].Quantity AS LineItemTotal, [Order Details].Quantity AS LineItemQuantity, [Order Details].Discount * [Order Details].UnitPrice * [Order Details].Quantity AS LineItemDiscount FROM Orders INNER JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID INNER JOIN Northwind_Mart.dbo.Product_Dim ON [Order Details].ProductID= Northwind_Mart.dbo.Product_Dim.ProductID INNER JOIN Northwind_Mart.dbo.Customer_Dim ON Orders.CustomerID= Northwind_Mart.dbo.Customer_Dim.CustomerID INNER JOIN Northwind_Mart.dbo.Time_Dim ON Orders.ShippedDate = Northwind_Mart.dbo.Time_Dim.TheDate INNER JOIN Northwind_Mart.dbo.Shipper_Dim ON Orders.ShipVia = Northwind_Mart.dbo.Shipper_Dim.ShipperID INNER JOIN Northwind_Mart.dbo.Employee_Dim ON Orders.EmployeeID = Northwind_Mart.dbo.Employee_Dim.EmployeeID WHERE (Orders.ShippedDate IS NOT NULL)

Вопрос 3 Выполнение пакетов DTS Созданный пакет DTS следует сохранить, выбрав опцию Package | Save из меню редактора пакетов DTS. Выполнить его можно, выбрав пункт меню Package | Execute. После этого начнется процесс преобразования данных и заполнения ими таблиц хранилища данных. Для того чтобы данные в хранилище соответствовали текущему или недавнему состоянию оперативной базы данных, можно создать расписание, согласно которому будет автоматически выполняться данный пакет. Для этого следует выбрать его в Enterprise Manager и опцию Schedule Package из контекстного меню. Далее следует выбрать нужный режим обновления данных в диалоговой панели Edit Recurring Job Schedule Созданный пакет DTS следует сохранить, выбрав опцию Package | Save из меню редактора пакетов DTS. Выполнить его можно, выбрав пункт меню Package | Execute. После этого начнется процесс преобразования данных и заполнения ими таблиц хранилища данных. Для того чтобы данные в хранилище соответствовали текущему или недавнему состоянию оперативной базы данных, можно создать расписание, согласно которому будет автоматически выполняться данный пакет. Для этого следует выбрать его в Enterprise Manager и опцию Schedule Package из контекстного меню. Далее следует выбрать нужный режим обновления данных в диалоговой панели Edit Recurring Job Schedule

Рисунок 7 - Создание расписания выполнения пакета DTS

Контрольные вопросы 1.Дайте понятие Data Transformation Services (DTS). 2.Дайте понятие пакета DTS (DTS package). 3.Порядок создания пакета с помощью DTS package editor. 4.Порядок описания потоков данных и последовательности выполнения задач с помощью Microsoft SQL Server. 5.Порядок описания преобразования данных с помощью Microsoft SQL Server. 6.Порядок выполнения пакетов DTS с помощью Microsoft SQL Server. 1.Дайте понятие Data Transformation Services (DTS). 2.Дайте понятие пакета DTS (DTS package). 3.Порядок создания пакета с помощью DTS package editor. 4.Порядок описания потоков данных и последовательности выполнения задач с помощью Microsoft SQL Server. 5.Порядок описания преобразования данных с помощью Microsoft SQL Server. 6.Порядок выполнения пакетов DTS с помощью Microsoft SQL Server.