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šší.
Finální kalendář česky
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())
)
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.
Děkuji moc, mám kalendářovou tabulku v DB většinou, ale toto se bude hodit, až budu zas někdy mít od někoho CSV a jiné externí zdroje na rychlé výstupy :)
OdpovědětVymazat