14. prosince 2016

Power BI po více než roce v produkci

tak se jmenovala přednáška, kterou jsem nabídnul pro úplně první SQL Saturday konanou na území ČR. Akce se konala 3.12.2016. Nicméně témata bylo nabídnout o dost více vepředu. Dnešní blog bude pro ty, kteří se přednášky nemohli zúčastnit. Ale také bude pro ty, kteří na přednášce byli a zajímá je, jak telenovela pokračuje/dopadla. Dopředu ale musím říct, že telenovely nikdy nekončí, vždy jen pokračují. Jenom sem tam někdo umře na 20 dílů, aby poté ožil. Protože těch 20 dílů, to celé byl jen sen.
Úvod
Když jsem vymýšlel téma na přednášku, několik měsíců dopředu, chtěl jsem téma nadčasové. U technologie jako Power BI vybrat téma, které bude aktuální i za půl roku je docela výzva. Co je však vždy aktuální je vlastní zkušenost. Do takového tématu může člověk dostat cokoliv přes souhrn vlastností, kam se produkt za rok posunul včetně toho, co se líbí/nelíbí. Časování tomu nahrávalo. SQL Saturday týden po Black Friday (pátek po Díkuvzdání, svátek konzumu) – nejkritičtějším dnu v našem retailovém byznysu. Vloni jsem shrnul zkušenosti v článku Power BI – zkušenosti z praktického nasazení zde: http://www.neoral.cz/2015/11/power-bi-zkusenost-z-praktickeho.html
Letos jsme znali svého nepřítele (omezení produktu dopředu). Byli jsme o rok chytřejší a produkt o rok dospělejší. Plán byl udělat to celé lépe na základě zkušeností :)
Drobný úvod z pohledu důležitosti dne pro náš byznys. V průběhu Black Friday se v průběhu jednoho dne prodají několikanásobné objemy v porovnání s dny normálními. Je to v podstatě takový další týden v roce. Uživatelé ze strany byznysu chtějí intradenně sledovat co se děje s prodeji a pokud bude někde nalezen problém, analyzovat detailněji s čím konkrétně problém je, aby se dala hledat příčina a potenciálně řešení. Vymyslím si jeden příklad, abych nastínil modelově situaci. Člověk odpovědný za produktovou kategorii „Bílé zboží“ zjistí, že při meziročním srovnání za ekvivalentní čas prodejů je 2% níž, než loni. Zajímá ho, o kterou obchodní oblast se jedná. Zjišťuje největší problém u ledniček. Cena sama o sobě mnoho nepoví. Koukne na prodané kusy. Vidí, že se jedná o konkrétní značku. Kde se stala chyba? Jedná se o problém s dostupností zboží (málo jsme naskladnili). Máme zboží dost, špatně nastavená cena... Může v průběhu dne změnit cenu a podpořit prodej této problematické značky. Ve zkratce řečeno, intradenní mission critical reporting ve snaze být s daty zpožděný co nejméně a aby mohli reagovat i lidé mimo firmu (na prodejnách). Reporty měly být dostupné odkudkoliv.
Co jsme měli loni
Power BI dashboard postavený metodou využívající import dat na úroveň produktu Merchandise area (velké televize, malé televize, ledničky, sušičky, ...). Aktualizace probíhala přes personal gateway. Musel jsem duplikovat některé grafy (nemožnost drillthrough). Docela hojně jsme používali vlastní vizualizace.
Problémy z loňska
na které jsme narazili na Black Friday a poté při dennodením používání dashboardu. Limit 8 aktualizací za den a nemožnost spolehnout se na scheduler. Nemožnost sladit aktualizaci dashboardu s ETL. Ve špičce jsme tedy skončili tak, že jsme dashboard aktualizovali ručně. Tento byl také vysdílen v „My workspace“, takže nulová možnost sdílení administrace (jinak než nasdílením hesla). V průběhu roku jsme spoléhaly na automatizovanou aktualizaci 8 krát denně (semtam se něco pokazilo a opravilo bez zjevné příčiny). V průběhu roku se několikrát stalo, že vlastní vizualizace zmizeli, člověk musel stáhnout poslední verzi, naimportovat do reportu a tento znovu vypublikovat. Dashboard se ale uživatelům líbil, ale na backendu bylo spousta práce... Práce kterou jsme si chtěli odpoustit v novém roce.
Plán na letošek
zbavit se protivných aktualizací na které se nedalo přesně spolehnout (aktualizace probíhá co nejblíže specifikovanému času, dle vytížení služby se může spustit později, navíc nám nestačilo 8x za den). Použít živé připojení, které přinese jednak možnost vynutit security model a jít až na detail produktu. Použít nové funkce na straně vizualizací, jako například drillthrough, podmíněné formátování, optimalizaci reportu pro mobil a další, že to ani všechno nevyjmenuji. Dále bylo v plánu vyhnout se vlastním vizualizacím z důvodu „mizení“. Ponechal jsem jen scroller.
Technicky jsem to implementovali tak, že jsem vytvořil extra SSAS kostku v multidimenzionálním provedení a zahrnul veškerou logiku potřebnou pro dashboard v této kostce. Umožní nám to recyklovat logiku do různých nástrojů (SSRS, Excel, Power BI) a být tak blízko reálnému času, jak nám jen ETL dovolí. Kostka obsahovala role vynucující row level security. Dashboard byl nasdílen do sdíleného pracovního prostoru, kvůli sdílení administrace.
Vytvořili jsme 3 dashboardy, jeden hlavní a dvě odvozené lehce modifikované verze. Vývoj kostky, dashboardů a testování s tím spojené si vzalo několik týdnů. Dashboardy vypadaly opravdu dobře a měl jsem z nich dobrý pocit...
Jak to šlo
a to až do úterý 22.11 odpoledne. Před peakem jsme se přesunuli s částí týmu do Londýna do hlavního sídla firmy, abychom mohli prezentovat dashboardy uživatelům a být jim k ruce pokud bude potřeba. Bohužel komunikace přes Power BI Enterprise Gateway začala nepředvídatelně padat. Lítaly nám chybové hlášky, kolečko se točilo, točilo a nedotočilo. Když dotočilo, tak chybová zpráva, ale bez popisu chyby. Začalo ladění nejprve se supportem z Microsoft UK. Na případu se vystřídalo několik lidí, což zpomalovalo komunikaci. Postupem času se nám podařilo vybranými kanály poměrně rychle probouchat až k Power BI Gateway týmu v US. Poté se začal troubleshooting vyvíjet trochu lépe, to ale předbíhám. Na straně naší infrastruktury jsme měli vše podchycené z pohledu disaster recovery. V podstatě mirrorovanou konfiguraci všech serverů. Nainstalovali jsme druhou gateway, kterou jsme neměli dopředu. Ale bohužel nefungovala komunikace ani přes tuto bránu. Server byl dostupný ze všech ostatních nástrojů (SSRS, Excel napojený na kostku, Power BI desktop), tudíž jsem podezříval problém na straně Power BI. Kouknu do Office 365 na service health a skutečně vidím u Power BI „service degradation“ a že by to mělo být vše v pohodě 24.11 odpoledne US času.... To je trochu blízko pátku na to abych byl v klidu. S UK supportem jsme v úterý večer a v noci nebyli schpni najít řešení problému. Bylo potřeba přijít s plánem B a to velmi rychle. Reporting pro uživatele přistupující k datům z firmy jsme podchycený měli  (SSRS a Excel). Jak ale poskytnout za dané situace uživatelům data mimo firmu (manažerům jezdícím po obchodech atd.). Na nasazování nové technologie není čas.
Plán je následující:
a)      snažit se rozchodit live connection
b)     udělat verzi reportu, která bude používat data import (jak loni) aktualizovat přes bránu
c)      pokud bude u bodu b problém s aktualizací bránou, aktualizovat v Power BI desktopu a přepisovat soubor
d)     to snad nebude potřeba
23.11 ve středu dávám cvičení Dashboard in a day. Logiku, kterou jsem implementoval měsíc do kostky a která byla dopředu otestována, přebouchávám do reportu používajícího data import. Metodu jednoduše přepnout nejde už kvůli výpočtům. Takže co jsem psal v MDX, přepisuji do DAXu no prostě pěkné cvičeníčko. Já jsem zaneprázdněn plánem B, občas přepínám k troubleshootingu plánu A, na callech se supportem bohužel musí vysedávat šéfová
24.11 ve čtvrtek, brána chvíli jede, chvíli ne, nicméně jí nikdo nevěří, že pojede v onen další kritický den. Musíme se rozhodnout s čím do toho další den půjdeme. Volíme verzi import
25.11 pátek Black Friday je tu. Ze 3 dashboardů jsem stihnul předělat pouze ten hlavní, aby využíval data import odvokzené verze jsou stále jako live connection. Brána bohužel zlobí. Byl jsem dedikován na podporu uživatelů z produktové kategorie bílé zboží. Na dotazy odpovídám z Power BI desktopu a nakonec otvírám Excel napojený na kostku. Všechny dotazy jsem zodpovídat ve velmi rychlém tempu, uživatelé spokojeni. Mezitím ostatní se věnují dalším týmům. S refreshem se tak nějak střídáme a ano museli jsme sklouznout i k plánu C, aktualizace přes bránu zlobí stejně jako živé připojení. A co hůř v pátek večer kolem 10té hodiny dostáváme hlášku, že aktualizace nemohla proběhnout na straně service z důvodu překročení horního limitu paměti. Problém je s vykreslováním kumulovaného grafu za posledních 5 hodin. Narazili jsme zde na nezdokumentovaný limit. Report s importem dat měl velikost pouhých 300 MB a 3 dny dat (Black Friday letos, loni a 2 roky zpět). Nicméně data v DAX dotazu přesáhla maximální velikost dat povolenou na straně service. Takže plán d byl nakonec potřeba a vyřešili jsme to dočasně smazáním onoho grafu. Evidentně můj DAX dotaz nebyl dostatečně efektivní :) Na ladění ve středu nějak nebyl čas. Konečně onen den končí. Ustáli jsme největší špičku. Na backendu spousta práce, ale uživatelé se dostali k informacím, ke kterým potřebovali a na frontendu snad nepoznali moc rozdíl.
26.11. přesun zpátky do Brna vyloženě v „Power BI náladě“. V týdnu přede mnou tři Power BI prezentace :) WUG Online, přednáška na konferenci iLikeSharePoint a SQL Saturday v Praze. Nejlepší ze všeho téma na SQL Saturday Praha – Power BI after more than year in production. A co tam jako teď budu vykládat?
V ten den kdy jsme Power BI nejvíce potřebovali se pokazilo skutečně co mohlo, což jsme dali vědět i produktovému týmu. Na naší straně v tu chvíli nepanovala velká důvěra, že si můžeme dovolit riskovat používat tuto technologii dál. Šéfová napsala manažerovi týmu, se kterým minulý rok na Data Insights Summitu v Seattle prezentovala naše řešení z loňska jak se cítíme s ohledem na používání Power BI do budoucna. Zorganizoval se call kde se probrala situace, Power BI team měl viditelně jasný cíl vyřešit náš společný problém a pracovali opravdu velmi tvrdě a intenzivně na řešení včetně callu v šílené časy, aby se s námi spojili (velký časový posun). Dokonce k nám poslali i jednoho člověka z produktového týmu do kanceláře, aby s námi řešil problém onsite.
Všechno to byla jedna velká a zajímavá zkušenost, ladit funkci brány přímo s produktovým týmem. Dozvěděl jsem se mnohé o tom jak gateway funguje stejně jako service na druhé straně. Mé obavy o tom, že kód ze strany Microsoftu je generován tak často, že prakticky znamožňuje pořádné testování u zákazníka byly trochu uklidněny. Dozvěděl jsem se také pár bodů o tom jak funguje release cyklus. Pokud tedy máte stejnou obavu jako já, vězte že změny jsou napřed nasazovány do Microsoft interního tenantu, kde jsou asi týden. Microsoft testuje nástroje prvně interně a věřím, že když dashboard nejede a stěžuje si Satya Nadela, tak takové eskalace nejsou příjemné :) Poté změny jsou nasazeny do regionů v US a teprve po nějaké době to upečou až k nám do regionu North Europe. Takže kód je testovaný docela zeširoka, než se to dostane až k nám. Testování nových verzí na straně zákazníka je však druhá věc.
V průběhu ladění jsme zkoušeli všechno možné, privátní buildy gateway, podrobnější logování dokonce i nový tenant v UK. Bez konzistentního úspěchu.
Minulé úterý 6.12 přišla v průběhu ladění spásná myšlenka. Zkusit na bráně změnit komunikaci z TCP na HTTPS. Výchozí mód komunikace brány je tzv. AutoDetect. Začne na TCP a pokud se 10 minut nedobouchá, přepíná sám na https. U nás byl však problém, že některé dotazy prošly, ale ne všechny, takže k přepnutí na HTTPS nedošlo vůbec. Po přepnutí na HTTPS brána začala konzistentně fungovat. HTTPS jede, přepneme zpátky na AutoDetect, nejede, přepneme na HTTPS jede, AutoDetect nejede, HTTPS jede. Tento test v průběhu 15 minut mluvil jasně. HTTPS vynucení rozchodilo naši gateway. A fungovalo to celý týden v kuse. Tak jsem začal psát tento blog, že máme konečně rozuzlení zápletky. Fungovalo to až do pondělka 12.12. No mě už z toho asi... Cca 24 hodin to nefungovalo včera v průběhu ladění po restartu service po konfigurační změně opět jede. Otázka je, jestli pojede. Další velká špička (Boxing Day 26.12 před námi) a to bude většina manažerů pracovat z domu, takže Power BI.
Závěr

