320 likes | 583 Views
Хранилища данных. Автор: кандидат физ.-мат. наук, Степанов Р.Г. Казанский (Приволжский) Федеральный Университет Казань, 2011. Язык MDX. SQL — Structured Query Language (язык структурированных запросов). Служит для выполнения запросов к реляционной базе данных.
E N D
Хранилища данных Автор: кандидат физ.-мат. наук, Степанов Р.Г. Казанский (Приволжский) Федеральный Университет Казань, 2011
Язык MDX • SQL — Structured Query Language (язык структурированных запросов). Служит для выполнения запросов к реляционной базе данных. • MDX — Multi-Dimendional eXpressions (язык многомерных выражений). Используется для извлечения из баз данных OLAP. Язык MDX позволяет выполнять более сложные операции, чем SQL. • Изначально MDX разработан компанией Microsoft в 1998 г.
Язык MDX • MDX поддерживается многими ведущими производителями решений для OLAP. • Серверы: MS SQL Server Analysis Services, Mondrian, Palo, Applix, Microstrategy, SAS, SAP, Whitelight, NCR • Клиенты: Panorama Software, Proclarity, AppSource, Cognos, Business Objects, Brio Technology, Crystal Reports, MS Excel, и т.д. • MDX — стандартный язык запросов в спецификации XML for Analysis (XMLA).
Основные объекты многомерных баз данных • Куб (Cube); • Измерение (Dimension) — играет роль справочника; • Мера (Measure) — количественная сущность;
Пример запроса MDX • SELECT Measures.[Internet Sales Amount] ONCOLUMNS • FROM [Adventure Works] • WHERE ( [Date].[Calendar].[Calendar Quarter].&[2003]&[2], • [Product].[Product Line].[Mountain], • [Customer].[Country].[Australia]) • Результат: • Internet Sales Amount • $323,561.09
Основы • Измерение содержит одну или несколько иерархий. • Каждый уровень иерархии измерения содержит набор элементов, называемых членами (members). • Каждый член иерархии имеет уникальное имя. • Пример: член уровня [Calendar Quarter] иерархии [Calendar] измерения [Date]: [Date].[Calendar].[Calendar Quarter].[Q2 CY 2005]
Основы • В общем случае для доступа к члену иерархии можно использовать форматы: [Имя измерения].[Имя иерархии].[Имя уровня].[Имя члена]. [<Èçìåðåíèå>].[<Èåðàðõèÿ>].[<×ëåí âåðõíåãî óðîâíÿ>]. … .[<×ëåí íèæíåãî óðîâíÿ>] Пример: [Customer].[Country].[Australia] [Место]. [Иерархия_Место].[РФ].[Москва]
Объект Measures • Объект Measures (меры) — специальное измерение, содержащее в качестве членов набор мер. Пример — мера Internet Sales Amount: Measures.[Internet Sales Amount] • Для каждой меры задана функция агрегации.
Срез куба • Ячейка (cell) куба идентифицируется набором членов измерений, на пересечении которых находится эта ячейка. • Срез куба (slice) также задается набором членов измерений, определяющих срез. • Синтаксис: в круглых скобках перечисляются члены измерений, разделенные запятыми. Если кортеж задается только одним членом измерения, то скобки можно опускать.
Кортеж • Примеры: • [Customer].[Country].[Germany] • ( [Date].[Calendar].[Calendar Quarter].[Q2 CY 2003], [Product].[Product Line].[Mountain], [Customer].[Country].[Australia]). • Подобное выражение на языке MDX называется кортежем (tuple).
Пример 1. Запрос для получения суммы продаж через Интернет для всех клиентов из Германии: • SELECT Measures.[Internet Sales Amount] onCOLUMNS • FROM [Adventure Works] • WHERE ([Customer].[Country].[Germany]) • Результат: $2,894,312.34
Набор • Набор (set) — это совокупность кортежей, которые определены с использованием одинакового количества одних и тех же измерений. Набор обычно заключается в фигурные скобки {}. • Пример: • {(Customer.Country.Australia), (Customer.Country.Canada)}
MDX-запрос • Синтаксис MDX-запроса: [WITH <formula_expression> [, <formula_expression> ...]] SELECT [<axis_expression>, [<axis_expression>...]] FROM [<cube_expression>] [WHERE [slicer_expression]] Фразы WITHи WHEREявляются необязательными.
Оси в MDX • <axis_expression> := <набор> ON (ось) | Axis (номер оси) | (номер оси) • Пять осей имеют псевдонимы: COLUMNS, ROWS, PAGES, SECTIONS и CHAPTERS. Последующие оси указываются с помощью слова Axis, за которым следует номер оси. В запросе можно указать до 128 осей.
Пример 2. • SELECT Measures.[Internet Sales Amount] ONCOLUMNS, • [Customers].[Country].MEMBERSonROWS, • [Product].[Product Line].MEMBERSonPAGES • FROM [Adventure Works] • эквивалентен • SELECT Measures.[Internet Sales Amount] ON 0, • [Customers].[Country].MEMBERSon 1, • [Product].[Product Line].MEMBERSon 2 • FROM [Adventure Works]
Секция FROM • Предложение FROM в MDX-запросе определяет куб, из которого необходимо извлечь данные для анализа. • В запросе MDX можно указать имя только одного куба данных. • Данные из других кубов можно получить, используя функцию LookupCube языка MDX.
Секция WHERE - здесь указывается срез куба, который нас интересует. • SELECT [Measures].[Internet Sales Amount] ONCOLUMNS, • [Product].[Product Line].MEMBERSonROWS • FROM [Adventure Works] • WHERE([Product].[Color].[Silver])
Секция WITH • Используется для выполнения дополнительных вычислений в рамках запроса. • Синтаксис: [WITH <formula_expression> [, <formula_expression> …]]
Именованные наборы • Formula_expression := [DYNAMIC] SET <псевдоним_набора> AS [']<набор>['] • WITHSET [EUROPE] AS '{[Customer].[Country].[Country].&[France], • [Customer].[Country].[Country].&[Germany],[Customer].[Country]. • [Country].&[United Kingdom]} ' • SELECT Measures.[Internet Sales Amount] onCOLUMNS, • [EUROPE] ONROWS • FROM [Adventure Works]
Вычисляемые члены • Formula_expression := MEMBER <ИмяЧлена> AS [']<Выражение_MDX>['], [ , SOLVE_ORDER = <целое число>] [ , <СвойствоЯчейки> = <ВыражениеСвойства>] • WITHMEMBER [MEASURES].[Profit] AS '[Measures].[Internet Sales Amount]-[Measures].[Internet Standard Product Cost]' • SELECT Measures.profit ONCOLUMNS, • [Customer].[Country].MEMBERSONROWS • FROM [Adventure Works]
WITH SET [ProductOrder] AS 'Order([Product].[Product Line].MEMBERS, [Internet Sales Amount], BDESC)' MEMBER [Measures].[ProductRank] AS 'Rank([Product].[Product Line].CURRENTMEMBER, [ProductOrder])' SELECT {[ProductRank],[Sales Amount]} ONCOLUMNS, [ProductOrder] onROWS FROM [Adventure Works]
WITHMEMBER [Date].[Calendar].[%Change] AS 100* (([Date].[Calendar].[Calendar Quarter].[Q2 CY 2002] - [Date].[Calendar].[Calendar Quarter].[Q1 CY 2002]) / [Date].[Calendar].[Calendar Quarter].[Q2 CY 2002]) SELECT {[Date].[Calendar].[Calendar Quarter].[Q1 CY 2002], [Date].[Calendar].[Calendar Quarter].[Q2 CY 2002], [Date].[Calendar].[%Change]} ONCOLUMNS, {Measures.[Internet Sales Amount],[Measures].[Customer Count], [Measures].[Internet Gross Profit]} ONROWS FROM [Adventure Works] Пример 4.
Пример 5. • WITHMEMBER [Date].[Calendar].[First8MonthsCY2003] AS • Aggregate(YTD([Date].[Calendar].[Month].[August 2003])) • SELECT [Date].[Calendar].[First8MonthsCY2003] ONCOLUMNS, • [Product].[Category].ChildrenONROWS • FROM [Adventure Works] • WHERE [Measures].[Order Quantity]
Другие элементы MDX • Комментарии // здесь следует комментарий -- здесь следует комментарий /* здесь следует комментарий */ • Арифметические операторы +, –, * и / • Операторы наборов • Операторы сравнения <, <=, >, >=, = и <> • Логические операторы AND, OR, XOR, NOT
Операторы наборов • '+' - объединение наборов • '-' - разность двух наборов • '*' - векторное произведение двух наборов • Двоеточие ':' SELECT [Measures].[Internet Sales Amount] ON 0, {[Date].[Calendar].[CY 2001]:[Date].[Calendar].[CY 2003]} ON 1 FROM [Adventure Works]
Функции MDX • Функции для members • Members — при применении к иерархии возвращает набор всех членов иерархии, независимо от уровня; при применении к уровню возвращает набор всех членов измерения на данном уровне. • Children, Parent — перемещение вверх и вниз по уровням. • PrevMember, NextMember, Lag, Lead — перемещение в пределах одного уровня • FirstChild, LastChild — возвращает первый (последний) потомок данного элемента. • MemberToStr(<Выражение члена>), StrToMember(<Строка>);
Функции MDX • Функции наборов • CrossJoin возвращает все возможные комбинации членов наборов, указанных в качестве ее аргументов. CrossJoin(Выражение_набора [, Выражение_набора …]) • Filter ограничивает результаты запроса на основе некоторого условия. Filter( Выражение_набора, {Логическое_выражение | [CAPTION | KEY | NAME] = Строковое_выражение})
Пример 6. • SELECT Measures.[Internet Sales Amount] ONCOLUMNS, • FILTER(CROSSJOIN( {Product.[Product Line].[Product Line].MEMBERS}, • {[Customer].[Country].MEMBERS}), • [Internet Sales Amount] >2000000) ONROWS • FROM [Adventure Works]
Функция Exists • Exists( Set_Expression1 , Set_Expression2 [, MeasureGroupName] ) - возвращает кортежи из набора 1, которые существуют вместе с одним или более кортежем из набора 2. • Клиенты из Калифорнии: SELECT [Measures].[Internet Sales Amount] ON 0, EXISTS([Customer].[Customer].[Customer].MEMBERS , {[Customer].[State-Province].&[CA]&[US]}) ON 1 FROM [Adventure Works]
Функции MDX. Продолжение • Справочник по функциям MDX в составе MSDN: http://msdn.microsoft.com/en-us/library/ms145970.aspx