MDX (Multidimensional Expressions)
MDX (Multidimensional Expressions) to język zapytań używany do odczytu i manipulacji danymi w systemach OLAP (Online Analytical Processing). Jego składnia i semantyka są inspirowane SQL, jednak jest zaprojektowany z myślą o pracy z danymi przechowywanymi w strukturach wielowymiarowych, takich jak kostki wymiarowe w Microsoft Analysis Services czy innych platformach hurtowni danych.
Historia
MDX zostało opracowane w latach 90. przez firmę Microsoft jako część projektu SQL Server Analysis Services (SSAS). Pierwsza wersja języka pojawiła się w 1998 roku wraz z wydaniem SQL Server 7.0. Od tego czasu MDX rozwija się równolegle z rozwojem technologii OLAP, wprowadzając nowe funkcje, optymalizacje i rozszerzenia.
Podstawowe pojęcia
- Wymiar (wymiar) – struktura organizująca dane w hieryarchiczne poziomy (np. czas, produkt, geografia).
- Miara (miara) – ilościowa wartość podlegająca agregacji (np. sprzedaż, koszt, liczba zamówień).
- Kostka (kostka) – zbiór wymiarów i miar tworzący wielowymiarową strukturę danych.
- Set – zbiór elementów (np. członków wymiaru) wykorzystywany w wyrażeniach.
- Tuple – jednokrotny zestaw członków wymiarów określający konkretne położenie w kostce.
Składnia języka
MDX składa się z kilku podstawowych elementów:
SELECT
Instrukcja SELECT określa dwie główne osie zapytania:
- Axes – najczęściej
ROWS(wiersze) iCOLUMNS(kolumny). - FROM – nazwa kostki, z której pobierane są dane.
SELECT
{[Measures].[Sprzedaż]} ON COLUMNS,
{[Czas].[Rok].Members} ON ROWS
FROM [KostkaSprzedaży]
WHERE (kontekst filtrujący)
Klauzula WHERE ogranicza zestaw danych do określonych członków wymiarów:
SELECT
{[Measures].[Zysk]} ON COLUMNS
FROM [KostkaFinansowa]
WHERE ([Produkt].[Kategoria].&[Elektronika])
Funkcje i operatory
MDX udostępnia bogaty zestaw funkcji, podzielonych na grupy:
- Funkcje agregujące – SUM, AVG, MIN, MAX, COUNT.
- Funkcje czasowe –
ParallelPeriod,Lag,Lead,PeriodstoDate. - Funkcje hierarchiczne –
Descendants,Ancestors,Children. - Funkcje setowe –
Union,Intersect,Except,Filter. - Operatory logiczne –
AND,OR,NOT.
Przykładowe zapytania
1. Suma sprzedaży w podziale na kwartały
SELECT
{[Measures].[Sprzedaż]} ON COLUMNS,
{[Czas].[Kwartal].Members} ON ROWS
FROM [KostkaSprzedaży]
2. Porównanie sprzedaży rok do roku (YoY)
WITH MEMBER [Measures].[Sprzedaż_RokPoprzedni] AS
([Measures].[Sprzedaż], ParallelPeriod([Czas].[Rok], 1, [Czas].CurrentMember))
SELECT
{[Measures].[Sprzedaż], [Measures].[Sprzedaż_RokPoprzedni]} ON COLUMNS,
{[Czas].[Miesiąc].Members} ON ROWS
FROM [KostkaSprzedaży]
3. Top‑10 produktów według przychodu
SELECT
{[Measures].[Przychód]} ON COLUMNS,
TopCount([Produkt].[Produkt].Members, 10, [Measures].[Przychód]) ON ROWS
FROM [KostkaProdukty]
Zastosowanie i narzędzia
MDX jest wykorzystywane w różnorodnych aplikacjach analitycznych, m.in.:
- Power Pivot i Power BI (warstwa modelu danych).
- Raporty w SQL Server Reporting Services (SSRS).
- Analizy w Microsoft Excel (karty przestawne oparte na OLAP).
- Systemy BI innych dostawców, które implementują interfejsy kompatybilne z MDX (np. SAP BW).
Porównanie z SQL
Choć SQL operuje na tabelach i relacjach, MDX pracuje na kostkach i wymiarach. Najważniejsze różnice to:
| Cecha | SQL | MDX |
|---|---|---|
| Model danych | Relacyjne (tabele) | Wielowymiarowe (kostki) |
| Podstawowa jednostka | Wiersz | Tuple (zestaw członków wymiarów) |
| Agregacje | GROUP BY | Funkcje agregujące w kontekście wymiarów |
| Słowo kluczowe SELECT | Określa kolumny | Określa osie (COLUMNS, ROWS) |
| Filtrowanie | WHERE | WHERE (kontekst), slicery, FILTER() |
Wersje i kompatybilność
MDX jest standardem de facto, jednak nie istnieje formalny, jednorodny standard ISO. Różne platformy mogą wprowadzać własne rozszerzenia, np.:
- Microsoft Analysis Services – najbardziej rozbudowana implementacja.
- SAP BW – część specyficznych funkcji i typów danych.
- Power BI – wspiera podzbiór MDX w modelach tabular.
Problemy i ograniczenia
- Składnia MDX może być trudna do opanowania dla osób przyzwyczajonych do SQL.
- Optymalizacja zapytań wymaga znajomości architektury kostki i sposobu przechowywania agregatów.
- Niektóre funkcje są zależne od konkretnego silnika (np.
StrToMemberw SSAS).
Przyszłość
Wraz z rosnącym znaczeniem modeli tabularnych i języka DAX (Data Analysis Expressions), MDX traci na popularności w nowych projektach, ale pozostaje kluczowym narzędziem w istniejących środowiskach OLAP opartych na kostkach. Wsparcie dla MDX jest przewidywane w kolejnych wersjach SQL Server oraz w platformie Azure Analysis Services.
Bibliografia i źródła
- „Multidimensional Expressions (MDX) Reference”, dokumentacja Microsoft Analysis Services.
- „MDX Solutions: With Microsoft SQL Server Analysis Services”, Tom Brune, 2002.
- „The MDX Query Language”, Henry Liu, 2004.
Powiązane pojęcia
OLAP | SQL | hurtownia danych | Microsoft Analysis Services | DAX | Power BI