Jazyk MDX alebo DAX? Ako si vybrať?

Tabulárne modely, OLAP kocky, PowerPivot aj Power BI podporujú na dotazovanie sa jazyky MDX alebo DAX. Pravidelní čitatelia tohto blogu sú už oboznámení s DAXom. Veľakrát sú ale zaskočení, keď k nim príde niekto, kto ovláda jazyk MDX, alebo ho chce používať voči dátovému modelu, a spýta sa, že čo je lepšie. MDX alebo DAX?

Ak by som Vám mal dať všeobecnú odpoveď s ohľadom na vývoj do budúcnosti, odpoveď by bola jednoznačne DAX. A to nehovorím len preto, že je tento blog o PowerPivote a Power BI. Jazyk MDX ovládam omnoho dlhšie, cca. od roku 2003. A ak Vám ide len o to, ako nejak zlepiť výsledok, tak je viac-menej jedno, či na to použijete MDX alebo DAX. Napriek tomu aj tak odporúčam vo všeobecnosti DAX. Táto odpoveď však nemusí byť vhodná na Váš konkrétny prípad. Ideme si to teda rozobrať na drobné cez klasické výhody, nevýhody a odporúčania.

Jazyk DAX

Výhody

  • Jednoduchý na naučenie sa
  • Jednoduchá syntax
  • Umožňuje ľubovoľne kombinovať dáta, aj počas výpočtu
  • Všetky tabuľky sú rovnocenné, neexistujú žiadne dimenzie a fakty
  • S dátami pracuje ako s tabuľkami – a tým lepšie reflektuje rozmýšľanie užívateľa
  • Aktívne vyvíjaný Microsoftom, každoročne pribudnú desiatky nových funkcií
  • Je oveľa rýchlejší ako MDX z výpočtového hľadiska – umožňuje lepšiu paralelizáciu výpočtov aj bez partitioningu dát
  • Portabilné vzorce, umožňujúce jednoduchú prenositeľnosť na iné dátové modely bez alebo takmer bez úprav
  • Vysoká škálovateľnosť celého riešenia
  • Vznikol zjednodušením jazyka MDX – čiže ak ho už viete, tak DAX sa naučíte veľmi rýchlo

Nevýhody

  • Neumožňuje pridávať si vlastné funkcie
  • Nemá nič na prácu s hierarchiami – obchádza sa to cez filtrovacie funkcie a merítka
  • Relatívne mladý jazyk, ešte len začína vyzierať
  • Podporujú ho väčšinou len najnovšie verzie analyticko-reportingových nástrojov
  • Vie ho použiť až Excel 2010, a pri novších verziách je pre tvorbu merítok v PowerPivote potrebná vyššia verzia Excelu
  • Výsledky sú cacheované len pre podsystém storage enginu, ale nie pre formula engine
  • Použiteľný iba v technológiách od Microsoftu

Jazyk MDX

Výhody

  • Vedia s ním pracovať všetky BI reportingové systémy
  • Dlhodobý štandard na pokročilú analýzu dimenzionálnych dát
  • Funguje aj na OLAP kockách od iných výrobcov ako Microsoft
  • Umožňuje ľahko ohýbať výsledné štatistiky (morálku teraz bokom, ide o technologické možnosti)
  • Je rozšíriteľný o vlastné funkcie pomocou DLL knižníc
  • Používa ho Excel od verzie 2003
  • Dajú sa v ňom naoko „dolepiť“ merítka do kontingenčiek (nielen) v Exceli bez toho, aby ste museli modifikovať dátový model
  • Výsledky sú cacheované na úrovni storage enginu aj formula enginu – čiže komplet celý výsledok

