31. října 2015

MS Reporting – vize a směr

Už je to tady. Microsoft 29.10.2015 zveřejnil svou vizi a budoucí směr vývoje v oblasti reportingu. To že se tak stalo zrovna v době probíhajícího PASS Summitu a vydání SQL Server 2016 CTP 3.0 nebude náhoda. Článek v originále si můžete přečíst na blogu SQL Server teamu zde http://blogs.technet.com/b/dataplatforminsider/archive/2015/10/29/microsoft-business-intelligence-our-reporting-roadmap.aspx
Otázky jako: Jsou Reporting services odepsaný produkt? Má být SSRS nahrazeno PowerBI? Dočkáme se PowerBI v on-premises řešení přímo od Microsoftu? To jsou otázky, které napadaly nejednoho z nás. Něco se dalo vyčíst mezi řádky, ale teď tu máme oficiální stanovisko od lidí z MS SQL Server teamu.
Cíl
Cílem Microsoftu je “dát moc nad daty” každému byznysu, či člověku na této planetě. Pro splnění tohoto cíle je potřeba vyvinout platformu, která může pracovat s daty odkudkoliv, ať se jedná o on-premises zdroje, data v cloudu, nebo data z IoT (Internet of Things)
Cesta
Sjednocení  a ustálení typů reportů. MS SQL Server team rozděluje reporty na 4 typy
Stránkovací reporty na web, k tisku a automatizaci
Aneb SSRS (Reporting services). Tento typ reportů je v byznysu používán přes deset let a má své nenahraditelné místo. Microsoft s tímto typem reportů počítá i do budoucna a vylepšení ve verzi 2016 se dočkáme. Co tedy mají společného Punk a SSRS? No přece:  “SSRS is not dead” :)
Interaktivní reporty
Vytvořené přes PowerBI. Jsou novou generací PowerView (pro ty z nás, které napadlo že PowerView je mrtvý produkt). To že s PowerBI je potřeba počítat je zřejmé. Stačí se podívat jak se produkt posunul od verze května 2015 (první ostrá verze) do dnes. 44 nových funkcí v aktualizaci Září 2015 mluví za mnohé :)
Mobilní BI
postavené na Datazenu. Akvizice společnosti Datazen nebyla náhoda, MS mobilní BI chce na všechny mobilní OS a počítá s ním.
Analytické reporty a grafy
Aneb reporty potavené na Excelu a Excelovém BI. Excel je jedna z nejpoužívanějších Business aplikací celosvětově. Toho si je MS také vědom a počítá s tím ve svých plánech. S Excelovým BI se dále počítá.
Na jaké novinky se můžeme těšit?
Power BI on premises
Publikace Power BI reportů do on-premises prostředí. Otázka, kterou jsem si v posledních měsících kladl nejen já, bude možno publikovat PowerBI reporty vnitropodnikově bez třetí strany? (Pyramid server). Ano bude to možné.
Sjednocený přístup k reportům
V rámci SSRS portálu půjde publikovat a prohlížet jak reporty SSRS, tak reporty z Datazenu. Stejně tak půjde na reporty koukat přes jednu mobilní aplikaci (představena na PASS Summitu).
Závěr

Oznámením společnosti Microsoft byly zodpovězeny mnohé otázky. SSRS nejsou mrtvé a čeká nás produkt vše v jednom. SSRS reporty, Datazen i PowerBI. Některé otázky však zodpovězeny stále nebyly. MS oznámil se kterými technologiemi počítá, znamená to tedy, že s ostatními ostatními reportingovými nástroji se nepočítá? (PerformancePoint). Možností je několik buďto nepočítá, nebo je PerformancePoint součástí jiné road mapy. Článek se celkově  nevěnoval integraci se SharePointem (Excelové BI, PowerBI, Reporting services). Nuže já instaluji CTP 3.0 a Vy? :)

26. října 2015

Power BI vlastní vizualizace

