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.