Výchozí filtr v Power BI průřezu pomocí Calculation Groups

Úvodní obrázek

V tomto příspěvku si ukážeme jeden z více možných postupů, jak v Power BI reportu nastavit výchozí filtr vždy na nejnovější hodnotu dostupnou v průřezu, a to i po aktualizaci dat.

K tomuto tématu je k dispozici také video:

V příkladu budeme pro zjednodušení pracovat s roky, nicméně tento atribut může být nahrazen jakýmkoliv jiným atributem, ze kterého chceme vybírat aktuální hodnotu pro vytvoření výchozího filtru v reportu.

Uvažujme například následující jednoduchý report.

Výchozí filtr v Power BI průřezu pomocí Calculation Groups

Typickým požadavkem uživatelů reportů je mít celý report ve výchozím stavu zafiltrovaný na aktuální rok. To můžeme udělat tak že vybereme rok 2022 a nasadíme report do služby nebo na server.

Jakmile uživatel otevře report, bude tento report zafiltrovaný ve výchozím stavu na aktuální rok.

Výchozí filtr v Power BI průřezu pomocí Calculation Groups 2

Pokud se ale přesuneme do roku 2023 a aktualizujeme data v modelu, takto vytvořený report bude stále ve výchozím stavu zafiltrovaný na rok 2022.

Výchozí filtr v Power BI průřezu pomocí Calculation Groups 3

V následující části příspěvku si ukážeme jednu z možností, jak zafiltrovat všechna měřítka v reportu na aktuální rok i po aktualizaci dat.

Upozornění: V následující části příspěvku budeme tvořit Kalkulační skupiny (Calculation Groups). Po vytvoření Kalkulační skupiny přestanou v modelu fungovat implicitní měřítka. Implicitní měřítko je automaticky vytvořené měřítko, které vznikne pokud vložíme do hodnot vizuálu přímo sloupec, nad kterým proběhne automatická agregace. Pokud tedy v reportech používáte implicitní měřítka, netvořte v tomto modelu Kalkulační skupiny. Kalkulační skupiny jsou uzpůsobeny pro práci s explicitními měřítky (námi vytvořenými měřítky), a proto při vytvoření Kalkulační skupiny v modelu dojde automaticky k deaktivaci implicitních měřítek.

Výchozí filtr všech měřítek pomocí Calculation Groups

Než se pustíme do vytvoření Kalkulační skupiny, můžeme si celou logiku výpočtu demonstrovat na měřítku. Pokud bychom chtěli použít výchozí filtr na aktuální rok například pro měřítko prodeje, můžeme použít následující variantu výpočtu.

Měřítko:

Prodeje (výchozí rok) =
VAR AktualniRok =
    CALCULATE
    (
        YEAR(MAX('Sales'[Order Date])),
        REMOVEFILTERS()
    )
VAR ProdejeAktualniRok =
    CALCULATE
    (
        [Prodeje],
        KEEPFILTERS('Date'[Rok] = AktualniRok)
    )
VAR JeFiltrNaRokyVPrurezu =
    CALCULATE
    (
        ISFILTERED('Date'[Rok]),
        ALLSELECTED('Date'[Rok])
    )
VAR Vysledek =
    IF
    (
        JeFiltrNaRokyVPrurezu,
        [Prodeje],
        ProdejeAktualniRok
    )
RETURN
    Vysledek

Celý výpočet není nijak složitý. V první proměnné AktualniRok dynamicky zjišťujeme poslední rok, pro který máme k dispozici data ve faktové tabulce 'Sales'. Následně v proměnné ProdejeAktualniRok použijeme tento nejnovější rok jako výchozí filtr před vyhodnocením měřítka [Prodeje].

Protože ale měřítko musí stále reagovat na filtr let z průřezu, budeme prodeje ve výchozím roce zobrazovat pouze v případě, kdy uživatel aktivně nefiltruje roky v některém z vizuálů v reportu. V proměnné Vysledek proto pomocí funkce IF() ověřujeme, jestli jsou zafiltrované roky v průřezu. Pokud ano, zobrazíme hodnoty měřítka [Prodeje] v aktuálním kontextu filtru. Pokud ale uživatel nefiltruje roky v průřezu, zobrazíme prodeje zafiltrované na poslední dostupný rok v modelu.

Celou logiku v měřítku [Prodeje (výchozí rok)] můžeme aplikovat na jakékoliv měřítko, které chceme zobrazovat ve výchozím stavu zafiltrované na aktuální rok. Jedinou změnou by bylo nahradit měřítko [Prodeje] v DAX výpočtu jiným měřítkem. Abychom ale nemuseli takto pracně postupovat u každého měřítka a abychom nemuseli tvořit měřítka se spoustou duplicitního kódu, můžeme použít Kalkulační skupinu, kde celou logiku definujeme pouze jednou.

