Ako spojiť dva dátové modely z Power BI Desktopu do jedného reportu

Dnes si ukážeme jednu špecialitku, a to konkrétne ako spojiť dva dátové modely z dvoch rôznych Power BI Desktopov, do jedného reportu v ďalšom Power BI Desktope. Hodí sa to v prípade, že máte vyvinutý jeden dátový model v jednom Power BI Desktope – napr. štatistiku nad transakčnými dátami. A potom druhý dátový model v druhom Power BI Desktope, kde sú napr. plánovacie štatistiky. A potrebujete toto spojiť do jedného spoločného reportu, bez toho aby ste vytvárali všetko odznova v ďalšom Power BI Desktope. Pozrieme sa teda, ako na to.

Základom celej stratégie bude využiť fintu, ktorou sa viete pripojiť k dátovému modelu Power BI aj z Excelu, prípadne aj z iného Power BI Desktopu. Viac som o nej písal v tomto článku. V skratke ide o to, že keď spustíte Power BI Desktop, tak ten na pozadí naštartuje novú inštanciu serverového PowerPivotu (po správnosti SQL Server Analysis Services v tabulárnom móde, skrátene SSAS Tabular), ktorý počúva na nejakom náhodnom porte. Tento port sa mení pri každom reštarte Power BI Desktopu, a aj pri štarte každej ďalšej inštancie Power BI Desktopu. Pričom každý Power BI Desktop štartuje svoju vlastnú inštanciu SSAS Tabularu, na svojom vlastnom porte. Tieto porty si viete zistiť napr. cez DAX Studio. Presný postup je popísaný v tomto článku.

Následne sa k tomuto serveru dá pripojiť z ďalšieho Power BI Desktopu, cez konektor k SSAS Tabularu.

Postup bude teda nasledovný:

  1. otvoríme si oba hotové dátové modely (súbory *.pbix) v Power BI Desktope, každý v osobitnom Power BI Desktope
  2. zistíme, na ktorom porte beží SSAS Tabular pre každý Power BI Desktop
  3. spustíme si 3. inštanciu Power BI Desktopu, a pripojíme sa z neho k obom Power BI Desktopom z bodu 1), cez konektor k Analysis Services
  4. naimportujeme si do 3. inštancie potrebné dáta, prepojíme ich, a pripravíme výsledný report, ktorý bude obsahovať dáta z oboch dátových modelov

My si spravíme syntetický príklad, tentokrát z nášho vzorového súboru Power BI. Tento si rozkopírujeme 2x, a otvoríme v Power BI Desktope. Následne si zistíme cez DAX Studio, na ktorých portoch bežia príslušné SSAS Tabulary (je to tzv. diagnostický port Power BI Desktopu). V mojom konkrétnom prípade sú to porty 3431 a 3439.

Potom si otvoríme nový, tretí Power BI Desktop. Nezabudnite ponechať otvorené predchádzajúce dva Power BI Desktopy na pozadí. Dáta z nich naimportujeme tak, že v hlavnom menu klikneme na tlačítko Získať údaje, a vyberieme dátový zdroj pomenovaný Databáza služby SQL Server Analysis Services:

V ďalšom okne zadáme ako názov servera “localhost:XXXXX“, kde XXXXX je číslo portu inštancie SSAS Tabularu z prvého Power BI Desktopu. V mojom prípade tam zadáme “localhost:3431”, vyberieme režim Importovať (o tom druhom režime Live/Naživo píšem v mojej novej knihe o Power BI) a klikneme na OK:

V ďalšom okne klikneme iba na Pripojiť:

…a v ďalšom okne sa nám zobrazí Navigátor, ktorým si z SSAS Tabularu, resp. z nášho prvého dátového modelu, vyberieme údaje, ktoré budeme chcieť naimportovať do tohto dátového modelu, a klikneme na tlačítko Načítať:

Po úspešnom načítaní údajov spravíme tento postup importovania dát aj z druhého dátového modelu. V mojom prípade teda znova dáme v hlavnom menu tlačítko Načítať údaje, vyberieme dátový zdroj Databáza služby SQL Server Analysis Services, zadáme “localhost:3439” (port na ktorom počúva moja inštancia SSAS Tabularu z druhého Power BI Desktopu), a dáme si naimportovať z neho napr. tieto údaje:

