Zobrazení výsledku filtrů časových kalkulací v DAX

Zobrazení výsledku filtrů časových kalkulací v DAX

Tento příspěvek obsahuje příklad včetně videa, jak v Power BI reportu jednoduše zobrazit výsledek filtrů časových kalkulací, které se obvykle používají pro ovlivnění výsledku ve funkci CALCULATE(). Výsledkem bude zobrazení období a počtu dnů, které jsou použité jako filtry při vyhodnocení výrazu ve funkci CALCULATE() po aplikování filtru určeného pro manipulaci s časem. 

Cílem příspěvku nejsou samotné Time intelligence výpočty, které můžete najít v samostatných článcích na stránce DAX – Příklady, ale zobrazení malého triku, který může zjednodušit práci vývojáři nebo zpřehlednit reporty uživatelům. Z tohoto důvodu jsou výpočty použité v tomto příspěvku co možná nejjednodušší, bez doplňující logiky pro skrytí výpočtů v budoucím období nebo logiky spravedlivého srovnávání.

K tomuto příspěvku je k dispozici také video.

Zobrazení výsledku Time intelligence filtrů v Power BI

Time intelligence funkce, nebo obecněji funkce určené pro manipulaci s časem, používáme obvykle jako filtry ve funkci CALCULATE(). Výsledek těchto filtrů pak přepíše nebo upraví vnější filtry, ve kterých je výpočet v prvním argumentu funkce CALCULATE() vyhodnocen. Autor reportu tak může uživatelům na stejném řádku zobrazit například prodeje v aktuálním roce a pro porovnání také prodeje v předchozím roce, a tak dále. Vývojář většinou dobře ví, co je výsledkem těchto filtrů, nicméně pro uživatele reportů může být v záplavě měřítek méně přehledné, co je výsledkem kterého měřítka a pro jaké období je výpočet měřítka vyhodnocen, zejména pokud v měřítku manipulujeme s filtry. Uvažujme například následující jednoduché výpočty. Měřítko [Prodeje] vrací sumu za prodané produkty v aktuálním kontextu vyhodnocení. Měřítko [Prodeje YTD] pak vrací sumu prodejů od začátku roku po aktuální den.

Měřítka:

Prodeje = SUM(Sales[Sales Amount])

Prodeje YTD =
CALCULATE
(
    [Prodeje],
    DATESYTD('Date'[Date])
)

Pokud vložíme obě měřítka do vizuálu Matrix, spolu s roky a měsíci v řádcích vizuálu. Výsledek může vypadat následovně.

Zobrazení výsledku filtrů časových kalkulací v DAX 2

Měřítko [Prodeje] je vyhodnoceno v aktuálním kontextu vyhodnocení. Pokud se podíváme například na řádek s měsícem duben 2019, měřítko [Prodeje] vrací sumu za prodané produkty v tomto měsíci. Měřítko [Prodeje YTD] pak ve stejném řádku, v řádku s měsícem duben 2019, vrací sumu za prodané produkty za leden, únor, březen a duben 2019. Pokud bychom chtěli dát uživatelům reportu možnost zobrazit si, pro jaké období je vlastně výpočet sumy prodejů v měřítku [Prodeje YTD] vyhodnocen, můžeme vytvořit nové měřítko se stejným filtrem, ale s jiným výrazem v prvním argumentu funkce CALCULATE(). V novém měřítku namísto sumy prodejů necháme vypsat v řetězci první den, poslední den a počet dnů právě v kontextu filtru vytvořeného Time intelligence funkcí DATESYTD(). Výsledky jednotlivých dílčích výpočtů v prvním argumentu funkce CALCULATE() můžeme spojit jednoduše pomocí operátoru & a mezi jednotlivého hodnoty ještě vložíme oddělovač.

Měřítko:

Filtr (Prodeje YTD) =
CALCULATE
(
    MIN('Date'[Date]) & " - " &
    MAX('Date'[Date]) & " - " &
    COUNTROWS('Date'),
    DATESYTD('Date'[Date])
)

Výpočet je podobný originálnímu měřítku [Prodeje YTD], pouze namísto sumy prodejů zobrazíme řetězec s jednotlivými atributy, které představují první den v období, poslední den v období a počet dnů. Výsledek může vypadat následovně.

Zobrazení výsledku filtrů časových kalkulací v DAX 3

Pokud se nyní podíváme na řádek s měsícem duben 2019, můžeme díky novému měřítku [Filtr (Prodeje YTD)] vidět, že v tomto řádku vrací měřítko [Prodeje YTD] opravdu sumu za prodané produkty v období od ledna do dubna 2019. Uživatel reportu tak může pro každou hodnotu měřítka [Prodeje YTD] vidět, pro jaké dny je výpočet vyhodnocen po aplikování filtru určeného pro manipulaci s časem. Stejný postup můžeme použít také pro jiné časové kalkulace. Následující měřítko [Prodeje PY] vrací sumu prodejů za stejné období, ve kterém je měřítko vyhodnoceno, ale toto období je posunuté o jeden rok zpět. Výsledek filtru si opět můžeme nechat vypsat, tentokrát pomocí měřítka [Filtr (Prodeje PY)].

Měřítka:

Prodeje PY =
CALCULATE
(
    [Prodeje],
    DATEADD('Date'[Date], -1, YEAR)
)

Filtr (Prodeje PY) =
CALCULATE
(
    MIN('Date'[Date]) & " - " &
    MAX('Date'[Date]) & " - " &
    COUNTROWS('Date'),
    DATEADD('Date'[Date], -1, YEAR)
)

Obě nová měřítka můžeme vložit do stejného vizuálu s roky a měsíci v řádcích. Jak je možné vidět na následujícím obrázku, měřítko [Filtr (Prodeje PY)] opět zobrazuje období, ve kterém je vyhodnoceno originální měřítko [Prodeje PY].

Zobrazení výsledku filtrů časových kalkulací v DAX 4

Zobrazení období, které ve kterém jsou Time intelligence výpočty vyhodnoceny, může být užitečné jak pro uživatele, tak pro vývojáře reportů. Uživatel reportu si pak může takto vytvořená popisná měřítka nechat zobrazit nebo skrýt v reportech podle vlastní volby, například pomocí Parametru pole, díky kterému si může uživatel reportů sám zvolit, která měřítka a které sloupce potřebuje v konkrétním vizuálu zobrazit.

Další praktické příklady můžete najít na stránce DAX příklady nebo na stránce Power BI.

Stáhnout soubor s řešením.
č. 57

Komentáře