Na myšlenku vlastních vizualizací mě v minulém týdnu přivedla potřeba vizualizovat návaznosti úkolů. Napříkla které úkoly jsou závislé na úkolu „A“ a na čem všem je závislý úkol „A“. Vzhledem k tomu, že na to Power BI desktop v základu doteď nemá komponenty, vzpomněl jsem si na soutěž která kolem Power BI probíhala v září. Šlo o to, kdo naprogramuje nejlepší vizualizaci a soutěžilo se o pěkných 5000 $ http://community.powerbi.com/t5/Best-Visual-Contest/con-p/best_visual_contest
Říjnová aktualizace Desktopu přinesla možnost přidávat vlastní vizualizace. A to ať to co vytvořila komunita, nebo úplně vlastní tvorbu.
Tvorba MS a komunity
Rozcestník k vlastním vizualizacím najdete zde: https://app.powerbi.com/visuals/submit V sekci https://app.powerbi.com/visuals najdete možnost stáhnout si soubor s koncovkou „.pbiviz“ V Power BI Desktopu se vedle „nativních“ vizualizací zobrazuje tlačítko s trojtečkou. Klikneme, dáme import, najdeme .pbiviz soubor a tento se nám přidá jako nová vizualizace.
Momentálně je v Galerii k dispozici 19 nových vizualizací, které nejsou „ve standardu“. Některé možná méně použitelné (rybičky v akváriu plavající ze strany na stranu si úplně v produkci zatím představit nedokáži). Některé použitelné více. Například chord chart, bullet chart, sunburst, nebo v soutěži vítězný Synoptic Panel od SQLBI.
Cílem tohoto článku není popsat šechny tyto grafické komponenty, ale informovat, že je možné přidat do PowerBI další vizualizační prvky.
Pokud byste se rozhodli, že si chcete vlastní vizualizaci sami naprogramovat i to je možno :) Jak začít se dozvíte na GitHubu https://github.com/Microsoft/PowerBI-visuals kde je možné se podívat na zdrojové kódy vizualizací ze soutěže.
Pro popis jak přidat vlastní vizualizaci z GitHubu si beru Node Link Graph (vypadal, že by se mohl hodit pro návaznosti úloh). Hotový skript s koncovkou „ts“ stačí nakopírovat do schránky (já vzal ten svůj odtud http://community.powerbi.com/t5/Best-Visual-Contest/Force-direct-node-link-graph-for-adjacency-matrix/cns-p/7654 /popis komponenty https://github.com/jianingyan/PowerBI-visuals/blob/master/src/Clients/Visuals/visuals/graph.ts /zdroják)
V PowerBI portálu potom stačí kliknout na ikonku ozubeného kolečka, zde najít dev tools. Do okna vlevo nahoře můžete nahradit obsah okna vlastním skriptem, dát compile and run a poté exportovat do pbiviz :) Po kompilaci a spuštění je vizualizace dostupná v portálu, po exportu do pbiviz ji můžete naimportovat do PowerBI desktopu jako v případě vizualizací z galerie.
Screenshot pár vlastních vizualizací přikládám níže včetně návazností v pravém dolním rohu

Závěr

Možnost rozšířit si funkčnost Power BI desktopu o vlastní grafické prvky je super. Na své si mohou přijít jak programátoři, tak uživatelé. Jen tak dál :)

21. října 2015

Záznam přednášky z MS Fest - PowerBI

11.10.2015 proběhla v Brně konference MS Fest, kde jsem měl možnost přednášet na téma PowerBI. Už jsem sem dával slajdy z přednášky v minulém blogu (http://www.neoral.cz/2015/10/ms-fest-2015.html)
Už je k dispozici i video na stránkách Wugu zde:
http://www.wug.cz/zaznamy/284-MS-Fest-2015-Brno-PowerBI
Na videu Vás čeká zejména demo na téma zpracování dat přes PowerBI s použitím Google Analytics konektoru nad čím jiným, než nad vlastními daty z blogu www.neoral.cz :)

18. října 2015

MDX tutorial 8 – Navigace v hierarchii 1. část

