|
||||||||
|
|
Введение в OLAP, часть 8. Обзор MDXАлексей Федоров,
Предыдущая часть данной статьи (КомпьютерПресс © 10'2001) была посвящена просмотру OLAP-данных с помощью компонента PivotTable List. Как вы помните, данный элемент управления ActiveX входит в состав Microsoft Office Web Components и позволяет создавать сводные таблицы, просматривать сечения OLAP-кубов, а также строить простейшие сечения многомерных кубов. Однако запросы к кубам не всегда могут быть представлены в виде простейших сечений. На практике нередко требуется получить сведения о конкретном подмножестве данных (например, узнать о заказах только в одной стране или сравнить данные о продажах только в конкретном месяце, но в разные годы) и отобразить не просто суммарные значения, а какие-то другие статистические данные (например, среднеквадратичное отклонение). Далеко не всегда подобные срезы данных можно получить, просто манипулируя имеющимся кубом в рассмотренных нами OLAP-клиентах (равно как не всегда можно получить нужные сведения из реляционной базы данных, просто обратившись к одной таблице с помощью простейшей утилиты просмотра данных).
Практически во всех промышленных OLAP-средствах, включая и Analysis Services, для получения нестандартных срезов данных требуется отдельный непроцедурный язык для формулирования запросов к многомерным базам данных. Одному из таких языков, MDX, посвящена данная статья. Язык MDXНазначение языка MDX (Multidimensional Expressions) - предоставить в распоряжение разработчиков средство для более простого и эффективного доступа к многомерным структурам данных. В Microsoft SQL Server 2000 Analysis Services язык MDX используется для формирования запросов и описания алгоритмов получения вычисляемых значений.
Следует сказать, что язык MDX никак не связан с Microsoft SQL Server 2000 Analysis Services, а является частью спецификации OLE DB for OLAP и, таким образом, поддерживается на уровне провайдера доступа к данным (OLE DB-провайдера), а не самого OLAP-хранилища. Этот язык можно сравнить с языком SQL. Но если SQL используется для извлечения реляционных данных, то MDX служит для извлечения многомерных данных. Естественно, что, как и в случае с языком SQL, возможны некоторые отклонения от стандарта. В этой статье мы рассмотрим язык MDX применительно к Microsoft SQL Server 2000 Analysis Services. Использование языка MDXMDX Sample ApplicationДля выполнения запросов на языке MDX мы будем использовать утилиту MDX Sample Application, входящую в состав Microsoft SQL Server 2000 Analysis Services. При запуске этой утилиты появляется диалоговая панель Connect, в которой следует указать имя сервера (имя компьютера, на котором установлен Microsoft SQL Server 2000 Analysis Services) и тип провайдера для связи с этим сервером - в нашем примере это будет MSOLAP.
После этого можно нажать кнопку OК. Нажатие кнопки Cancel отменяет данную диалоговую панель - в этом случае для связи с сервером следует воспользоваться командой Connect из меню File. После соединения с сервером можно начинать создание MDX-запросов к многомерной базе данных и их выполнение. Часто бывает полезно знать структуру куба, к которому вы собираетесь обратиться. Утилита MDX Sample Application позволяет просматривать метаданные куба. Для этого необходимо выбрать интересующий вас куб в списке Cube и изучить его размерности и меры в древовидном представлении содержимого куба. Верхняя панель утилиты MDX Sample Application предназначена для задания MDX-запросов. Мы можем либо выбрать один из предопределенных запросов (список Query), либо создать собственный. По умолчанию утилита использует запросы, находящиеся в файле MDXQuery.mdx, расположенном в папке MDXSample. Для загрузки другого файла или сохранения текущего используются команды меню File. Можно вводить MDX-команды непосредственно в панели запросов или конструировать запрос, перетаскивая измерения и меры куба в панель запросов. Помимо этого можно использовать примеры функций из панели Syntax Examples. В этом случае в панель переносится копия примера, в котором следует изменить аргументы функций и разделители на нужные значения.
Выполнить запрос можно одним из трех способов:
Результат выполнения запроса отображается в нижней части экрана или, если выбрана опция View | Results, во весь экран. Отметим, что MDX Sample Application не выполняет проверку корректности введенного MDX-запроса перед отсылкой его серверу на обработку.
Теперь вы готовы приступить к изучению языка MDX. Этой теме будет посвящена следующая часть данной статьи. В качестве исходных данных для выполнения примеров мы воспользуемся многомерной базой данных FoodMart, входящей в комплект поставки Microsoft SQL Server Analysis Services. Синтаксис языка MDX Запрос на языке MDX представляет собой набор команд, который выглядит следующим образом: SELECT [<axis_specification> [, <axis_specification>...]] FROM [<cube_specification>] [WHERE [<slicer_specification>]] где:
В языке MDX выражение SELECT используется для задания набора данных, содержащего подмножество многомерных данных. Простейший SELECT-запрос может выглядеть так: SELECT FROM Sales В этом примере мы получили общее число продаж (Unit Sales) для всего куба. Поскольку в запросе мы не указали имена членов измерений, были выбраны члены по умолчанию из каждого измерения. Наш запрос эквивалентен следующему: SELECT {([Measures].[Unit Sales])} ON COLUMNS FROM SALES Более полный SELECT-запрос должен содержать следующую информацию:
Рассмотрим более сложный пример, который позволит нам разобраться с различными элементами MDX-запроса: SELECT { [Measures].[Unit Sales], [Measures].[Store Sales] } ON COLUMNS, { [Time].[1997], [Time].[1998] } ON ROWS FROM Sales WHERE ( [Store].[USA].[CA] ) SELECT определяет используемые оси. В нашем примере их две: одна - задает значения для колонок, другая - для рядов: { [Measures].[Unit Sales], [Measures].[Store Sales] } ON COLUMNS, { [Time].[1997], [Time].[1998] } ON ROWS Выражение FROM определяет источник многомерных данных, к которому обращен наш запрос. В данном примере - это куб Sales. Выражение WHERE задает размерности или члены, используемые в качестве среза. В нашем примере мы ограничили данные размерностью Store. Рассмотрим еще несколько запросов. В первом запросе мы получаем данные по продажам всех товаров для всех лет: SELECT[Product].[Product Category].Members ON COLUMNS FROM Sales Данные для целого года (1997): SELECT[Product].[Product Category].Members ON COLUMNS, {[Time].[1997]} ON ROWS FROM Sales Данные по кварталам: SELECT {([Measures].[Unit Sales])} ON COLUMNS, {[Time].[Quarter].Members} ON ROWS FROM Sales Данные для первого квартала: SELECT {([Measures].[Unit Sales])} ON COLUMNS, {[Time].[1997].[Q1]} ON ROWS FROM Sales Данные для первого месяца первого квартала: SELECT {([Measures].[Unit Sales])} ON COLUMNS, {[Time].[1997].[Q1].[1]} ON ROWS FROM Sales Продажи для всех клиентов в США: SELECT {([Measures].[Unit Sales])} ON COLUMNS, {[Customers].[All Customers].[USA]} ON ROWS FROM Sales Продажи для всех клиентов в штате Калифорния: SELECT {([Measures].[Unit Sales])} ON COLUMNS, {[Customers].[All Customers].[USA].[CA]} ON ROWS FROM Sales Продажи товаров по категориям для всех клиентов в штате Калифорния: SELECT {([Measures].[Unit Sales])} ON COLUMNS, {[Product].[Product Family].Members} ON ROWS FROM Sales WHERE [Customers].[All Customers].[USA].[CA] Продажи товаров по категориям для всех клиентов в штате Калифорния в первом квартале 1997 года: SELECT {([Measures].[Unit Sales])} ON COLUMNS, {[Product].[Product Family].Members} ON ROWS FROM Sales WHERE ([Customers].[All Customers].[USA].[CA], [Time].[1997].[Q1]) Продажи морепродуктов для всех клиентов в штате Калифорния в первом квартале 1997 года: SELECT {([Measures].[Unit Sales])} ON COLUMNS, {[Product].[Product Department].[Seafood]} ON ROWS FROM Sales WHERE ([Customers].[All Customers].[USA].[CA], [Time].[1997].[Q1]) Функции языка MDXФункции, реализованные в языке MDX, разделяются на несколько групп, как показано в таблице. Группы функций и входящие в них функции
Кроме того, перечисленные функции языка MDX могут использоваться при вычислении различных выражений, в том числе при создании вычисляемых измерений. Кроме того, при необходимости для применения в MDX можно создавать функции, определенные пользователем (User Defined Functions, UDF), с помощью средств разработки, поддерживающих создание COM DLL.
Более подробные сведения о синтаксисе этого языка вы можете найти в Microsoft SQL Server Books Online, а примеры его практического применения - в статье <Введение в MDX>, опубликованной в этом номере журнала. В следующей части статьи мы рассмотрим создание OLAP-клиентов, использующих для доступа к многомерным данным механизмы ADO и ADOMD. c 2001 Interface Ltd | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
За содержание страницы отвечает Гончарова М.Н. © Кафедра СПиКБ, 2002-2017 |