Nevýhody

  • Komplikovaná syntax
  • Vyžaduje dlhé sústredené učenie – účastníci môjho kurzu MDX by Vám vedeli rozprávať o kofeínových sessions 🙂
  • Microsoft ho už nevyvíja od roku 2008 (!)
  • Silno závislý na dimenzionálnej schéme – pri potrebe analýzy dát v dimenziách je nutné k nim pristupovať ako k faktom (iná syntax), a v prípade OLAP kociek je potrebné spraviť hromadu ďalších zmien, aby to ako-tak išlo – napr. duplikovať dimenzie do faktových tabuliek a vyrobiť hromadu merítok / measures
  • Pri dotazovaní sa na neexistujúce atribúty alebo členy nevypíše chybu, a vráti prázdnu hodnotu, čo robí komplikácie pri ladení a niektorých reportoch
  • Oficiálne sa dá použiť pri tabulárnych modeloch, PowerPivote a Power BI iba na dotazovanie sa (aj keď neoficiálne ide použiť aj na tvorbu merítok po troche hackovania)
  • Obmedzená škálovateľnosť kvôli spätosti vzorcov so štruktúrou OLAP kocky

Odporúčania, a ako si vybrať

Aby som to zhrnul, tak ak si odmyslíme dôvody ako prehnaný masochizmus, tak do jazyku MDX by som v dnešnej dobe išiel už iba vtedy, ak by mi v použití DAXu bránili technologické obmedzenia v mojom konkrétnom BI systéme. Napr. ak by som pracoval na Oracle BI Serveri 11, ktorý sa vie dotazovať na Analysis Services len pomocou MDX. Alebo, ak by som sa pripájal na Analysis Services nejakým starším OLE DB ovládačom, ktorý má problém s parametrickými DAX dotazmi. Alebo, ak by som veľmi často volal veľmi komplikované výpočty, ktoré už neviem zoptimalizovať v DAXe na rýchlejšie (aj keď, to sa mi už pár rokov nestalo – keď sa chce, tak ide spraviť všetko), a chcem využiť kompletné cacheovanie výsledkov. Pretože tu je výsledok dilemy MDX alebo DAX jasný.

Vo všetkých ostatných prípadoch, aj keď máte na výber MDX alebo DAX, tak silno odporúčam použiť DAX. Je rýchly, moderný, a škálovateľný, a nevyžaduje toľko mozgovej kapacity ako MDX. Vďaka jeho jednoduchosti má potenciál pre to, aby sa ho naučilo oveľa širšie publikum ako MDX, a z pohľadu firmy tým pádom zvyšuje šancu na kontinuitu činností, ak jeden kolega má odovzdať dátový model ďalšiemu kolegovi. A je veľmi jednoduchý a veľmi rýchly na implementáciu a následnú údržbu a rozširovanie.

Tu ma trochu mrzí zatracovanie DAXu zo strany niektorých IT „expertov“ a „autorít“ len kvôli dogme, že je jednoduchší a tým pádom musí byť horší. A keďže je to len dogma, tak Vám je určite jasné, že to s logikou nemá nič spoločné. Niektorí ľudia proste len radi komplikujú veci (alebo, ako hovorí jeden môj známy – každý máme nejakú úchylku). A to aj napriek tomu, že z povahy vecí vyplýva, že čím je niečo jednoduchšie, tým sa to dá viac kombinovať so samým sebou aj s ostatnými vecami – a to v konečnom dôsledku exponenciálne rozširuje Vaše možnosti.

Mám za sebou hromadu projektov za posledných 15 rokov, u nás aj v zahraničí, na viacerých technológiách, a na objemoch dát, o ktorých tu na Slovensku môžeme tak 10-20 rokov ešte len snívať. Takže tvrdenia hore uvedených „expertov“ beriem s nadhľadom, a snažím sa radšej robiť osvetu. A aj to bol dôvod, prečo som napísal tento článok. Aby som zbúral ďalší z mýtov, ktoré kolujú vo veľkom na miestnej IT scéne, či už nevedomosti, alebo z čistého amatérizmu. Pretože tomu sa treba v IT vo veľkom vyhýbať.