Measures.[Internet Sales Amount]

advertisement
Хранилища данных
Автор:
кандидат физ.-мат. наук,
Степанов Р.Г.
Казанский (Приволжский) Федеральный
Университет
Казань, 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] ON COLUMNS
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] on
COLUMNS
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] ON COLUMNS,
[Customers].[Country].MEMBERS on ROWS,
[Product].[Product Line].MEMBERS on PAGES
FROM [Adventure Works]
эквивалентен
SELECT Measures.[Internet Sales Amount] ON 0,
[Customers].[Country].MEMBERS on 1,
[Product].[Product Line].MEMBERS on 2
FROM [Adventure Works]
Секция FROM



Предложение FROM в MDX-запросе
определяет куб, из которого необходимо
извлечь данные для анализа.
В запросе MDX можно указать имя только
одного куба данных.
Данные из других кубов можно получить,
используя функцию LookupCube языка MDX.
Секция WHERE - здесь указывается срез
куба, который нас интересует.
SELECT [Measures].[Internet Sales Amount] ON COLUMNS,
[Product].[Product Line].MEMBERS on ROWS
FROM [Adventure Works]
WHERE ([Product].[Color].[Silver])
All Products
Accessory
Components
Mountain
Internet Sales Amount
$5,113,389.08
$40,307.67
(null)
$5,073,081.41
Секция WITH


Используется для выполнения
дополнительных вычислений в рамках
запроса.
Синтаксис:
[WITH <formula_expression> [, <formula_expression> …]]
Именованные наборы
Formula_expression := [DYNAMIC] SET
<псевдоним_набора> AS [']<набор>[']
WITH SET [EUROPE] AS
'{[Customer].[Country].[Country].&[France],
[Customer].[Country].[Country].&[Germany],[Customer].[Coun
try].
[Country].&[United Kingdom]} '
SELECT Measures.[Internet Sales Amount] on COLUMNS,
[EUROPE] ON ROWS
FROM [Adventure Works]
Вычисляемые члены
Formula_expression := MEMBER <ИмяЧлена> AS
[']<Выражение_MDX>['], [ , SOLVE_ORDER = <целое
число>] [ , <СвойствоЯчейки> =
<ВыражениеСвойства>]
WITH MEMBER [MEASURES].[Profit] AS
'[Measures].[Internet Sales Amount]-[Measures].[Internet
Standard Product Cost]'
SELECT Measures.profit ON COLUMNS,
[Customer].[Country].MEMBERS ON ROWS
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]} ON COLUMNS,
[ProductOrder] on ROWS
FROM [Adventure Works]
ProductRank
Sales Amount
All Products
1 $109,809,274.20
Road
2 $48,262,055.15
Mountain
3 $42,456,731.56
Touring
4 $16,010,837.10
Accessory
5 $2,539,401.59
Components
6 $540,248.80
Пример 4.
WITH MEMBER [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]} ON COLUMNS,
{Measures.[Internet Sales Amount],[Measures].[Customer
Count],
[Measures].[Internet Gross Profit]} ON ROWS
FROM [Adventure Works]
Пример 4.
Q1 CY 2002
Q2 CY 2002
%Change
Internet Sales Amount $1,791,698.45 $2,014,012.13 11.0383486486941
Customer Count
558
635
12.1259842519685
Internet Gross Profit
$719,198.90
$812,350.79
11.4669534172378
Пример 5.
WITH MEMBER [Date].[Calendar].[First8MonthsCY2003] AS
Aggregate(YTD([Date].[Calendar].[Month].[August 2003]))
SELECT [Date].[Calendar].[First8MonthsCY2003] ON COLUMNS,
[Product].[Category].Children ON ROWS
FROM [Adventure Works]
WHERE [Measures].[Order Quantity]
First8MonthsCY2003
Accessories
9,98
Bikes
21,62
Clothing
18,85
Components
13,3
Другие элементы 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] ON COLUMNS,
FILTER(CROSSJOIN( {Product.[Product Line].[Product
Line].MEMBERS},
{[Customer].[Country].MEMBERS}),
[Internet Sales Amount] >2000000) ON ROWS
FROM [Adventure Works]
Пример 6. Результаты запроса
Internet Sales
Amount
Mountain
All Customers
$10,251,183.52
Mountain
Australia
$2,906,994.45
Mountain
United States
$3,547,956.78
Road
All Customers
$14,624,108.58
Road
Australia
$5,029,120.41
Road
United States
$4,322,438.41
Touring
All Customers
$3,879,331.82
Функция 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
Download