Многомерные выражения ( MDX ) — это язык запросов для онлайн-аналитической обработки (OLAP) с использованием системы управления базами данных . Подобно SQL , это язык запросов для кубов OLAP . [1] Это также язык вычислений с синтаксисом, похожим на формулы электронных таблиц.
Язык MultiDimensional eXpressions (MDX) предоставляет специализированный синтаксис для запросов и манипулирования многомерными данными, хранящимися в кубах OLAP . [1] Хотя некоторые из них можно перевести в традиционный SQL, для этого часто требуется синтез неуклюжих выражений SQL даже для очень простых выражений MDX. MDX был принят большинством поставщиков OLAP и стал стандартом для систем OLAP.
MDX был впервые представлен как часть спецификации OLE DB для OLAP в 1997 году компанией Microsoft . Он был изобретен группой инженеров SQL Server , включая Мошу Пасумански . За спецификацией вскоре последовал коммерческий выпуск Microsoft OLAP Services 7.0 в 1998 году, а затем и Microsoft Analysis Services . Последняя версия спецификации OLE DB для OLAP была выпущена компанией Microsoft в 1999 году.
Хотя это был не открытый стандарт, а скорее спецификация, принадлежащая Microsoft, он был принят широким кругом поставщиков OLAP.
Спецификация XML for Analysis ссылалась на спецификацию OLE DB for OLAP для получения подробной информации о языке запросов MDX. В Analysis Services 2005 компания Microsoft добавила некоторые расширения языка запросов MDX, такие как подвыборки. Такие продукты, как Microsoft Excel 2007, начали использовать эти новые расширения языка запросов MDX. Некоторые называют этот новый вариант MDX MDX 2005.
В 2001 году Совет XMLA выпустил стандарт XML for Analysis (XMLA), который включал mdXML как язык запросов. В спецификации XMLA 1.1 mdXML по сути является MDX, завернутым в <Statement>
тег XML.
В MDX существует шесть основных типов данных .
Aggregate
(число), UniqueName
(строка), .Value
(число или строка) и т. д.[Time]
может вернуть функция MDX, например .Dimension
, . Иерархия — это иерархия измерений куба . Оно может быть указано его уникальным именем, например , или его может вернуть функция MDX, например , . Иерархии содержатся в измерениях. ( Спецификация OLEDB для OLAP MDX не различает типы данных измерений и иерархий. Некоторые реализации, такие как Microsoft Analysis Services, обрабатывают их по-разному. )[Time].[Fiscal]
.Hierarchy
[Time].[Fiscal].[Month]
, или может быть возвращен функцией MDX, например .Level
.[Time].[Fiscal].[Month].[August 2006]
, по квалифицированному имени, например, [Time].[Fiscal].[2006].[Q3].[August 2006]
или возвращен функцией MDX, например .PrevMember
, и т. д. Обратите внимание, что все члены являются специфичными для иерархии. Если один и тот же продукт является членом двух разных иерархий ( .Parent
и ), будут видны два разных члена, которые, возможно, необходимо будет скоординировать в наборах и кортежах (см. ниже)..FirstChild
[Product].[ByManufacturer]
[Product].[ByCategory]
([Time].[Fiscal].[Month].[August], [Customer].[By Geography].[All Customers].[USA], [Measures].[Sales])
, или возвращены функцией MDX, например .Item
.{([Measures].[Sales], [Time].[Fiscal].[2006]), ([Measures].[Sales], [Time].[Fiscal].[2007])}
, или возвращена функцией или оператором MDX, например Crossjoin
, , Filter
, Order
, Descendants
и т. д.[Product].CurrentMember.[Sales Price]
), либо используя специальную функцию доступа (например, [Product].CurrentMember.Properties("Sales Price")
). В ограниченных контекстах MDX также допускает другие типы данных - например, Array может использоваться внутри SetToArray
функции для указания массива, который не обрабатывается MDX, а передается в определяемую пользователем функцию в библиотеке ActiveX. Объекты других типов данных представлены в виде скалярных строк, указывающих имена объектов, такие как имя группы мер в функции Microsoft MeasureGroupMeasures
или имя KPI, например, в функциях Microsoft KPIValue
или KPIGoal
.Следующий пример, адаптированный из SQL Server 2000 Books Online, показывает базовый запрос MDX, который использует оператор SELECT. Этот запрос возвращает набор результатов, содержащий объемы продаж магазинов за 2002 и 2003 годы для магазинов в штате Калифорния.
ВЫБИРАТЬ { [ Меры ] . [ Продажи в магазине ] } В СТОЛБЦАХ , { [ Дата ] . [ 2002 ] , [ Дата ] . [ 2003 ] } В СТРОКАХ ОТ Продаж ГДЕ ( [ Магазин ] . [ США ] . [ КАЛИФОРНИЯ ] )
В этом примере запрос определяет следующую информацию о наборе результатов:
Примечание: в запросе MDX можно указать до 128 осей запроса.
Если вы создаете две оси, одна должна быть осью столбцов, а другая — осью строк, хотя неважно, в каком порядке они появляются в запросе. Если вы создаете запрос, который имеет только одну ось, это должна быть ось столбцов. Квадратные скобки вокруг конкретного идентификатора объекта необязательны, если только идентификатор объекта не является одним из зарезервированных слов и не содержит иных символов, кроме букв, цифр или подчеркиваний.
ВЫБИРАТЬ [ Меры ] . [ Продажи в магазине ] НА КОЛОННАХ , [ Дата ] . Участники В РЯДАХ ОТ Продаж ГДЕ ( [ Магазин ] . [ США ] . [ КАЛИФОРНИЯ ] )