Při definici Položky výpočtu v Kalkulační skupině totiž můžeme použít funkci SELECTEDMEASURE(), která dynamicky načte aktuální měřítko, a my tak můžeme výchozí filtr nastavit na všechna měřítka v reportu v jednom kroku.

Pokud pracujeme s aktuální verzí Power BI, můžeme vytvořit Kalkulační skupiny v části Zobrazení modelu.

Výchozí filtr v Power BI průřezu pomocí Calculation Groups 4

Každá Kalkulační skupina je tabulka, která obsahuje sloupec s Položkami výpočtu. Naše dvě položky výpočtu budou vypadat následovně.

Položky výpočtu:

Bez výchozího roku = SELECTEDMEASURE()

Výchozí rok =
VAR AktualniRok =
    CALCULATE
    (
        YEAR(MAX('Sales'[Order Date])),
        REMOVEFILTERS()
    )
VAR HodnotaMeritkaAktualniRok =
    CALCULATE
    (
        SELECTEDMEASURE(),
        KEEPFILTERS('Date'[Rok] = AktualniRok)
    )
VAR JeFiltrNaRokyVPrurezu =
    CALCULATE
    (
        ISFILTERED('Date'[Rok]),
        ALLSELECTED('Date'[Rok])
    )
VAR Vysledek =
    IF
    (
        JeFiltrNaRokyVPrurezu,
        SELECTEDMEASURE(),
        HodnotaMeritkaAktualniRok
    )
RETURN
    Vysledek

Protože jsou Položky výpočtu uložené ve sloupci v tabulce, můžeme je použít v průřezu v reportu nebo v postranním panelu filtrů, stejně jako kterékoliv jiné sloupce nahrané v modelu.

Pokud bude například v průřezu vybrána položka 'Výchozí rok'[Bez výchozího roku], nestane se nic, protože funkce SELECTEDMEASURE() bude jednoduše vracet hodnotu aktuálního měřítka. 

Pokud ale v reportu zafiltrujeme položku výpočtu 'Výchozí rok'[Výchozí rok], na všechna měřítka vyhodnocená v kontextu filtru této položky bude aplikována logika, ve které filtrujeme měřítko na aktuální rok, pokud uživatel sám nefiltruje roky v průřezu.

Výchozí filtr v Power BI průřezu pomocí Calculation Groups 5

Na obrázku výše tak můžeme vidět, že všechna měřítka vrací hodnoty za rok 2023, což je výchozí filtr definovaný v Položce výpočtu 'Výchozí rok'[Výchozí rok] vybrané v průřezu.

Pokud dojde k aktualizaci dat a v modelu budou záznamy o prodejích také za rok 2024, výchozí filtr bude nastaven právě na rok 2024.

Výchozí filtr v Power BI průřezu pomocí Calculation Groups 6

Pokud bude chtít uživatel vidět také historii, tzn. hodnoty měřítek za jiný než výchozí rok, stačí v průřezu s roky vybrat jeden nebo více let.

Výchozí filtr v Power BI průřezu pomocí Calculation Groups 7

Kalkulační skupina 'Výchozí rok' je technického charakteru a není tak určena pro ovládání uživatelem reportu. Tuto kalkulační skupinu tak můžeme vložit například do postranního panelu filtrů a zde vybrat Položku výpočtu 'Výchozí rok'[Výchozí rok], aby bylo celé řešení pro uživatele reportů alespoň částečně skryté.

Shrnutí

V tomto příspěvku jsme si ukázali, jak pomocí Kalkulační skupiny vytvořit report, ve kterém budou ve výchozím stavu zafiltrována všechna měřítka na aktuální rok. Aktuální rok se pak bude dynamicky měnit podle toho, za jaké roky máme k dispozici data v modelu. Stejný postup můžeme přirozeně aplikovat také na jiné atributy, než je rok. Může jít například o výchozí filtr na aktuální den, aktuální zakázku, aktuálního zákazníka a tak dále.

Použití Kalkulační skupiny pro nastavení výchozího filtru v reportu může být vhodným řešením především v situaci, kdy máme v reportu spoustu měřítek a nechceme tvořit druhou variantu těchto měřítek pouze pro účel nastavení výchozího filtru v jednom reportu. Současně, používání Kalkulačních skupin má svá specifika, zejména pokud používáme více Kalkulačních skupin současně. V těchto případech se musíme zamyslet zejména nad pořadím aplikování jednotlivých Kalkulačních skupin, aby kombinace více filtrů z různých Kalkulačních skupin dávala smysl. Tyto a další detaily Kalkulačních skupin si můžeme popsat v některém z dalších příspěvků. 

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

Komentáře