28. listopadu 2024

Automatizujte Power BI s Power Automate

Na letošním SQL Server Bootcampu 2024 jsem ukazoval spolupráci Power BI s dalšími dvěma členy Power rodiny – Power Apps a Power Automate. V dnešním blogovém příspěvku se zaměřím na ten druhý, Power Automate, a na to, jak může pomoci Power BI vývojářům a správcům.

Video z přednášky bude k dispozici zde, jakmile jej David Gešvindr sestříhá.

Možná si říkáte, co je Power Automate. Jedná se o nástroj z platformy Microsoft Power Platform, který umožňuje automatizovat opakující se úkoly a vytvářet workflow mezi různými aplikacemi a službami. Pro vývojáře Power BI je zajímavý především proto, že umožňuje rozšířit možnosti Power BI o automatizaci klíčových procesů, jako je aktualizace datasetů, distribuce reportů nebo správa upozornění na data. Díky Power Automate mohou vývojáři nejen zefektivnit své workflow, ale také propojit Power BI s dalšími nástroji, jako je SharePoint, Teams nebo SQL Server, a vytvářet tak kompletní řešení pro správu a analýzu dat.

Kde Power Automate najdete? Je součástí Office 365, či stačí kliknout na  https://make.powerautomate.com/

Osobně Power Automate používám zejména pro aktualizace datasetů. Přímo v Power BI Desktopu je možné přidat Power BI vizualizaci Power Automate, která vytvoří tlačítko fungující jako trigger pro nový Power Automate tok. V tomto toku lze volat akci Refresh a aktualizovat dataset.

Tímto způsobem můžete spustit aktualizaci datasetu pouhým stiskem tlačítka. Tuto funkci jsem využil u projektů v testovací fázi, kdy uživatel zapsal data přes Power App do SharePoint listu a následně chtěl, aby se nová data okamžitě promítla do Power BI reportu. SharePoint list byl načten do Power BI jako další zdroj, a po stisku tlačítka se spustila aktualizace datasetu. Tím se zajišťovalo, že změny byly okamžitě viditelné v Power BI vizualizaci.

Další zajímavý scénář je pravidelná aktualizace dat mimo časy, které standardně umožňuje Power BI Service. Power BI Pro dovoluje naplánovat aktualizace maximálně 8krát denně, vždy buď o půl, nebo v celou hodinu, což není vždy dostačující. Pomocí Power Automate lze tyto limity obejít a načasovat aktualizace přesně podle potřeby, bez nutnosti složitého programování.

Pro práci s Power Automate nemusíte hned být expertem. K dispozici je nástroj Copilot, který vám pomůže najít a nastavit to, co potřebujete – stačí mít představu o požadovaném výsledku. Určitě je ale potřeba kontrolovat výstup a můžete narazit na limity. Takže při pokročilejších scénářích se hlubší znalost rozhodně hodí. Pro začátek můžete Copilota otestovat.

Zadal jsem "refresh power bi dataset every 5 minutes" a Flow je na světě


Stačilo dokonfigurovat který workspace a který dataset.

Tím možnosti aktualizací nekončí. Pro zajímavost uvádím několik scénářů přehledně vedle sebe, včetně těch, které již byly zmíněny výše.
  • Automatická aktualizace datasetů
    • Spouštění aktualizací mimo plánované intervaly.
    • Aktivace na základě událostí, jako je dokončení ETL procesu.
  • Podmíněné aktualizace
    • Aktualizace pouze při splnění podmínek (např. nahrání nového souboru).
    • Dynamická aktualizace na základě obchodních potřeb.
  • Řetězení aktualizací závislých datasetů
    • Sekvenční aktualizace, kde jeden dataset závisí na druhém.
  • Monitorování a protokolování stavu aktualizací
    • Upozornění na úspěšné nebo neúspěšné aktualizace (e-mail, Teams).
    • Automatické opakování neúspěšných aktualizací.
  • Hybridní plánování
    • Kombinace pravidelných a událostmi řízených aktualizací.
    • Dynamické přizpůsobení aktualizací, např. na základě časů trhů.
  • Hromadné aktualizace více datových sad
    • Automatická aktualizace všech datasetů v pracovním prostoru na konci dne.
  • Propojení s externími systémy
    • Aktualizace po změnách v Salesforce, SharePointu nebo jiných systémech.
    • Spouštění dalších akcí po aktualizaci (např. odeslání reportu).
Rozhodně existují i jiné scénáře, které nesouvisí přímo s aktualizacemi. Ty ale třeba probereme někdy v samostatném článku.

Nabízí se také další otázka: Co se dá dělat zdarma a co je dostupné pouze v placené verzi?

Neplacená verze (Power Automate Free):
  • Základní funkce: Nabízí možnost vytvářet jednoduché pracovní postupy a automatizace mezi podporovanými aplikacemi.  
  • Omezené spouštění toků: Omezený počet spuštění toků za den.  
  • Menší rychlost zpracování: Nižší priorita při provádění toků ve srovnání s placenou verzí.  
  • Základní konektory: Přístup pouze k běžně dostupným konektorům (např. SharePoint, Outlook, OneDrive).  

Placená verze (Power Automate Premium):
  • Pokročilé konektory: Přístup ke konektorům pro prémiové služby (např. Salesforce, SQL Server, datové sklady).  
  • Vyšší limit spouštění: Větší počet toků spouštěných denně a vyšší výkon zpracování.  
  • Možnost používat RPA (Robotic Process Automation): Automatizace úkolů i v aplikacích, které nepodporují API (např. starší desktopové aplikace).  
  • Integrace s dalšími službami: Rozšířené možnosti napojení na služby mimo Microsoft ekosystém.  
  • Podpora složitějších scénářů: Například využití vlastních konektorů, volání Power BI API nebo zpracování velkých objemů dat.  
