Програмування запитів MDX – ЧАСТИНА 1

I ^ Jyl ногомерние вираження MDX є в службі II ш / II аналізу аналогом того, чим в реляційних базах даних є запити SQL Вони реалізують як функції визначення (DDL), так і функції запитів (DML), однак базуються на зовсім іншому фундаменті Як ви вже зрозуміли, вони повертають багатовимірні набори даних, а не двомірні, однак, що більш важливо, запити MDX не містять пропозицій обєднання JOIN, так як сам куб містить явні звязки між усіма консолідованих даними Для визначення структури та вмісту результату виконуються маніпуляції ієрархічно організованими даними вимірювань

Навчання основам написання запитів MDX у студентів відбувається не особливо швидко в основному це стосується тих, хто вже мав досвід роботи з іншими базами даних У безлічі початківців спостерігається тенденція застрявати на базовому рівні запитів Як правило, причиною цьому стає нерозуміння всього десятка понять і концепцій Тому ряд цих концепцій ми виведемо на самому початку глави: це кортежі (набори взаємоповязаних величин), безлічі (набори даних), частини вимірювань і деякі інші

Щоб не зазнати поразки в атаці на MDX, рекомендується використовувати наступний стиль роботи

1 Ознайомтеся з розділом Основи запитів SELECT на початку цієї глави, після чого попрактикуйтесь із запропонованими прикладами, поки не відчуєте себе більш впевнено

2 Уважно перечитайте розділ Основи запитів SELECT, поки основні концепції та термінологія міцно не закріпляться у вашому свідомості Ці основи дозволять вам свідомо знайомитися з додатковими можливостями в розділі Розширені запити SELECT і освоювати їх на практиці

3 Читаючи розділ Сценарії MDX, почніть самостійно визначати множини і обчислення в структурі куба

Додаткова Про основи створення кубів, до яких виконуються запити MDX, см в розділі 43

інформація

Незважаючи на те що служба аналізу входила до складу SQL Server з версії 70, Новинка для веРоці 2005 цей продукт був повністю перероблений Багато основні

2005 концепції успадковані з попередніх версій, проте синтаксис був в зна

чительной міру розширений, а багато обмеження зняті

Основи запитів select

Подібно SQL, інструкції SELECT в MDX є засобом вилучення даних Базовою формою цієї інструкції є наступна:

SELECT {множество1} ON COLUMNS, {множество2} ON ROWS FROM куб

WHERE (множествоЗ)

Цей запит поверне просту таблицю, в якій безліч 1 і множество2 визначають заголовки стовпців і рядків, куб є джерелом даних, а множествоЗ обмежує фрагменти куба, які консолідуються в таблиці

Адресація в кубі

Безліч являє собою список, що складається з одного або декількох кортежів Розглянемо приклад, показаний на рис 451 Він обмежений трьома ієрархіями вимірів (товаром, роком і мірою), що дозволяє відобразити безліч графічно Запит MDX консолідує окремі блоки в кубі, звані осередками, в геометрію, певну запитом Окремі осередки куба адресуються за допомогою кортежів

Елементи кортежів кожної з ієрархій формують координати в кубі, вибираючи всі комірки на перетині цих координат Наприклад, координати (груша, 2004, кількість замовлень) адресують осередок, позначену на рис 451 символом А Кортежі можуть також адресувати і групи комірок, використовуючи загальний рівень вимірювання (All) Наприклад, координати (груша, всі роки, кількість замовлень) вказують на три осередки: осередок, позначену символом А, що знаходиться безпосередньо над нею (груша, 2003, кількість замовлень), а також осередок під нею (груша, 2005, кількість замовлень) Насправді, навіть коли в кортежі явно не вказано вимір, MDX використовує член за замовчуванням цього виміру (як правило, це рівень All), щоб заповнити відсутню інформацію Таким чином, адреса (обсяг продажів) є еквівалентом адреси (все товари, всі роки, обсяг продажів)

Безлічі створюються на основі кортежів Таким чином, безліч {(груша, 2004, кількість замовлень)} складається з одного осередку, в той час як безліч {(яблуко, апельсин)} – з дванадцяти, тобто всіх тих, в яких товаром не є груша Природно, синтаксис MDX кілька більш формалізований, ніж у наведеному прикладі, а куби на практиці є більш складними, проте концепції адресації залишаються незмінними

Структура вимірювання

Кожен вимір є предметною областю, яка може використовуватися для організації результатів запиту MDX У будь-якому вимірі існують ієрархії, в які включені окремі поняття даної предметної області Наприклад, вимір замовників може мати ієрархії по містах, країнах і поштовим індексом, що описує місцезнаходження клієнта Кожна з ієрархій, в свою чергу, має один або кілька рівнів, які містять членів або дані вимірювання Члени вимірювання використовуються для побудови множин, що формують базис запитів MDX

Посилання на вимірювання

Звернення до одного з компонентів вимірювання виконується за допомогою перерахування через точку його родоводу Ось кілька прикладів:

[Customer] – вимірювання Customer [Customer] [Country] – ієрархія Country [Customer] [Country] [Country] – рівень Country [Customer] [Country] [Country] & [Germany] – член Germany