V minulém dílu tutorialu jsme probarali agregační funkce (http://www.neoral.cz/2015/10/mdx-tutorial-7-agregacni-funkce.html) jako nezbytnou prerekvizitu k tomu, co přichází dnes. Postupem času jsme se prokousali k akčnímu tématu a tím je navigace v hierarchii. Jedná se o skupinu funkcí, která bych řekl má v OLAP kostkách snad nejšiřší použití.
Všechno začíná currentmemberem. Ten je naším středem vesmíru od kterého navigace bude začínat, okolo currentmembera jsou další členové hierarchie v různých příbuzenských vazbách. Většina funkcí dává smysl hlavně ve víceúrovňových hierarchiích.
Nad currentmemberem je jeho parent. Currentmember má pouze jednoho parenta. Potomci currentmembera jsou children. Sourozenci siblings.
Navigační funkce se dají obecně rozdělit na dva typy, funkce vracející member (používají se jako souřadnice v tuplu, nebo funkce vracející množinu prvků. Množinové navigační funkce zpravidla kombinujeme s funkcemi agregačními probranými v dílu číslo 7.
Seznam funkcí pro přístup k nejbližším příbuzným. V kulatých závorkách je napsáno, zda funkce vrací member, nebo set.
Funkce
Popis
member.parent
nadřízený člen (member)
member.children
veškeré potomstvo o úroveň níž (set)
member.firstChild
první potomek (member)
member.lastchild
poslední potomek (member)
Siblings
všichni sourozenci pod stejným parentem (set)
member.firstsibling
první sourozenec (member)
member.lastsibling
poslední sourozenec (member)
Parent
Funkce parent nás odkáže v hierarchii na nadřízený prvek. Použítím by mohlo být například procenta v rámci nadřízené skupiny. Na začátek dotaz, ze kterého budu vycházet.
WITH MEMBER x AS
       [Dim Product].[Category-Subcategory-Model-Product].currentmember
       .name
SELECT
       {[Measures].[Reseller Sales]
       ,x}
ON COLUMNS,
nonempty(
       {[Dim Product].[Category-Subcategory-Model-Product].members}
       ,[Measures].[Reseller Sales]
       )
ON ROWS
FROM [MDX Tutorial]
Dotaz vrací prvek z hierarchie category-subcategory-model-product, jeho prodeje a ve sloupci x odkaz na něj
Odkaz na nadřízený prvek v hierarchii
WITH MEMBER x AS
       [Dim Product].[Category-Subcategory-Model-Product].currentmember.parent
       .name
SELECT
       {[Measures].[Reseller Sales]
       ,x}
ON COLUMNS,
nonempty(
       {[Dim Product].[Category-Subcategory-Model-Product].members}
       ,[Measures].[Reseller Sales]
       )
ON ROWS
FROM [MDX Tutorial]

Prodeje nadřízeného prvku
WITH MEMBER x AS
       (
       [Dim Product].[Category-Subcategory-Model-Product].currentmember.parent
       ,[Measures].[Reseller Sales])
SELECT
       {[Measures].[Reseller Sales]
       ,x}
ON COLUMNS,
nonempty(
       {[Dim Product].[Category-Subcategory-Model-Product].members}
       ,[Measures].[Reseller Sales]
       )
ON ROWS
FROM [MDX Tutorial]
Procenta nadřízeného prvku
WITH MEMBER x AS
DIVIDE(
       [Measures].[Reseller Sales],
       (
       [Dim Product].[Category-Subcategory-Model-Product].currentmember.parent
       ,[Measures].[Reseller Sales])
       )
,format_string="percent"
SELECT
       {[Measures].[Reseller Sales]
       ,x}
ON COLUMNS,
nonempty(
       {[Dim Product].[Category-Subcategory-Model-Product].members}
       ,[Measures].[Reseller Sales]
       )
ON ROWS
FROM [MDX Tutorial]

Children
Setová funkce children vrátí veškeřé podřízené prvky z hierarchie a je použitelná například v kombinaci s funkcí avg pro výpočet “průměru v dané skupině” Pokud bychom chtěli porovnávat akutální prvek s průměrem prvků na stejné úrovní, použili bychom spíš funkci “siblings”, což je to stejné jako “parent.children”, případně funkcí “siblings”. Obecně pro práci s navigačními funkcemi pro ladící účely doporučuji funkci settostr, která převede množinu na řetězec.
WITH MEMBER x AS
       settostr(
       [Dim Product].[Category-Subcategory-Model-Product].currentmember.children
       )
SELECT
       {[Measures].[Reseller Sales]
       ,x}
ON COLUMNS,
nonempty(
       {[Dim Product].[Category-Subcategory-Model-Product].members}
       ,[Measures].[Reseller Sales]
       )
ON ROWS
FROM [MDX Tutorial]

Po odladění můžeme spočítat průměr v dané skupině
WITH MEMBER x AS
       avg([Dim Product].[Category-Subcategory-Model-Product].currentmember.children
       ,[Measures].[Reseller Sales]
       )
SELECT
       {[Measures].[Reseller Sales]
       ,x}
ON COLUMNS,
nonempty(
       {[Dim Product].[Category-Subcategory-Model-Product].members}
       ,[Measures].[Reseller Sales]
       )
ON ROWS
FROM [MDX Tutorial]
Ostatní funkce by byly použitelné hlavně, ale nejen v časových souvislostech. Dotaz, ze kterého budu vycházet je následující
WITH MEMBER x AS
       "sem napište výraz"
SELECT
       {x}
ON COLUMNS,
       [Dim Date].[YQMD].[Date].&[2007-10-16T00:00:00]
ON ROWS
FROM [MDX Tutorial]
Začátek a konec měsíce
WITH MEMBER zacatek AS
       [Dim Date].[YQMD].currentmember.firstsibling.name
MEMBER konec AS
       [Dim Date].[YQMD].currentmember.lastsibling.name
SELECT
       { zacatek,
konec }
ON COLUMNS,
       [Dim Date].[YQMD].[Date].&[2007-10-16T00:00:00]
ON ROWS
FROM [MDX Tutorial]
Začátek roku a kumulovaná suma prodejů od začátku roku
WITH MEMBER zacatek AS
       [Dim Date].[YQMD].currentmember.parent.parent.parent.firstchild.firstchild.firstchild.name
MEMBER sumaodzacatku AS
       SUM
       (
       [Dim Date].[YQMD].currentmember.parent.parent.parent.firstchild.firstchild.firstchild:
       [Dim Date].[YQMD].currentmember
       ,[Measures].[Reseller Sales]
       )
SELECT
       { [Measures].[Reseller Sales]
       ,zacatek
       ,sumaodzacatku }
ON COLUMNS,
       [Dim Date].[YQMD].[Date].&[2007-10-16T00:00:00]
ON ROWS
FROM [MDX Tutorial]

Začátek roku i kumulovaná suma by se daly získat i jednoduššeji, ale o tom opět někdy potom :)
Závěr

Navigace v hierarchiích multidimenzionálních OLAP kostek je jedním z nejdůležitějších principů MDX jazyka. Syntaxe není složitá, vše je jen o tom, uvědomit si, kde se v hierarchii nacházíte, kam se chcete dostat a jestli funkce vrací member/set. I většina časových výpočtů se dá realizovat právě přes navigační funkce. Navigačních funkcí je hodně a proto s nimi budeme pokračovat i v dalším díle tutorialu.

12. října 2015

MS Fest 2015

Chtěl bych poděkovat všem, kdo přišli na moji včerejší přednášku na MS Festu 2015. Nevím jak ostatní, ale já jsem si přednášu užil :) Přikládám link na prezentaci, kterou jsem včera promítal se zdroji. Budu se těšit na další ročník a na další konference :)
Link s prezentací
https://drive.google.com/file/d/0B9ZohZ1CALKZVHQ1UU5rdWtwcmM/view?usp=sharing
Až bude dostupné video se záznamem přednášky, přidám také sem

