Технические аспекты OLAP: области применения реляционных и многомерных хранилищ данных.
Средства OLAP-анализа могут извлекать данные непосредственно из реляционных систем. Такой подход был более привлекательным в те времена, когда OLAP-серверы отсутствовали в прайс-листах ведущих производителей СУБД. Но сегодня и Oracle, и Informix, и Microsoft предлагают полноценные OLAP-серверы, и можно купить (точнее, обратиться с соответствующей просьбой к руководству компании) OLAP-сервер той же марки, что и основной сервер баз данных.
Термин "OLAP" неразрывно связан с термином "хранилище данных" (Data Warehouse). Приведем определение, сформулированное "отцом-основателем" хранилищ данных Биллом Инмоном: "Хранилище данных – это предметно-ориентированное, привязанное ко времени и неизменяемое собрание данных для поддержки процесса принятия управленческих решений".
Хранилища данных содержат заведомо избыточную информацию, которая и так "живет" в базах или файлах оперативных систем, но позволяют ускорить анализ данных. Задача хранилища - предоставить "сырье" для анализа в одном месте и в простой, понятной структуре. Оперативные данные собираются из различных источников, очищаются, интегрируются и складываются в реляционное хранилище. При этом они уже доступны для анализа при помощи различных средств построения отчетов. Затем данные (полностью или частично) подготавливаются для OLAP-анализа. Они могут быть загружены в специальную БД OLAP или оставлены в реляционном хранилище. Важнейшим его элементом являются метаданные, т. е. информация о структуре, размещении и трансформации данных. Благодаря им обеспечивается эффективное взаимодействие различных компонентов хранилища.
OLAP-кубы можно создавать на машине-клиенте, и средства для этого есть, но мы будем рассматривать их создание и обработку на машине-сервере с использованием мощной СУБД Microsoft SQL Server 2000 Enterprise Edition с использованием входящих в ее состав Аналитических Служб (Analytical Services). Серверные OLAP -средства являются промежуточным звеном между хранилищем данных в виде реляционной СУБД и клиентским приложением. Основным компонентом аналитических служб является программа Analysis Server - сервис операционной системы Windows NT/2000/XP. Этот сервер предназначен для создания OLAP-кубов на основе реляционных хранилищ данных, а также для предоставления доступа к ним из клиентских приложений. Для работы с ним необходимо установить аналитические службы Microsoft SQL Server (они входят в комплект поставки Microsoft SQL Server Enterprise Edition, Standard Edition, Developer Edition и Personal Edition) и запустить утилиту Analysis Manager, с помощью которой обычно и создаются многомерные базы данных. Прежде всего следует зарегистрировать в Analysis Manager программу OLAP-сервер (он может находиться как на локальном компьютере, так и на другом компьютере в рамках локальной сети), выбрав пункт Register Server из контекстного меню элемента Analysis Servers в левой части главного окна Analysis Manager. Затем нужно соединиться с OLAP-сервером, выбрав пункт Connect контекстного меню соответствующего элемента.
Поскольку OLAP-кубы хранятся в многомерных базах данных, создадим таковую, выбрав пункт New Database из контекстного меню элемента, соответствующего OLAP-серверу, и введем имя базы данных и ее описание.
Прежде чем создавать OLAP-кубы, необходимо описать источники исходных данных для них. Для описания источника данных выберем из контекстного меню элемента Data Sources пункт New Data Source… и заполним поля стандартной диалоговой панели Data Link Properties. В качестве провайдера данных (программа, обеспечивающая преобразование формата данных) укажем OLE DB Provider for SQL Server и выберем базу данных.
В Microsoft SQL Server Analysis Services измерения делятся на коллективные (shared dimensions) и частные (private dimensions).
Коллективные измерения – это измерения, которые могут быть использованы одновременно в нескольких кубах. Их применение удобно в том случае, когда измерение основано на стандартных данных, применимых при анализе различных предметных областей. Типичным примером создания таких измерений может быть, например, список сотрудников компании. Коллективные измерения принадлежат самой многомерной базе данных и не зависят от того, какие кубы имеются в многомерной базе данных и есть ли они там вообще.
Частные измерения принадлежат конкретному кубу и создаются вместе с ним. Они применяются в том случае, когда данное измерение имеет смысл только в одной конкретной предметной области.
Создать как коллективное, так и частное измерение можно двумя способами: с помощью соответствующего мастера и с помощью редактора измерений.
Иерархия данных в измерениях, основанных на данных типа «дата/время», подчиняется определенным стандартным правилам – ведь время измеряется в годах, месяцах, днях, часах, минутах независимо от того, какую предметную область мы анализируем. Поэтому измерения в OLAP-средствах обычно делятся на стандартные (не имеющие отношения ко времени) и временные. Поскольку наше измерение относится к последним, в диалоговой панели Select the dimension type выберем опцию Time Dimension и в качестве колонки, в которой содержатся данные типа «дата/время», укажем выбранное поле.
В заключительной диалоговой панели мы должны ввести имя будущего измерения и, если есть необходимость, создать иерархию в измерении и задать ее имя. Дело в том, что при необходимости можно создать еще одно измерение, основанное на тех же данных, с тем же именем, но с другой иерархией, например Year, Week, Day; в этом случае мы имеем разное представление одних и тех же данных.
Создание измерения заканчивается запуском редактора измерений – Dimension Editor. В нем при необходимости можно внести изменения в структуру измерения, например добавив дополнительные уровни или свойства членов измерения. Так, если мы планируем анализировать зависимость продаж от дня недели или сравнивать продажи в выходные, праздничные и будние дни, можно перенести в раздел Member Properties уровня Day поля Day of Week, Holiday и Weekend исходной таблицы
Data Transformation Services ( DTS ) – это набор служб SQL Server, предназначенных для организации импорта, экспорта, преобразования данных и переноса их между любыми источниками, доступными через интерфейсы OLE DB. С их помощью можно копировать структуры данных и сами данные из одной базы данных в другую, создавать средства для переноса данных, встроенные в приложения, а также дополнять хранилища данных из разнообразных источников различных типов (не обязательно SQL Server). Для описания источников данных и заполнения хранилища данных обычно требуется создать и выполнить так называемый пакет DTS (DTS package), содержащий описание последовательности всех действий, которые следует выполнить при переносе данных (включая преобразование типов данных, выполнение запросов и т.д.). Создать пакет DTS можно с помощью редактора DTS package editor.Для его запуска следует в SQL Server Enterprise Manager соединиться с сервером, содержащим хранилище данных, найти в разделе Data Transformation Services элемент Meta Data Services Packages и выбрать опцию New Packages из его контекстного меню. Затем требуется описать базу данных, в которой находится хранилище. Для этого требуется перенести на рабочее пространство редактора пакетов DTS пиктограмму Microsoft OLE DB Provider for SQL Server с палитры Data Tool в левой части окна редактора. После этого появится диалоговая панель Connection Properties (Свойства соединения), в которой нужно выбрать базу данных и указать параметры доступа к ней (пароль и др.).
Как и измерение, куб можно создать с помощью соответствующего мастера или непосредственно в редакторе кубов. Запустить мастер создания кубов можно командой New Cube | Wizard из контекстного меню элемента Cubes.
Первое, что следует сделать после запуска мастера, – выбрать таблицу фактов для будущего куба. Далее из таблицы фактов следует выбрать одно или несколько полей, на основе которых вычисляются меры куба (то есть поля, данные которых подлежат суммированию либо обработке с помощью других агрегатных функций).
Следующим шагом будет выбор коллективных измерений, используемых в этом кубе, а также создание недостающих частных измерений
В результате будут определены метаданные куба. По окончании работы мастера будет запущен редактор кубов, в котором при необходимости можно внести исправления в определение куба, например добавить или удалить измерения и меры, создать вычисляемые значения и т.д.
К созданному кубу можно добавить вычисляемые значения, то есть значения, которые не хранятся в самом кубе, а вычисляются “на лету”. Типичным примером такого значения может быть дополнительная мера, вычисленная на основе уже имеющихся. При вычислениях можно использовать как функции из библиотеки, входящей в состав Analysis Services, так и выражения Visual Basic for Applications (VBA), а также собственные библиотеки функций. Для создания вычисляемых выражений следует выбрать раздел Calculated Members и из контекстного меню выбрать опцию New Сalculated Member. После этого будет запущен построитель выражений (Calculated Member Builder), в котором можно создавать и редактировать выражения, перетаскивая мышью имена измерений и их уровней, мер, имена функций.
Агрегаты – это заранее вычисленные агрегатные данные, размещаемые в ячейках куба. Чем их больше, тем быстрее выполняются запросы к многомерному хранилищу и тем больше объем самого хранилища. Поэтому в общем случае требуется некое их количество, позволяющее осуществить разумный баланс между компактностью и производительностью.
Для определения количества агрегатов и их вычисления следует запустить Storage Design Wizard – мастер создания многомерного хранилища. Для этого в редакторе кубов следует выбрать пункт меню Tools | Design Storage. В первой диалоговой панели следует указать способ хранения данных – MOLAP, ROLAP или HOLAP, затем выбрать, какова должна быть производительность при выполнении запросов (либо будущий максимальный объем хранилища). После этого можно нажать на кнопку Start и получить зависимость производительности от объема хранилища.
В редакторе кубов мы можем просматривать различные двухмерные сечения куба, перемещая имена измерений на горизонтальную и вертикальную оси, а также скрывая и раскрывая уровни. Это самый простой из способов просмотра кубов.