OLAP.ru   Rambler's Top100
Вы находитесь на страницах старой версии сайта. Перейдите на новую версию OLAP.ru
  
Поиск по сайту
Новости
Основы OLAP
Продукты
Business Objects/ Crystal Decisions
Каталог
OLAP в жизни
Тенденции
Download
Яndex
 
 
 
TopList
 

Введение в OLAP, часть 8. Обзор MDX


Алексей Федоров,
Наталия Елманова, преподаватель УКЦ "Interface Ltd",
КомпьютерПресс #11'2001

 

Язык MDX
Использование языка MDX
   MDX Sample Application
   Функции языка 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.

Использование языка MDX

MDX 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. В этом случае в панель переносится копия примера, в котором следует изменить аргументы функций и разделители на нужные значения.

Выполнить запрос можно одним из трех способов:

  • выбрав команду Run в меню Query;
  • нажав клавиши F5;
  • нажав кнопку Run Query на панели инструментов.

Результат выполнения запроса отображается в нижней части экрана или, если выбрана опция 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>]]

где:

  • axis_specification — содержит описание осей куба;
  • cube_specification — содержит название куба;
  • slicer_specification — содержит описание срезов куба.

В языке MDX выражение SELECT используется для задания набора данных, содержащего подмножество многомерных данных. Простейший SELECT-запрос может выглядеть так:

SELECT FROM Sales

В этом примере мы получили общее число продаж (Unit Sales) для всего куба. Поскольку в запросе мы не указали имена членов измерений, были выбраны члены по умолчанию из каждого измерения. Наш запрос эквивалентен следующему:

SELECT {([Measures].[Unit Sales])} ON COLUMNS
FROM SALES

Более полный SELECT-запрос должен содержать следующую информацию:

  • число осей (в одном запросе можно указать до 128 осей);
  • список членов измерения, которые должны быть включены для каждой оси;
  • имя куба, к которому производится запрос;
  • список членов среза.

Рассмотрим более сложный пример, который позволит нам разобраться с различными элементами 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, разделяются на несколько групп, как показано в таблице.

Группы функций и входящие в них функции

Array Functions
SetToArray        
Dimension, Hierarchy and Level Functions        
Dimension Dimensions Hierarchy Level Levels
Logical Functions        
Is IsAncestor IsEmpty IsGeneration IsLeaf
IsSibling        
Member Functions        
Ancestor ClosingPeriod Cousin CurrentMember DataMember
DefaultMember FirstChild FirstSibling Ignore Item
Lag LastChild LastSibling Lead LinkMember
Members NextMember OpeningPeriod ParallelPeriod Parent
PrevMember StrToMember ValidMeasure    
Numeric Functions        
Aggregate Avg CalculationCurrentPass CalculationPassValue CoalesceEmpty
Correlation Count Covariance CovarianceN DistinctCount
IIf LinRegIntercept LinRegPoint LinRegR2 LinRegSlope
LinRegVariance LookupCube Max Median Min
Ordinal Predict Rank RollupChildren Stddev
StddevP Stdev StdevP StrToValue Sum
Value Var Variance VarianceP VarP
Set Functions        
AddCalculatedMembers AllMembers Ancestors Ascendants Axis
BottomCount BottomPercent BottomSum Children Crossjoin
Descendants Distinct DrilldownLevel DrilldownLevelBottom DrillDownLevelTop
DrilldownMember DrilldownMemberBottom DrilldownMemberTop DrillupLevel DrillupMember
Except Extract Filter Generate Head
Hierarchize Intersect LastPeriods Members Mtd
NameToSet NonEmptyCrossjoin Order PeriodToDate Qtd
Siblings StripCalculatedMembers StrToSet Subset Tail
ToggleDrillState TopCount TopPercent TopSum Union
VisualTotals Wtd Ytd    
String Functions        
CalculationPassValue CoalesceEmpty Generate IIf LookupCube
MemberToStr Name Properties SetToStr TupleToStr
UniqueName UserName      
Tuple Functions        
Current Item StrToTuple    
Other Functions        
Call        

Кроме того, перечисленные функции языка MDX могут использоваться при вычислении различных выражений, в том числе при создании вычисляемых измерений. Кроме того, при необходимости для применения в MDX можно создавать функции, определенные пользователем (User Defined Functions, UDF), с помощью средств разработки, поддерживающих создание COM DLL.

Более подробные сведения о синтаксисе этого языка вы можете найти в Microsoft SQL Server Books Online, а примеры его практического применения  — в статье «Введение в MDX», опубликованной в этом номере журнала.

В следующей части статьи мы рассмотрим создание OLAP-клиентов, использующих для доступа к многомерным данным механизмы ADO и ADOMD.

 Обсудить на форуме   Написать вебмастеру 

© 2001 Interface Ltd