Страница 5 из 9
Использование 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. |