Jak je na mě vidět nejen z mého blogu vidět, já mám Power BI docela rád :) Nicméně to co se děje v posledních 3 týdnech způsobuje, že nejsem v úplné Power BI náladě, jestli mi rozumíte :) Produkt je to dobrý, vypadá to dobře, dostupnost odkudkoliv, relativně cenově dostupné, rychle přibývající funkce, komunita... to všechno hovoří pro. Ono tempo vývoje je ale dvousečné. Někdo provede nějakou změnu na straně service a vy o tom ani nevíte, natož jestli to mohlo způsobit váš problém. Obráceně máte dlouho problém a ten časem vyšumí a vy opět nevíte, jestli někdo něco změnil. Dalo by se trochu paušalizovat, že jak do svých nástrojů přidáte nějakou cloudovou službu, tak nemáte plnou kontrolu... Jasně v principu by to mělo fungovat, ale... Byť naše telenovela pokračuje, velmi si cením podpory ze strany produktového týmu vyřešit náš problém. Doufám, že se tak s konečnou platností podaří co nejdříve. Už tak se nám podařilo společnými silami vylepšit produkt (odhalili jsme cestou několik bugů, které sice nezpůsobovali náš problém, ale byly tam). Možná je problém někde v naší síti, nebo někde na půli cesty. No uvidíme. Hlavní lekce pro všechny. Pokud je pro vás aplikace kritická, mějte plán B a to i v případě, že využíváte cloudovou službu. A ta by přece měla fungovat. PS: Až to bude fungovat a zjistíme, čím to bylo. Dám update.