Power BI konektory na „On Premise“ zdroje a zabezpečení dat

PowerBI jako nástroj na hraní je super, to už jsem vás snad přesvědčil v předchozích článcích. Je PowerBI dobré i na práci? To chce sadu otázek a odpovědí, abychom to byli schopni vyhodnotit
Časté otázky zní:
Otázka: Kam můžu reporty nasadit?
Odpověď: Aktuálně PowerBI cloudová služba, případně Pyramid server. Pyramid server asi většina z nás nemá (zatím nemám ani osobní zkušenost, třeba výhledově). Možná tedy většina z nás v prvé fázi sáhne po cloudové službě. S tím ale souvisí
Otázka: Jak zabezpečím data? Co uvidí různí uživatelé ve stejném reportu?
Otázka: Jak udržím data aktuální? Budu muset data aktualizovat, abych viděl aktuální stav dat tak, jak jsou v databázi?
Na tyto otázky by měl odpovědět právě tento článek.
Propojení světů
Pokud máme data „u nás“ (on premise) a reporty „u nich“ (v cloudu), musíme tyto dva světy nějak propojit. K tomuto v současné době Microsoft nabízí dva typy konektorů, které souvisí jak s modelem zabezpečení, tak s aktualizacemi dat.
Analysis services konektor
Jak název napovídá, jedná se o konektor na Analytické služby SQL Serveru. Je potřeba jej nainstalovat na serveru, kde běží Tabulární instance Analysis Services. Konektor v současné době funguje právě POUZE proti Tabulární instanci SSAS. Jeho základní výhodou je, že umožňuje živé připojení do dat. Konektor je schopen rozpoznat, kdo sedí na druhé straně a kouká na data přes PowerBI portál. Tedy dá se řídit práva k datům na straně databáze rolemi. Tento způsob zabezpečení funguje pouze v tomto režimu s SSAS konektorem. Pokud váš Tabular běží v režimu DirectQuery nemusíte ani data aktualizovat. Jakmile se změní v databázi, když kliknete na refresh u reportu, report odráží aktuální stav dat. Dashboard ne, dashboardy využívají 15 minutovou cache. Pokud byste využívali tabular s InMemory úložištěm, stačí aktualizovat data v tomto tabularu na straně databáze, aby se to promítalo do reportu. Server na kterém je konektor nainstalovaný musí být ve stejné doméně, jako váš účet přes který se přihlašujete do PowerBI.com portálu. Konektor nefunguje s loginy „onmicrosoft.com“.
Konektoru se dopodrobna věnuje článek v angličtině
Pokud vás zachvátila panika, protože tabular nemáte. Máte jako většina firem nejen v České republice multidimenzionální modely SSAS. Znamená to, že nemůžete dělat reporty přes PowerBI proti vašim multidimenzionálním modelům?
Ne, znamená to pouze, že nemůžete použít „živé připojení“ s aktuálními daty. Pořád můžete používat
Power BI Personal Gateway
Tento konektor je použitelný pro většinu on premise zdrojů včetně SQL Serveru a Analysis services. Jen funguje v jiném režimu. Nainstalujete jej na server, kde máte zdrojová data. Nastavíte účet pod kterým se budou data aktualizovat ze strany PowerBI.com portálu v pravidelných intervalech. S ohledem na zabezpečení tedy uživatelé kterým nasdílím report vidí všichni stejná data v reportu, protože se report plní pod servisním účtem. Nedá se tedy využívat rolí na databázové straně. Power BI Personal Gateway nemůže být nainstalována na stejném serveru jako Analysis Services konektor. Funguje pouze na 64bitovém operačním systému a je potřeba vytvořit pravidla ve Firewallu. Způsob nastavení a různá omezení najdete v angličtině zde
Kompletní seznam zdrojů, pro které Gateway můžete použít najdete zde
Některé datové zdroje jdou aktualizovat dokonce bez Gateway, například Google Analytics
Dynamické, živé dashboardy
Výše popsané techniky umožňují pouze data aktualizovat, nezaktualizují však data v reportu. Pokud byste chtěli, aby se report dynamicky měnil jak se budou měnit data, máte v současné době dvě možnosti, Azure Stream analytics umí výstup vykreslovat v PowerBI, případně se dá PowerBI donutit aplikačně přes Rest API. O tom možná někdy potom.
Závěr

