Delphi и расширения ADO - Использование ADO MultiDimensional

ОГЛАВЛЕНИЕ

Использование ADO MultiDimensional

Инструменты для анализа данных и поддержки принятия решений в настоящее время считаются одним из важнейших типов приложений. Реализация подобного анализа нередко базируется на построении многомерных хранилищ данных (data warehouses) и на аналитической обработке данных (On-Line Analytical Processing, OLAP)  — популярной технологии многомерного бизнес-анализа. Концепция OLAP была описана в 1993 году Е.Ф.Коддом, известным исследователем баз данных и автором реляционной модели данных. В настоящее время поддержка OLAP реализована в различных СУБД и инструментах. Если вы знакомы с компонентами Decision Cube , то вы уже видели простейшую реализацию OLAP — приложения с такими компонентами представляют собой примитивные OLAP-инструменты.

Подробности об OLAP можно найти на сайте www.olap.ru, сопровождаемом компанией «Интерфейс», поставщиком многих OLAP-продуктов на российском рынке.

В нашей статье мы можем себе позволить лишь краткое введение в OLAP и создание хранилищ данных, ибо это потребуется для понимания того, что представляют собой объекты ADO MD. Более подробно тема OLAP будет раскрыта в одной из статей цикла «Введение в СУБД».

OLAP и создание хранилищ данных: краткое введение

Рассмотрим, из чего обычно состоит многомерное хранилище данных. Представим себе торговую компанию, которая хранит все сведения о торговых операциях в какой-либо базе данных, содержащей среди прочих представление Invoices с подробными сведениями о заказах клиентов. Предположим, что обращение к этому представлению приводит к появлению набора данных, показанного в табл. 3. 

Таблица 3

Date ProductCategory ProductSubcategory Product Name Country City SalesPerson Payment
01.01.99 Vegetables Canned Vegetables Canned Tomatos Germany Berlin Nicolas Wilson $1280
01.01.99 Vegetables Fresh Vegetables Dried Mushrooms UK London Daniel Adams $514
01.02.99 Dairy Cheese Cheddar Cheese Germany Frankfurt Nicolas Wilson $723
01.02.99 Dairy Cheese Gorilla Cheese Spread Austria Vienna Nicolas Wilson $330
01.03.99 Vegetables Canned Vegetables Canned Tomatos UK London Daniel Adams $439
. . . . . . . . . . . . . . . . . . . . . . . .

Допустим, нам требуется узнать суммарную стоимость всех заказов, сделанных клиентами из Германии. Очевидно, что для получения такого суммарного значения (summary) нужно выполнить следующий запрос:

  SELECT SUM(Payments) FROM Sales WHERE Country='Germany' 

В этом запросе можно заменить ‘Germany’ на ‘Austria’, или на ‘UK’, или на название другой страны. В результате мы получим одномерный массив значений — по одному числу для каждой страны, как показано в табл. 4:

Таблица 4

Germany Austria UK USA ...
$2003 $330 $953 $5321  

Теперь немного усложним задачу. Например, спросим, какова суммарная стоимость заказов овощей, сделанных клиентами из Германии:

   SELECT SUM (Payment) FROM Invoices WHERE Country=' Germany' AND ProductCategory='Vegetables'

Если мы рассмотрим все возможные комбинации категорий продуктов и названий стран, мы получим двухмерный массив суммарных значений (табл. 5):

Таблица 5

  Vegetables Dairy Drinks
Germany $1280 $723 $239
UK $514 $0 $732
Austria $0 $330 $0

 Подобная таблица часто именуется перекрестной таблицей, кросс-таблицей, а также сводной таблицей (Cross table, Pivot table). Первым измерением (dimension) в ней является измерение Country, вторым — ProductCategory .

Снова модифицируем наш запрос. Предположим, теперь нам нужно узнать, какова суммарная стоимость заказов овощей, сделанных клиентами из Германии и обработанных сотрудником по имени Nicolas Wilson.

    SELECT SUM(Payments) FROM Sales WHERE Country='Germany' AND ProductCategory='Vegetables'    
AND SalesPerson='Nicolas Wilson'

Если мы рассмотрим все возможные комбинации категорий продуктов, названий стран, имен сотрудников, то получим трехмерный массив суммарных значений, который можно представить в виде куба данных (на самом деле это, конечно, параллелепипед, но к таким наборам данных, тем не менее, принято применять термин «куб»). Размерностями этого набора данных являются Country, ProductCategory и SalesPerson . Мы можем продолжать добавлять параметры к нашему запросу (и, следовательно, добавлять к нашему кубу все новые и новые размерности) и получать соответствующие суммарные значения. Именно это и делает приложение, использующее компоненты Decision Cube, — оно вычисляет такие суммы и хранит их в оперативной памяти.

Следует отметить, что наборов таких суммарных значений может быть несколько (в частности, это могут быть суммы платежей, средняя стоимость, количество заказов и т.п.). Подобные суммарные значения в русской терминологии именуются агрегатными данными, а в англоязычной наиболее применимы термины summaries и measures .

Следующий важный аспект, часто используемый при создании OLAP-хранилищ, — это иерархическая структура размерностей. Например, если одна из размерностей основана на поле типа «дата/время», то суммарные значения можно получить для различных годов, а также для кварталов, месяцев, дней (это единственный тип иерархии, поддерживаемый компонентами Decision Cube). Мы также можем сравнить, допустим, суммарные значения для сходных периодов времени (например, для всех сред и всех четвергов или для января 1999 года и января 2000 года). Нам также может понадобиться и другой тип иерархии (например, Country/State/City или Product Category/Product Subcategory/Product Name ).

В нашей статье для иллюстрации применения объектов ADO MultiDimensional в качестве OLAP-сервера мы будем использовать Microsoft SQL Server 7.0 OLAP Extensions (или Microsoft SQL Server 2000 Analysis Services). На данный момент OLE DB Provider for OLAP Services, входящий в состав Microsoft SQL Server OLAP Extensions (Microsoft SQL Server 2000 Analysis Services) и в состав Microsoft Office, является единственным OLE DB-провайдером, позволяющим обращаться к многомерным данным. С его помощью можно обращаться к данным, хранящимся в многомерных базах данных Microsoft SQL Server 7.0/2000 или в локальных файлах *.cub, которые можно создать с помощью Microsoft Excel 2000 . Однако мы полагаем, что в ближайшее время следует ожидать выпуска других OLE DB-провайдеров для других OLAP-серверов.

В данной публикации мы не описываем, как программно создать многомерное хранилище данных — чтобы сделать это в приложении, следует использовать библиотеку SQL DSO (Decision Support Objects), описание применения которой выходит за рамки данной статьи.

Для иллюстрации работы ADO MD мы используем многомерную базу данных FoodMart, входящую в комплект Microsoft SQL Server 7.0 OLAP Extensions. Однако при необходимости можно использовать любой локальный файл *.cub, созданный с помощью Microsoft Excel 2000, — в этом случае на компьютере, где будут создаваться примеры, должен быть установлен Microsoft Excel 2000.

Начнем изучение ADO MD с объектной модели, доступной в приложениях Delphi.