Vyvolání toku power automate pomocí power query
Co byste dělali, kdyby bylo možné z Power Query spustit tok aplikace Power Automate?
Touto otázkou začínám z jednoho prostého důvodu. Ono to totiž jde. Zkoumal jsem využití této skutečnosti a hlavním scénářem využití se mi zatím jeví informovanost kolegů o výpadku reportingu.
Popis scénáře
Mám datovou sadu, která se využívá pro finanční report. Tento report je pak součástí každodenní agendy finančního ředitele. Při aktualizaci datové sady se však vyskytla chyba a aktualizace neproběhla. Power BI Service mi automaticky zaslal E-mail, že aktualizace neproběhla v pořádku. Já se ale nacházím u zákazníka a nemůžu dát finančnímu řediteli informaci o tom, že report v aktuální situaci je nevalidní, protože jeho aktualizace dat neproběhla.
Řešením takové situace může být tok Automate, který do MS Teams odešle zprávu, že aktualizace selhala. Ten samý tok může rovnou upozornit nás, který dotaz (Query) v datové sadě selhal.
Jak dosáhnout takto vyvolaného toku pomocí Power Query?
Nastavení Automate
Pro dosáhnutí takovéhoto výsledku je potřeba vytvořit tok, který budeme moci vyvolat. V rozhraní Power Automate vytvoříme Okamžitý tok se spouštěčem „Při přijetí požadavku HTTP“. Bohužel tento spouštěč je typu Premium. Při prvním uložení tohoto spouštěče dojde k vytvoření volací adresy, která se dá pro spuštění použít.
Pokud chcete, aby vám Power Query vracelo do toku nějaké informace, tak zde v konektoru musíte doplnit JSON schéma. V následujícím schématu do toku předávám informace o názvu dotazu a názvu reportu. Krom schématu je potřeba nastavit metodu, kterou bude tento spouštěč očekávat. Vzhledem k tomu, že mu chceme předávat informace, tak je potřeba v pokročilých možnostech přepnout metodu na POST.
Na tento spouštěč jsem připojil odeslání e-mailu (Outlook) a odeslání zprávy (Teams). V obou konektorech jsem si připravil zprávy, do kterých jsem aplikoval parametry ze spouštěče.
Nastavení Power Query
První důležitá věc, kterou v Power Query je potřeba pochopit, je to, že Power Query vyhodnocuje kroky skládáním. Kdy skládá provázané kroky do sebe. Dále je Power Query schopno ukládat proměnné. Vytvořil jsem si dvě proměnné. Do první jsem uložil název reportu a do druhé pak název dotazu. Dále pak jsem složil proměnné do očekávaného JSON výstupu pro Automation.
Máme tedy připravený výstup. Teď musíme rozdělit dotaz na postup a případné vyvolání toku. Toho se dá docílit pomoci funkce „try“ a „otherwise“ a ručním skládáním dotazu. Do sekce „try“ se pak umístí příkazy, které má dotaz (query) vykonat. Pokud nějaký z nich selže, pak se spustí příkazy ze sekce „otherwise“ a v našem případě se zde zavolá předpřipravený tok. Pro zavolání jsem přidal další proměnnou, kterou jsem pojmenoval FlowURL, a do které jsem si vložil volací URL ze spouštěče toku. Tato proměnná lze pomocí konektoru web a příkazu Web.Content() využít pro zavolání HTTPS adresy. Při zavolání jdou dále definovat atributy záhlaví a obsahu. Dotazový příkaz pak vypadá následovně:
- Web.Content(FlowURL, [Headers (záhlaví) = „“, Content (obsah) = „“] )
Tento kód může posloužit i jako šablona, kdy si pro jednotlivé dotazy změníte QueryName a postup původního dotazu vložíte do sekce „try“. Tím je hotovo. Pokud tedy něco selže, tak přijde notifikace, jak mně do mailu, tak do Teams, aby ti, kteří s tímto reportem pracují byli informováni, že se něco děje.
Přepoužitelnost
Toku vytvořenému takto nebude vadit, když bude přijímat hlášení od různých datových sad a různých dotazů v nich. Důležité je pak hlídat audienci, které se má patřičná zpráva zobrazit. Pro více audiencí bych pak doporučoval použít v toku ještě podmínky a z Power Query posílat ještě hodnotu, která by audienci v toku roztřídila.
Další nápady
- Obdobným postupem jen pomocí další proměnné a parametru si můžete vracet i konkrétní datový zdroj, který chybu způsobil
- Vyvolat opětovný pokus o aktualizaci datového modelu
- Lze připravit i samostatný dotaz, který může volat více různých toků. Při jednom průchodu tok nastaví hodnotu v seznamu na 1, to způsobí, že příště, až dotaz projde, tak upozorní ostatní, že je report již opět funkční a hodnotu seznamu nastaví opět na 0