Propojit cloudovou službu s onpremise světem není zase tak těžké, ja by se na první pohled mohlo zdát. Narozdíl od pekla, které jsem zažil s Data management gateway pro PowerBI v O365, byla práce s oběmi konektory výrazně jednodušší a až na drobné problémy hladká. U SSAS konektoru jsem narazil pouze na problém s onmicrosoft doménou. U Personal PowerBI Gateway jsem dokonce na problém nenarazil. Proto se zde v článku také vůbec nezabývám nějakou konfigurací s obrázky krok za krokem. Kdybyste však s konfigurací měli problém, napište komentář pod článek. Nebo mi napište mail.

5. října 2015

MDX tutorial 7 – Agregační funkce

V dnešním díle MDX tutorialu se zaměřím na agregační funkce. Tohle téma je samo o sobě možná méně záživné, ale nezbytnou prerekvizitou pro funkce navigační a časové. A ty záživné rozhodně jsou :) K těm se blížíme a čeká nás velmi brzy aplikované MDX.
Agregační funkce nám nad množinou prvků a volitelně číselným údajem vrátí skalární hodnotu (jedno číslo).
Většina agragačních funkcí má stejnou syntaxi
Funkce(Set, Výraz)
Na začátek dotaz, ze kterého budu ve výkladu vycházet. Nejprve na řádky vypíšu posledních 14 dní, které mají prodeje.
SELECT
       {[Measures].[Internet Sales]}
