Nejlepší produkty podle podílu na tržbách v jazyku DAX

Úvodní obrázek

Tento příspěvek obsahuje příklad vytvoření měřítka, které bude vracet hodnotu prodejů pouze pro ty produkty, které kumulativně tvoří maximálně 25 % celkových prodejů. Výpočet bude reagovat na všechny vnější filtry. To znamená že pokud vybereme například určité období, uvidíme nejlepší produkty pouze v daném období v porovnání s celkovými prodeji ve vybraném období.

K tomuto videu je k dispozici také video:

Stejný princip, který je použitý ve výpočtu zobrazeném v tomto příspěvku můžeme aplikovat na součet jakékoliv jiné metriky z faktové tabulky, a to pouhým nahrazením měřítka které vrací sumu za prodeje produktů jiným měřítkem. Drobnou úpravou použitého měřítka bychom mohli získat také například nejlepší zákazníky, nejlepší obchody atd.

Celý příklad je vytvořený ve cvičném Power BI souboru Adventure Works DW 2020.pbix a soubor s řešením je k dispozici ke stažení níže pod tímto příspěvkem.

Pracovat budeme s měřítkem [Prodeje], které vrací sumu za prodeje produktů v aktuálním kontextu vyhodnocení.

 Měřítko:

Prodeje = SUM(Sales[Sales Amount])

Nové měřítko si můžeme vložit do vizuálu Matice a do reportu přidáme také dva Průřezy, jeden s kategoriemi produktů z tabulky 'Product' a jeden s roky z kalendářní tabulky 'Date'.

Nejlepší produkty podle podílu na tržbách v jazyku DAX

Logika celého výpočtu nebude nijak složitá. Ve výpočtu budeme nejdříve potřebovat získat celkovou hodnotu prodejů za všechny vybrané produkty v kontextu vnějších filtrů působících na vizuál Matice.  Tuto hodnotu můžeme vidět v řádku souhrnů celkem a pokud jí vynásobíme námi zvoleným koeficientem 25 %, získáme hranici pro výběr produktů, které splňují kritérium pro zobrazení.

V dalším kroku budeme chtít vybrat pouze ty produkty, jejichž kumulativní součet prodejů není vyšší než 25 % z celkových prodejů. Nejdříve si tedy vytvoříme tabulku se všemi produkty a jejich prodeji. K této tabulce se dvěma sloupci přidáme třetí sloupec, který bude obsahovat kumulativní prodeje, a to od produktu s nejvyššími prodeji po nejnižší. Následně tuto tabulku zafiltrujeme pouze na ty produkty, jejich kumulativní prodeje jsou menší než 25 % z celkových prodejů. Jakmile budeme mít k dispozici tabulku s nejlepšími produkty, použijeme ji ve filtru funkce CALCULATE() před vyhodnocením měřítka [Prodeje] s tím, že jediný ze tří sloupců který bude efektivně filtrovat model bude sloupec s názvy produktů, protože pouze tento sloupec má Lineage Tag shodný s existujícím sloupcem v modelu, a to se sloupcem 'Product'[Product]. Celý takto popsaný výpočet může vypadat například následovně.

Měřítko:

Nejlepší produkty =
VAR Prodeje25Procent = CALCULATE([Prodeje], ALLSELECTED('Product'[Product])) * 0.25
VAR ProduktyAProdeje =
    ADDCOLUMNS
    (
        ALLSELECTED('Product'[Product]),
        "@Prodeje",
        [Prodeje]
    )
VAR KumulativniProdeje =
    ADDCOLUMNS
    (
        ProduktyAProdeje,
        "@KumulativniProdeje",
        VAR ProdejeAktualniProdukt = [@Prodeje]
        RETURN
        SUMX(FILTER(ProduktyAProdeje, [@Prodeje] >= ProdejeAktualniProdukt), [@Prodeje])
    )
VAR TabulkaDoFiltru =
    FILTER
    (
        KumulativniProdeje,
        [@KumulativniProdeje] <= Prodeje25Procent
    )
VAR Vypocet =
    CALCULATE
    (
        [Prodeje],
        KEEPFILTERS(TabulkaDoFiltru)
    )
RETURN
    Vypocet

Proměnná TabulkaDoFiltru je vložena do funkce KEEPFILTERS(), abychom mohli měřítko použít v kontextu filtru jednotlivých produktů. Tyto filtry v našem příkladu působí na měřítko z řádků vizuálu Matice, nicméně stejný princip by platil při použití jakéhokoliv jiného vizuálu. Pokud nové měřítko vložíme do dříve připravené Matice, výsledek bude vypadat následovně.

Nejlepší produkty podle podílu na tržbách v jazyku DAX 2

Měřítko [Nejlepší produkty] nyní vrací hodnotu prodejů pouze u těch produktů, které souhrnně tvoří maximálně 25 % celkových prodejů. Ve vizuálu zobrazeném na obrázku výše stále vidíme také všechny ostatní produkty, protože máme v hodnotách pořád měřítko [Prodeje]. Pokud bychom odebrali měřítko [Prodeje], všechny ostatní produkty nebudou ve vizuálu zobrazeny a uvidíme pouze ty nejlepší produkty, které tvoří maximálně 25 % celkových tržeb.

Nejlepší produkty podle podílu na tržbách v jazyku DAX 3

Měřítko [Nejlepší produkty] bude reagovat na všechny vnější filtry působící na vizuál Matice. Pokud bychom například v Průřezu vybrali pouze rok 2019, měřítko [Nejlepší produkty] bude vracet prodeje pouze pro produkty které tvoří maximálně 25 % prodejů v roce 2019.

Nejlepší produkty podle podílu na tržbách v jazyku DAX 4

V měřítku [Nejlepší produkty] vybíráme produkty podle hodnoty prodejů. Drobnou úpravou bychom mohli použít jako kritérium jakoukoliv jinou metriku, například počet prodaných kusů, náklady atd. Stejně tak bychom nahrazením sloupce s názvy produktů mohli získat podobný výpočet například pro jednotlivé obchody, pro zákazníky, nebo pro jakýkoliv jiný atribut ze kterékoliv dimenzní tabulky.

Další příklady můžete najít na stránce DAX - příklady. Základní principy pro práci s jazykem DAX najdete na stránce Jazyk DAX a články které popisují syntaxi a práci s vybranými DAX funkcemi na stránce DAX funkce.

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

Komentáře