Идрисов
С.Ж.
Карагандинский
экономический университет Казпотребсоюза, Казахстан
Многомерный язык запросов 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. В их числе разработчики серверных приложений, такие, как Applix, Microstrategy, 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 .