Závěr:
Dnešní příspěvek vám představil, co je Power Automate a proč by tato technologie měla zajímat i Power BI vývojáře. Rozebrali jsme scénáře pro aktualizace dat a ukázali, jak může Copilot pomoci citizen developerovi při začátcích s touto technologií. Během psaní článku došlo ve standardním Power BI Pro workspace k 8 aktualizacím, ale už 20 minut žádná další. Omezení licenčního modelu sice neobejdeme, ale to by přece ani nikdo nechtěl, že?

14. listopadu 2024

Kalendářová tabulka

Na prakticky každém školení Power BI a na reálných projektech používám tabulku s kalendářem. Důvodů je několik. Automaticky generované hierarchie ve faktových tabulkách jsou neuvěřitelnými žrouty paměti a nelze je použít, pokud chci analyzovat data alespoň ze dvou faktových tabulek. Potřebuji společnou dimenzi, tedy kalendář. Stejně tak je tabulka s kalendářem prerekvizitou pro funkce Time Intelligence.

Kalendářová tabulka se dá vygenerovat mnoha způsoby. Možná ji máte už ve svém datovém skladu, dá se vygenerovat přes Power Query a také jako počítaná tabulka pomocí jazyka DAX. Pro koncové uživatele mi přijde jednodušší generování přes DAX díky podobnosti syntaxe počítaných sloupců s Excelovými vzorci. Jako inspiraci, co by takový kalendář mohl obsahovat, přikládám skripty na konci článku.

Nechtělo se mi ale psát něco, co už jsem dělal mnohokrát, tak jsem se rozhodl využít Copilota. Mám na mysli Copilota ve Windows, nikoliv Copilota v Power BI, který je aktuálně dostupný pouze pro rezervované kapacity MS Fabric F64 a vyšší.

Pokud tedy chcete jen finální kalendář, skočte na konec stránky. Pokud se chcete podívat na konverzaci, přeji příjemné čtení!






Finální kalendář česky

Kalendář = 
VAR _CurrentYear = YEAR(TODAY())
VAR _StartDate = DATE(_CurrentYear - 2, 1, 1)
VAR _EndDate = DATE(_CurrentYear, 12, 31)
RETURN
ADDCOLUMNS (
    CALENDAR(_StartDate, _EndDate),
    "Rok", YEAR([Date]),
    "Kvartal", "Q" & FORMAT([Date], "Q"),
    "MesicCislo", MONTH([Date]),
    "MesicNazev", FORMAT([Date], "MMMM", "cs-CZ"),
    "PoradiDneVTydnu", WEEKDAY([Date], 2),
    "CisloTydne", WEEKNUM([Date], 21),
    "RelativniRok", YEAR([Date]) - YEAR(TODAY()),
    "RelativniKvartal", (YEAR([Date]) - YEAR(TODAY())) * 4 + QUARTER([Date]) - QUARTER(TODAY()),
    "RelativniMesic", (YEAR([Date]) - YEAR(TODAY())) * 12 + MONTH([Date]) - MONTH(TODAY()),
    "RelativniTyden", DATEDIFF(TODAY(), [Date], WEEK),
    "RelativniDen", DATEDIFF(TODAY(), [Date], DAY),
    "JeVikend", IF(WEEKDAY([Date], 2) > 5, TRUE(), FALSE())
)


A anglicky
Calendar = 
VAR _CurrentYear = YEAR(TODAY())
VAR _StartDate = DATE(_CurrentYear - 2, 1, 1)
VAR _EndDate = DATE(_CurrentYear, 12, 31)
RETURN
ADDCOLUMNS (
    CALENDAR(_StartDate, _EndDate),
    "Year", YEAR([Date]),
    "Quarter", "Q" & FORMAT([Date], "Q"),
    "MonthNumber", MONTH([Date]),
    "MonthName", FORMAT([Date], "MMMM"),
    "DayOfWeek", WEEKDAY([Date], 2),
    "WeekNumber", WEEKNUM([Date], 21),
    "RelativeYear", YEAR([Date]) - YEAR(TODAY()),
    "RelativeQuarter", (YEAR([Date]) - YEAR(TODAY())) * 4 + QUARTER([Date]) - QUARTER(TODAY()),
    "RelativeMonth", (YEAR([Date]) - YEAR(TODAY())) * 12 + MONTH([Date]) - MONTH(TODAY()),
    "RelativeWeek", DATEDIFF(TODAY(), [Date], WEEK),
    "RelativeDay", DATEDIFF(TODAY(), [Date], DAY),
    "IsWeekend", IF(WEEKDAY([Date], 2) > 5, TRUE(), FALSE())
)

Závěr

Kalendářová tabulka se používá prakticky ve všech datových modelech. Jednou z variant, jak k ní dojít, je generování s použitím jazyka DAX. Proč ale objevovat kolo? Stačí zkopírovat hotový skript a ten případně doupravit. Dá se též využít generativní AI, pokud dokážete dobře popsat, co chcete. Kalendář není kompletní, ale obsahuje základní informace. Zadání by se dalo komplikovat například o státní svátky. Ty bych implementoval tabulkou se seznamem svátků a dohledával funkcí LOOKUPVALUE. Musím říct, že si Copilot poradil s generováním kalendáře docela dobře. Dobrá práce.