ON COLUMNS,
tail(/*poslednich 14 dni*/
nonempty(/*množina datumů, která má nějaké prodeje přes internet*/
       {[Dim Date].[Date].[Date]}
       ,[Measures].[Internet Sales]
       )
       ,14
       )
ON ROWS
FROM [MDX Tutorial]
Z řádkové množiny si vytvořím pojmenovaný set „Posledních 14“ a počítaný člen „x“, jehož význam se bude měnit dle použité agregační funkce. Zatím zadávám natvrdo konstantu 1.
WITH SET [Poslednich 14] AS
       tail(/*poslednich 14 dni*/
       nonempty(/*množina datumů, která má nějaké prodeje přes internet*/
       {[Dim Date].[Date].[Date]}
       ,[Measures].[Internet Sales]
       )
       ,14
       )
MEMBER x AS
       1
SELECT
       {x}
ON COLUMNS
FROM [MDX Tutorial]
Nejdřív spočítáme celkovou sumu, abych zde stále neopakoval stejný select, který si můžete přečíst nahoře, budu měnit jen definici počítaného členu.
SUM( «Set»[       , «Numeric Expression»] )
Spočítá sumu číselného výrazu nad množinou
MEMBER x AS
       SUM( [Poslednich 14]
             , [Measures].[Internet Sales]
       )
AVG( «Set»[, «Numeric Expression»] )
Průměr v dané množině (null hodnoty jsou z průměru ignorovány).
MEMBER x AS
       AVG( [Poslednich 14]
             , [Measures].[Internet Sales]
       )
Další funkce, které mají stejnou syntaxi, jen jiný význam jsou
·        MAX – spočítá maximum
·        MIN – spočítá minimum
·        MEDIAN – spočítá hodnotu uprostřed statistického výběru
·        STDEV – směrodatná odchylka
·        VARIANC – rozptyl
Funkce která sice má stejnou syntaxi, ale trošku vybočuje z řady významem je funkce
AGGREGATE( «Set»[, «Numeric Expression»] )
Aggregate je „chameleon“ Počítá nad množinou prvků agragaci, dle nastavení zdrojového měřítka. Pokud má zdrojové měřítko nastavenou sum, počítá sumu, má-li LastNonEmpty, počítá LastNonEmpty, počet pro count atd. Hodí se speciálně u časových kalkulací uložených v dimenzi.
Další kdo vybočuje z řady je funkce Počet
COUNT( «Set»[, EXCLUDEEMPTY | INCLUDEEMPTY] )
Zde není aplikovatelný argument číselný výraz, zato přibyly dva příznaky, zda do počtu chceme zahrnout prázdné, či ne.
A pro přehled poslední Počet unikátních
DISTINCTCOUNT( «Set» )
Závěr:

Agregační funkce jsou nezbytné pro další fungování v rámci funkcí setových, či časových. V dnešním blogu není mnoho příkladů, ale těchto se dočkáte právě v nasledujících dílech o navigaci, případně práci s časem.