Незважаючи на те що технічно дозволено не укладати кожен з ідентифікаторів у квадратні дужки, безліч імен в кубах містять пробіли та спеціальні символи З цієї причини має сенс взяти за правило укладати в квадратні дужки все ідентифікатори Символ амперсанда (&) перед імям члена вказує на посилання по ключу На кожен член вимірювання можна посилатися як на імя, так і по ключу, хоча рекомендується все ж останній варіант У розглянутому прикладі ключ та імя мали одне і те ж значення З цієї причини посилання [Customer] [Country] [Country] [Germany] вказувала б на той же член вимірювання У той же час інші ієрархії можуть мати більш заплутані ключі Наприклад, посилання [Customer] [Customer] [Customer] & [20755] цілком може бути еквівалентом [Customer] [Customer] [Customer] [Mike White]

На додаток до посилань на окремі члени вимірювання більшість вимірювань мають загальний рівень, який посилається на всіх членів вимірювання За замовчуванням імям цього рівня є [All], однак творець куба міг призначити йому й інше імя Наприклад, загальний рівень у вимірі Customer бази AdventureWorks має імя [All Customers] На загальний рівень можна створити посилання як з вимірювання, так і з ієрархії:

[Customer] [All Customers] – Посилання на загальний рівень з вимірювання [Customer] [Country] [All Customers] – Посилання на загальний рівень з ієрархії

Кортежі і прості безлічі

Як вже говорилося в розділі Адресація в кубі, кортежі створюються шляхом перерахування одного члена з кожної ієрархії також для деяких ієрархій члени можна явно не задавати – в цьому випадку в кортеж буде неявно включений загальний рівень цієї ієрархії Дужки використовуються для групування списку членів кортежу Наприклад, наступний кортеж посилається на всі комірки, що містять обсяги Інтернет-продажів для замовників з Німеччини в розрізі всіх часів, усіх територій тощо:

([Customer][Country][Country]&amp[Germany],

[Measures][Internet Sales Amount])

Якщо деякий простий кортеж визначений тільки з одним членом ієрархії, то дужки можна опустити, тому всіх замовників з Німеччини можна визначити просто як [Customer] [Country] [Country] & [Germany]

Найпростіше побудувати безліч, перераховуючи один або кілька кортежів у фігурних дужках Наприклад, використовуючи прості кортежі без дужок, все безліч німецьких і французьких замовників можна визначити так:

{[Customer][Country][Country] &amp[France],

[Customer][Country][Country]&amp[Germany]}

Базова інструкція select

Прості безлічі дозволяють створити інструкцію SELECT базового виду Запит з наступного прикладу повертає обсяги Інтернет-продажів клієнтам з Г Ерманов та Франції за 2003 і 2004 календарні роки:

SELECT

{[Customer][Country][Country]&amp[France],

[Customer][Country][Country] &amp[Germany]} ON COLUMNS,

{[Date] [Calendar Year] [Calendar Year] &amp[2003] ,

[Date][Calendar Year][Calendar Year] &amp[2004]} ON ROWS FROM [Adventure Works]

WHERE ([Measures][Internet Sales Amount])

Буде отримано наступний результат:

France

Germany

CY 2003

$1026324,97

$1058405,73

CY 2004

$922179,04

$1076890,77

У цьому прикладі безлічі розміщені уздовж двох осей, значення яких стають заголовками рядків і стовпців Пропозиція WHERE обмежує результати запиту тільки тими осередками, в яких містяться обсяги Інтернет-продажів Такий окремий випадок зазвичай називають зрізом, так як він обмежує область визначення запиту всього одним перетином куба Зріз можна уявити собі як визначення внеску в запит деякої ієрархії, яка не є частиною визначення будь-якої осі

Для осі може бути визначено будь-яку кількість рівнів заголовків Для цього в кожен кортеж, який бере участь у побудові осі, потрібно включити більше однієї ієрархії, що не використовує значення за замовчуванням У наступному прикладі створюються два заголовка рядків шляхом перерахування елементів двох ієрархій в кожному рядку кортежу: товарної лінії і типу першопричини продажів

SELECT

{ [Customer] [Country] [Country] &amp[France],

[Customer] [Country] [Country] &amp[Germany]} ON COLUMNS,

{( [Product] [Product Line] [Product Line] &amp[S],

[Sales Reason][Sales Reason Type][Sales Reason Type] &amp[Marketing]), ( [Product] [Product Line] [Product Line] &amp[S],

[Sales Reason][Sales Reason Type][Sales Reason Type] &amp[Promotion]),

( [Product] [Product Line] [Product Line] &amp[M],

[Sales Reason] [Sales Reason Type] [Sales Reason Type] &amp[Marketing]),

([Product] [Product Line] [Product Line] &amp[M],

[Sales Reason][Sales Reason Type][Sales Reason Type] &amp[Promotion])

} ON ROWS FROM [Adventure Works]

WHERE ([Measures][Internet Sales Amount],

[Date][Calendar Year][Calendar Year]£[2004])

Буде отримано наступний результат:

France

Germany

Accessory

Marketing

$962,79

$349,90

Accessory

Promotion

$2241,84

$2959,86

Mountain

Marketing

$189,96

$194,97

Mountain

Promotion

$100209,88

$126368,03

Таке відображення ієрархій на заголовки забезпечує управління геометрією результуючого набору даних, однак породжує обмеження на створення множин уздовж осей – ієрархії, визначені для кортежів в безлічі, повинні бути однаковими у всіх елементах множини У наведеному вище прикладі не допускається, щоб деякі кортежі використовували ієрархію Product Category замість Product Line Невідповідності між кортежами зазвичай викликають появу порожніх заголовків осередків, які MDX не знає, як обробляти

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*