29. září 2015

Analysis services – výběr vhodného typu modelu

Do SQL Serveru 2008 byla volba jednoduchá, Analysis services podporovaly pouze model multidimenzionální a nebylo moc z čeho vybírat. Časem se to ale začalo komplikovat, prvně přišel PowerPivot poté Tabular a jak to tak bývá, čím víc možností, tím těžší výběr. Klienti a účastníci kurzů se mě často ptají, potažmo i historicky ptali v dobách začátků PowerPivot. Je PowerPivot lepší než SSAS? To teď máme zrušit staré multidimenzionální modely a přebouchat veškerou logiku do PowerPivotu? A obdobné dotazy dostávám s tabularem. Má cenu předělávat stávající multidimenzionální řešení do tabularu? Nejen na tyto dotazy by měl odpovědět tento článek.
Průřez typy
Multidimenzionální model
Dostupnost – dostupný od verze SQL Serveru 2005 v té podobě v jaké jej vidíme dnes v edici standard a vyšších
Historicky vzniknul v době, kdy ještě nebyla tak dostupná operační paměť, tudíž se hledaly způsoby jak efektivněji uložit data na disku. Pro dosažení vysokého výkonu se přišlo s úložištěm MOLAP, do „živých“ dat se dá koukat díky úložišti ROLAP. Coby nejstarší model je nejlépe zdokumentovaný, nejrozšířenější, umí řekl bych 100% funkcí a je to ten ke kterému se srovnává.
Jedinou nevýhodou multidimenzionálního modelu je jeho relativní složitost. Při tvorbě je potřeba nastavit docela dost věcí, aby byl model nastaven „optimálně“. Pro výpočty, dotazování, zabezpečení se používá jazyk MDX. Naučit se MDX si žádá nějaký čas a přece jen pro vývojáře zvyklé pracovat s placatými tabulkami a teorií množin, jedná se o přechod bolestný :) I proto jsem začal psát na blogu MDX tutorial, jehož první díl najdete zde http://www.neoral.cz/2015/05/mdx-tutorial-1-uvod.html
Tudíž jedinou nevýhodou multidimenzionálního modelu je jeho relativní složitost a z toho plynoucí vysoké nároky na vývojáře, aby to bylo udělané dobře, v případě některých kalkulací aby to vůbec bylo udělané :) I když i to se dá vyřešit stylem. Pokud to nevím, tak jim řeknu, že to nejde :)
PowerPivot
PowerPivot poprvé spatřil světlo světa někdy kolem roku 2010 v dobách Excelu 2010 a SQL Server 2008 R2. Jendá se o zjednodušené Analysis services v Excelu, která se dá provozovat i serverově. Jedná se na pozadí také o tabulární model. Funguje to tak, že v Excelu vytvoříte model a o tento se můžete podělit tím, že hotový dokument včetně vizualizací vypublikujete do dokumentové knihovny SharePointu. Licenční nároky na serverové řešení jsou z těch vyšších. Budete potřebovat minimálně BI edici SQL Serveru a Sharepoint Enterprise (o zobrazení se starají Excel Services). Alternativou může PowerBI v Office 365
Při tvorbě modelu se data načtou do paměti, kde se nad nimi provádí operace. Pro tvorbu výpočtů se používá jazyk DAX, který je pro tvorbu výpočtů výrazně jednodušší než MDX (zápis vypadá jako Excelový vzorec). Klíčová omezení jsou maximální velikost souboru, který se dá otevřít v prohlížeči tedy 2GB. Tedy Modelem je vlastně Excelový soubor a tento je také jednotkou zabezpečení. Nedají se zde tvořit role kde v rámci jednoho modelu uvidí různí uživatelé různá data jako v případě serverových modelů. Dále je zde problém s kompatibilitou verzí. Model, který vytvoříte v Excelu 2010 vás po otevření v Excelu 2013 vyzve k upgradu. A zpětně ve 2010 již model nemůžete editovat. Stejně tak člověk bez nainstalovaného doplňku nemůže data z modelu číst. PowerPivot se dá načíst do Visual studia jako tabulární projekt a tímto závislost na nutnosti mít nainstalovaný doplněk odpadá, dají se řešit role, partitioning... Funkční omezení jsou shodná s Tabularem
Tabulární model
SQL Server 2012 přišel s možností nainstalovat tabulární instanci analysis services. Je postaven na stejných principech, jako PowerPivot, ale nepotřebujete k němu SharePoint a jedná se o serverové řešení bližší multidimenzionálnímu modelu. Ve zkratce Tabular kombinuje jednoduchost PowerPivotu a výhody serverového modelu. Pro rychlost dat načítá data do paměti (v surové podobě jak jsou ve zdroji, neaplikují se zde žádné agregace). Typ úložiště může být buď in memory, nebo direct query,případně kombinace obojího. Tabular umí cca 80% funkcí, kde funkční omezení jsou následující.
·        podpora pouze vazby 1:N, dá se ohnout aby dělal vazbu 1:1 pouze s jednosměrnou filtrací.
·        parent child hierarchie sice jsou k dispozici, ale pouze přes DAX funkce. Kde musíte pro kažodu úroveň zvlášť napsat vzorec. Tedy pro 50 úrovní by se jednalo o 50 vzorců, které byste museli napsat. Oproti tomu Multidimenzionální model si je schopen rekurzivně načíst všechny úrovně sám
·        hůře se zde pracuje s týdenní časovou logikou, což je dáno způsobem, jakým se definuje kalendář (americký vs evropský týden)
·        nedají se vytvářet počítané členy v dimenzích (chybí mi časové kalkulace v dimenzi, které fungují na všechny měřítka)
·        nedají se zde nastavovat defaultní membery, uživatel by mohl omylem zagregovat i to, co nemá
·        nejde provádět Writeback
·        překlady dat se musí provádět přes DAX
·        KPI indikátory nemají možnost definovat trendové šipky, jestli se jedná o nárůst, nebo pokles
Shrnutí, porovnání, scénáře
Multideminzionální model umí všechno, Tabular s PowerPivotem ne. První stěžejní otázka zda má smysl předělávat stávající fukční vyhovující řešení z multidimenzionálu do PowerPivotu/Tabularu? Nedává to absolutně žádný smysl. Nepřinese to nic navíc, naopak můžeme přijít o některé klíčové funkce a můžete dokonce pohořet s výkonem. Tabular drží data 1:1 vůči zdroji v paměti a teprve pak nad nimi provádí výpočty.
Nad PowerPivotem a Tabularem má smysl uvažovat v případě nového vývoje. Po PowerPivotu sahám v situacích, kdy potřebuji model, který má v rukou uživatel a je schopen si ho sám spravovat, případně aktualizovat data. Přece jen na co dělat pro tří členný tým serverový model. A kdyby řešení mělo přerůst z lokálního řešení na serverové, můžu jej jednoduše zmigrovat do tabularu. PowerPivot taky s oblibou používám na prototypování, abych s klíčovým uživatelem probral funkčnost. Přece jen vývoj jde rychle a čím dřív dostanu zpětnou vazbu tím lépe. Problém je, že dokud uživatel nevidí, nedá dobrou zpětnou vazbu.
Pokud chci serverové řešení kde bude kontrola na straně IT/BI týmu. Rozhodovací strom vypadá zhruba následovně (ne nutně v daném pořadí)
Jakou má klient verzi a edici SQL Serveru. Pokud se jedná starší 2012 a/nebo standard edici, je „odsouzen“ k multidimenzionálnímu modelu. Což nemusí být nutně špatně
Nebude mi chybět některá z vyjmenovaných funkcí? Zejména defaulty, many to many vazby, práce s týdnem, parent child hierarchie?
Velikost dat, jsem schopen nacpat celý model do paměti a když to udělám, bude to dost rychlé? Multidimenzionální model přestože bere data z disku může být rychlejší, protože data předagregovává. Z 10 milionů řádků pro jeden den se stane jedna buňka. Sečíst 365 buněk za rok z disku může být rychlejší, než udělat stejnou operaci na 3,65 miliardami řádků v paměti. Tabulární instance se bude taky delší dobu restartovat, musí data načíst z disku do paměti.
Pokud jsem došel až sem, můžu si zvolit v čem to budu dělat raději :)
Závěr

Tabulární model a PowerPivot multidimenzionální model nenahrazují. Mohou být vhodnou alternativou v závislosti na aplikaci, kterou řešíte. Každopádně jsou jednodušší na naučení se. Nicméně pokud jste se již prokousali „multidimenzionálním peklem a MDX jazykem“ můžete u něj klidně zůstat. Jste-li SSAS nepoznamenaní, tabular může být alternativa. Alternativa, která má však své hranice o kterých je dobré vědět. Osobně v řešeních kde potřebuji vědět, že je neprůstřelné sahám zpravidla po multidimenzionálním modelu, pro „aplikační“ lokální modely po PowerPivotu.

Žádné komentáře:

Okomentovat