Идрисов С.Ж.

Карагандинский экономический университет Казпотребсоюза, Казахстан

Многомерный язык запросов MDX

 

Язык MDX был впервые представлен как составляющая OLE DB for OLAP в 1997г. Компанией Microsoft. MDX создан группой разработчиков SQL Server (MoshaPasumansky и другие). Вскоре последовала коммерческая реализация языка в Microsoft OLAP Services 7.0 (1998г.), затем – в Microsoft Analysis Services. Последняя версияOLE DB for OLAP была выпущена компанией Microsoft в 1999г.

Несмотря на то, что MDX является не общим стандартом, а только внутренней спецификацией Microsoft, он был принят многими ведущими распространителями технологии OLAP. В их числе разработчики серверных приложений, такие, как ApplixMicrostrategy, SAS, SAP, Whitelight, NCR, а также разработчики клиентских приложений: Panorama Software, Proclarity, AppSource, Cognos, Business Objects, Brio Technology, Crystal Reports, Microsoft Excel, Microsoft Reporting Services и другие.

С появлением XML for Analysis, в котором MDX был принят как стандартный язык запросов, все большее число компаний (в их числе, например, Hyperion Solutions), стали поддерживать MDX.

XML for Analysis обращается к OLE DB for OLAP с помощью языка запросов MDX. В приложении Analysis Services 2005 компанией Microsoft были добавлены некоторые расширения MDX, такие, как подзапросы (subselects). В таких продуктах, как Microsoft Excel 2007, эти расширения уже применяются.

Основные понятия

Хранилище данных, ХД (DataWarehouse, DW) — информация, получаемая из различных источников и накапливаемая в течение продолжительного промежутка времени и отражающая основные или наиболее значимые направления деятельности предприятия, а также средства хранения этой информации и обеспечения доступа к ней.

Сервер анализа (Analysis Server) — структура хранения многомерных данных и метаданных, в простейшем случае специальным образом организованная, содержащая описания создаваемых запросов и формул и другую аналитическую информацию плюс программные средства для поддержания ее целостности и выполнения запросов.

Куб (Cube) — часть данных сервера анализа, относящаяся к определенной предметной области, с которой осуществляется работа. Куб представлен набором мер и измерений.

Мера, или факт, или показатель (Measure) — параметры предметной области, служащие предметом анализа.

Измерение (Dimension) — понятия предметной области, на основании анализируются меры. Каждое измерение может иметь иерархическую структуру уровней. В частности, измерение Время может включать уровни Год, Квартал, Месяц, Число, а измерение География может включать уровни Весь мир, Страна, Город.

Член (Member) — единица описания на каждом уровне иерархии. Например, для измерения География. На уровне городов это — Москва, Санкт-Петербург, Киев, Россия, Украина и т.д.

Кортеж (Tuple)  — коллекция членов одного или нескольких разных измерений. Необходим для определения местоположения конкретной ячейки внутри многомерного куба или набора ячеек (Set), участвующих в запросе.

Множество (Set) — набор кортежей.

Основы 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.

Функции языка MDX

Функции, реализованные в языке MDX, разделяются на несколько групп, как показано в таблице 1.

Таблица 1. Группы функций и входящие в них функции

 

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

 

 

 

 

 

Литература:

1.     Olap.ru;

2.     Microsoft SQL Server 2005 Analysis Services . OLAP и многомерный анализ данных./ Бергер А. Б, Горбач И. В., Маломед  Э. Л.,       Щербинин В. А., Степаненко В. П. / под общ. Ред. А. Б. Бергера, И. В. Горбач – СПб.: БХВ-Петербург,  2007 .