Po úspešnom načítaní dát z druhého dátového modelu, prepojíme tabuľky tak ako ľubovoľné iné tabuľky, v tomto prípade podľa rokov:

A potom môžeme spraviť report z oboch dátových modelov ako každý iný report. Napr. ako takúto tabuľku, ktorá berie CalendarYear a Obrat z prvého dátového modelu, a Náklady z druhého dátového modelu:

Toto je teda základ techniky, ako spojiť dva dátové modely do jedného reportu. Vo Vašom prípade to nemusí byť takéto priamočiare, ale technika sa z toho dá pochopiť. Prípadne, ak by ste si nevedeli rady, ako prepojiť tabuľky naimportované z oboch dátových modelov, tak si pozrite v mojej knihe o Power BI časť o tom, ako sa prepájajú tabuľky, a ako vyriešiť najčastejšie problémy pri ich prepájaní.

Toto riešenie má ale ešte drobnú chybičku – keď totižto vypnete prvé dva Power BI Desktopy, a potom ich niekedy neskôr znova zapnete, tak report v treťom Power BI Desktope nebude fungovať. To bude preto, lebo – ako som už spomínal vyššie – inštancie SSAS Tabularu, ktoré zabezpečujú funkčnosť dátového modelu, menia pri každom štarte Power BI Desktope svoj port. Preto toto nie je určené na časté používanie, ale len raz povedzme za deň / za týždeň / za mesiac, keď potrebujete napr. odprezentovať nejaký status. Problém s tými portami vyriešite tak, že si najprv spustíte Power BI Desktopy s oboma dátovými modelmi, a potom zistíte, na ktorých portoch počúvajú po novom. Potom si otvoríte tretí Power BI Desktop, a v ňom pre každú tabuľku upravíte zdrojový dotaz v Power Query, tak aby sa odkazoval na nový port.

Poďme si to teda ukázať na tomto príklade, kde sme si ukazovali, ako spojiť dva dátové modely do jedného reportu.

Čiže povedzme, že v našom prípade sa zmenil port pre prvý dátový model na 9999, a z neho bola ťahaná druhá tabuľka. Klikneme preto v ponuke napravo na jej názov pravým tlačítkom myši, a tam na položku Upraviť dotaz:

Otvorí sa editor Power Query, kde v hlavnom menu, na záložke Domov, klikneme na tlačítko Rozšírený editor:

Zobrazí nám to zdrojový kód dotazu v jazyku M, kde zmeníme starý port (v tomto prípade 3431):

…na nový port 9999, a klikneme na Hotovo:

Potom to asi bude chcieť od Vás upraviť poverenia k prístupu k tej (pre neho) novej inštancii SSAS Tabularu. Zobrazí sa nasledovné hlásenie, kde kliknite na tlačítko “Upraviť poverenia“:

….a v okne, ktoré sa zobrazí, len odkliknite tlačítko Pripojiť:

A ak ste to zadali správne, tak sa tomu podarí znova sa pripojiť k tomu prvému dátovému modelu, a uvidíte náhľad tabuľky s dátami. Potom na aplikovanie zmien ešte v hlavnom menu na záložke Domov, na tlačítko Zavrieť a použiť:

…a keď to dobehne, tak by ste mali mať naimportované, resp. aktualizované dáta z toho prvého dátového modelu, v tomto dátovom modeli.

Rovnako to potom spravíte aj pre tabuľky naimportované z druhého dátového modelu – otvoríte si pre ne editor Power Query, cez neho upravíte číslo portu na to nové číslo portu SSAS Tabularu za druhým Power BI Desktopom, zavriete a aplikujete zmeny, a report by mal obsahovať aktuálne dáta z oboch dátových modelov.

Po tomto postupe to budete mať premapované na tie nové porty inštancií SSAS Tabularu.

Takže, takto sa najľahšie rieši problém, ako spojiť dva dátové modely z dvoch Power BI Desktopov do jedného reportu. Nie je to síce najelegantnejší spôsob, ale je asi najjednoduchší, aký sa dá vyrobiť so súčastnými možnosťami Power BI Desktopu. A ak to budete robiť povedzme len raz za deň alebo za týždeň, tak to nie je až taká tragédia. Časom je samozrejme ideálne spojiť to celé do jedného konsolidovaného dátového modelu, ale to je zasa hromada práce navyše. Takže ak vám stačí táto technika, tak si celú túto prácu môžete ušetriť 🙂