Změna vztahu mezi hodnotami v Power BI průřezu

Změna vztahu mezi hodnotami v Power BI průřezu

Pokud v jednom Power BI průřezu vybereme dvě nebo více hodnot, existuje mezi těmito hodnotami logický OR vztah. V tomto příspěvku si ukážeme jeden ze způsobů, jak pomocí DAX výpočtu v měřítku změnit toto defaultní chování tak, aby vybrané hodnoty z průřezu působily na výpočet v měřítku v logickém AND vztahu.

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

Pro začátek si můžeme na jednoduchém příkladu popsat logický vztah mezi hodnotami vybranými v jednom Power BI průřezu. Pracovat budeme s měřítkem [Prodeje] a s měřítkem [Počet zákazníků]. Měřítko prodeje jednoduše sčítá částky za prodeje produktů z faktové tabulky 'Sales'.

Měřítko:

Prodeje = SUM(Sales[Sales Amount])

V měřítku [Počet zákazníků] pak pomocí funkce DISTINCTCOUT() zjišťujeme počet jedinečných hodnot ze sloupce 'Sales'[CustomerKey].

Měřítko:

Počet zákazníků = DISTINCTCOUNT(Sales[CustomerKey])

V příkladech budeme pracovat s jednoduchým reportem, ve kterém bude vizuál průřez s roky z kalendářní tabulky a vizuál matice s měřítky.

Změna vztahu mezi hodnotami v Power BI průřezu 2

V průřezu na levé straně je vybraný rok 2018 a rok 2019. Ve vizuálu matice pak vidíme prodeje a počet zákazníků za tyto dva roky. Ačkoliv přirozeně říkáme že je v průřezu vybraný rok 2018 a rok 2019, z pohledu aplikace filtrů na model jsou tyto dva roky vyhodnocené v logickém OR vztahu.

Hodnota měřítka [Prodeje] tak odpovídá prodejům buď za rok 2018, nebo za rok 2019 anebo za oba dva vybrané roky. Stejně tak měřítko [Počet zákazníků]. V tomto měřítku vidíme počet zákazníků, kteří nakoupili buď v jednom vybraném roce, ve druhém vybraném roce anebo v obou letech. Mezi hodnotami vybranými v jednom průřezu, ať už jde o dvě anebo více hodnot, existuje logický OR vztah.

Uvažujme nyní situaci, kdy bychom chtěli vidět počet pouze těch zákazníků, kteří nakupovali ve všech vybraných letech, a to včetně částky za prodeje těmto zákazníkům.

Jinými slovy, pokud budou v průřezu stále vybrané roky 2018 a 2019, tak budeme chtít vidět počet zákazníků, kteří nakupovali jak v roce 2018, tak současně v roce 2019. Z pohledu vztahu mezi hodnotami vybranými v průřezu tak budeme chtít aplikovat logický AND vztah.

V Power BI přirozeně nemůžeme tímto způsobem změnit přímo chování samotného průřezu, nicméně jaké hodnoty budou vracet námi vytvořená měřítka ovlivnit můžeme. Můžeme si tak vytvořit měřítko, které bude vracet počet zákazníků, kteří nakoupili ve všech vybraných letech v průřezu, a dále měřítko, které bude vracet prodeje těmto zákazníkům.

Začneme měřítkem s počty zákazníků. V tomto měřítku budeme u každého zákazníka ověřovat, zda má záznam ve faktové tabulce 'Sales' pro každý jeden rok vybraný v průřezu. To můžeme udělat například tak, že si do jedné proměnné uložíme všechny roky vybrané v průřezu, a následně pro každého zákazníka zjistíme, v kolika z těchto let vybraných v průřezu daný zákazník nakupoval. Pokud aktuální zákazník nakupoval ve všech letech vybraných v průřezu, budeme ho započítávat do výsledku. Pokud však aktuální zákazník nenakoupil ve všech vybraných letech v průřezu, takovýto zákazník bude z výsledku vyloučen. Celý takto popsaný výpočet si můžeme rozdělit do jednotlivých mezivýpočtů pomocí proměnných například následujícím způsobem.

Měřítko:

Počet zákazníků (nákup ve všech vybraných letech) =
VAR VybraneRoky = ALLSELECTED('Date'[Rok])
VAR PocetRoku = COUNTROWS(VybraneRoky)
VAR ZakazniciARokySNakupy =
    ADDCOLUMNS
    (
        VALUES(Sales[CustomerKey]),
        "@RokySNakupy",
        COUNTROWS
        (
            FILTER
            (
                VybraneRoky,
                NOT CALCULATE(ISEMPTY(Sales))
            )
        )
    )
VAR VybraniZakaznici =
    FILTER
    (
        ZakazniciARokySNakupy,
        [@RokySNakupy] = PocetRoku
    )
VAR Vysledek = COUNTROWS(VybraniZakaznici)
RETURN
    Vysledek

Pokud nové měřítko vložíme do původního vizuálu matice, výsledek bude vypadat následovně.

Změna vztahu mezi hodnotami v Power BI průřezu 3

Nové měřítko [Počet zákazníků (nákup ve všech vybraných letech)] vrací v aktuálním kontextu (roky 2018, 2019) přirozeně nižší hodnotu než měřítko [Počet zákazníků], protože ne všichni zákazníci nakupovali v obou vybraných letech v průřezu současně.

Měřítko [Počet zákazníků] tedy vrací ty zákazníky, kteří nakoupili buď v roce 2018, nebo v roce 2019, anebo zákazníky nakupující v obou letech. Na druhou stranu měřítko [Počet zákazníků (nákup ve všech vybraných letech)] vrací pouze ty zákazníky, kteří nakoupili jak v roce 2018, tak současně také v roce 2019.

Pokud bychom chtěli zobrazit prodeje zákazníkům, kteří nakupovali ve všech vybraných letech v průřezu, nebudeme v proměnné výpočet sčítat tyto zákazníky, ale použijeme je ve filtru funkce CALCULATE() před vyhodnocením měřítka [Prodeje] například následujícím způsobem.

Měřítko:

Prodeje zákazníků (nákup ve všech vybraných letech) =
VAR VybraneRoky = ALLSELECTED('Date'[Rok])
VAR PocetRoku = COUNTROWS(VybraneRoky)
VAR ZakazniciARokySNakupy =
    ADDCOLUMNS
    (
        VALUES(Sales[CustomerKey]),
        "@RokySNakupy",
        COUNTROWS
        (
            FILTER
            (
                VybraneRoky,
                NOT CALCULATE(ISEMPTY(Sales))
            )
        )
    )
VAR VybraniZakaznici =
    FILTER
    (
        ZakazniciARokySNakupy,
        [@RokySNakupy] = PocetRoku
    )
VAR Vysledek =
    CALCULATE
    (
        [Prodeje],
        KEEPFILTERS(VybraniZakaznici)
    )
RETURN
    Vysledek

Měřítko [Prodeje zákazníků (nákup ve všech vybraných letech)] nyní vrací prodeje zákazníkům, kteří nakoupili jak v roce 2018, tak současně v roce 2019.

Změna vztahu mezi hodnotami v Power BI průřezu 4

Pokud v průřezu vybereme tři roky namísto dvou, měřítko [Počet zákazníků (nákup ve všech vybraných letech)] bude vracet počet zákazníků, kteří nakupovali ve všech třech vybraných letech, a měřítko [Prodeje zákazníků (nákup ve všech vybraných letech)] bude vracet prodeje těmto zákazníkům.

Změna vztahu mezi hodnotami v Power BI průřezu 5

Jak můžeme vidět na obrázku výše, tak v použitém cvičném modelu nakupovalo ve všech třech vybraných letech pouze 316 zákazníků z celkových 18 280 zákazníků. Prodeje těmto 316 ti zákazníkům pak dosáhly částky 2 195 675, 56.

Shrnutí

Jak bylo možné vidět na příkladu v tomto příspěvku, tak pomocí DAX výpočtu v měřítku můžeme změnit způsob interakce mezi vizuály v Power BI reportech. Standardní chování Power BI průřezu je takové, že mezi více vybranými hodnotami existuje logický OR vztah. Vhodným výpočtem v měřítku ale můžeme docílit toho, že pro uživatele reportů budou hodnoty vybrané v průřezu vyhodnocené v logickém AND vztahu.

Komentáře