Nejčastější výzkyt hodnot ve sloupci v jazyku DAX a Power BI

Nejčastější výzkyt hodnot ve sloupci v jazyku DAX a Power BI

Tento příspěvek obsahuje jeden ze způsobů, jak můžeme pomocí jazyka DAX zjistit, která hodnota se ve vybraném sloupci vyskytuje nejčastěji. Řečí statistiky se nejčastěji vyskytující hodnota v daném souboru dat nazývá MODUS. Ve cvičném Power BI souboru si ukážeme, jak zjistit nejčastěji se vyskytující produkt v tabulce prodejů 'Sales', popíšeme si, jakou má toto zjištění vypovídající hodnotu ve vztahu ke struktuře dat v modelu a ukážeme si jak zjistit, který produkt je opravdu nejprodávanější.

Všechny příklady uvedené v tomto příspěvku jsou vytvořeny ve cvičném Power BI souboru Adventure Works DW 2020.pbix, který je volně dostupný ke stažení na internetu.

Nejčastější výskyt produktu v tabulce prodejů

Než se dostaneme k samotnému výpočtu, podívejme se nejdříve na strukturu tabulky a sloupce, ve kterém budeme hledat nejčatěji se vyskytující hodnotu.

Nejčastější výzkyt hodnot ve sloupci v jazyku DAX a Power BI 2

Na obrázku výše můžeme vidět strukturu dat v tabulce 'Sales', která obsahuje záznamy o prodejích produktů a v použitém modelu se jedná o tzv. faktovou tabulku.

Zvýrazněný sloupec obsahuje identifikátor jednotlivých produktů, který je mimo jiné použitý pro vytvoření relace mezi tabulkami 'Sales' a 'Product'. Jak můžeme vidět na obrázku výše, sloupec 'Sales'[ProductKey] obsahuje celkem 121 253 záznamů a 350 jedinečných hodnot. To znamená, že velké množství hodnot se v tomto sloupci opakuje. Tím se dostáváme k cíli výpočtu, kterým je zjistit, jaký produkt se v tomto sloupci vyskytuje nejčastěji. Pokud bychom chtěli vytvořit měřítko, které bude vracet v aktuálním kontextu produkt, který se v tabulce 'Sales' vyskytuje nejčastěji, můžeme použít následující výpočet.

Měřítko:

Nejčastější výskyt (ProductKey) =
VAR NejcastejsiVyskyt =
    TOPN
    (
        1,
        VALUES(Sales[ProductKey]),
        CALCULATE(COUNT(Sales[ProductKey])),
        DESC
    )
VAR Vysledek =  CONCATENATEX(NejcastejsiVyskyt, Sales[ProductKey], ", ")
RETURN
    Vysledek

Výpočet v měřítku [Nejčastější výskyt (ProductKey)] je relativně přímočarý. Pomocí funkce TOPN() si vytvoříme tabulku, která bude obsahovat jeden sloupec s produktem nebo produkty, které mají nejčastější zastoupení ve sloupci 'Sales'[ProductKey], s ohledem na aktuální kontext vyhodnocení. V proměnné Vysledek hodnoty z této tabulky s jedním sloupcem zřetězíme do jednoho textového řetězce pro případ, že by na prvním místě bylo více produktů se stejným počtem výskytů. Pokud nové měřítko vložíme do vizuálu Matrix, například s roky v řádcích, výsledek může vypadat následovně.

Nejčastější výzkyt hodnot ve sloupci v jazyku DAX a Power BI 3

V řádků souhrnů, kde na měřítko nepůsobí žádný vnější filtr, můžeme vidět číslo 477, které představuje identifikátor produktu, který je v tabulce 'Sales' zastoupen nejčastěji. Stejné číslo můžeme vidět také v letech 2019 a 2020. Pro rok 2017 byl v tabulce 'Sales' nejčastěji zastoupen produkt s identifikátorem číslo 314, a v roce 2018 šlo o produkt s identifikátorem číslo 360.

Měřítko [Nejčastější výskyt (ProductKey)] tedy vrací číslo produktu, které je v tabulce 'Sales' zastoupeno nejčastěji, s ohledem na případné vnější filtry, které můžou být přítomny v Power BI reportech. Na první pohled se může zdát, že se jedná o ekvivalent nejprodávanějšího produktu. Před tím, než budeme moci říct, jestli měřítko [Nejčastější výskyt (ProductKey)] vrací identifikátor nejprodávanějšího produktu, musíme se nejdříve podívat podrobněji na strukturu dat v modelu.

Nejprodávanější produkt

To, že měřítko [Nejčastější výskyt (ProductKey)] není ekvivalentem pro nejprodávanější produkt, zjistíme poměrně rychle při pohledu na strukturu tabulky 'Sales'. Každý produkt, který má záznam v tabulce 'Sales', může být prodán v různém množství. Počet prodaných kusů v tabulce 'Sales' je zaznamenán ve sloupci 'Sales'[Order Quantity]. Rozdíl mezi počtem výskytů produktu v tabulce 'Sales' a počtem prodaných kusů je znázorněn na následujícím obrázku.

Nejčastější výzkyt hodnot ve sloupci v jazyku DAX a Power BI 4

Při výpočtu nejprodávanějšího produktu proto musíme pracovat také s množstvím, ve kterém byl daný produkt prodán.

Další aspekt, který bychom měli brát v úvahu, je rozdíl mezi identifikátorem produktu a názvem produktu. Každý produkt se v tabulce 'Product' může vyskytovat v různých verzích. Jedna verze jednoho produktu se od druhé verze stejného produktu může lišit například cenou nebo náklady na výrobu. Jak můžeme vidět na obrázku níže, každý produkt může mít jednu nebo více verzí.

Nejčastější výzkyt hodnot ve sloupci v jazyku DAX a Power BI 5

V tabulce 'Sales' jsou ve sloupci 'Sales'[ProductKey] jedinečné identifikátory produktů, tedy identifikátory konkrétních verzí. Ve výpočtu nejvíce prodávaného produktu ale budeme pracovat s názvem produktu, pod kterým budou sloučeny všechny verze, ve kterých se daný produkt prodával. Samotný výpočet, který bude vracet názvy nejprodávanějšího produktu v aktuálním kontextu vyhodnocení tak může vypadat následovně.

Měřítko:

Nejvíce prodaných kusů (Product) =
VAR ProduktZNejviceProdanymiKusy =
    TOPN
    (
        1,
        VALUES('Product'[Product]),
        CALCULATE(SUM(Sales[Order Quantity])),
        DESC
    )
VAR Vypocet = CONCATENATEX(ProduktZNejviceProdanymiKusy, [Product], ", ")
VAR Vysledek =
    IF
    (
        [Prodeje] > 0,
        Vypocet
    )
RETURN
    Vysledek

Měřítko [Nejvíce prodaných kusů (Product)] následuje logiku původního výpočtu. Rozdíl můžeme vidět ve druhém argumentu funkce TOPN(), kde je použit sloupec s názvy produktů, namísto sloupce s identifikátory produktů v původním výpočtu. Druhým rozdílem je třetí argument funkce TOPN(), kde namísto počtu výskytů počítáme počet prodaných kusů. Pokud nové měřítko vložíme do původního vizuálu s roky v řádcích, výsledek může vypadat následovně.

Nejčastější výzkyt hodnot ve sloupci v jazyku DAX a Power BI 6

Měřítko  [Nejčastější výskyt (ProductKey)] vrací identifikátor produktu, který se aktuálním kontextu vyhodnocení vyskytuje v tabulce 'Sales' nejčastěji. Jedná se o výpočet, který ze statistiky můžeme znát pod pojmem MODUS. Měřítko [Nejvíce prodaných kusů (Product)] pak vrací název produktu s nejvíce prodanými kusy, opět s ohledem na kontext vyhodnocení, který je na obrázku výše tvořen jednotlivými roky v řádcích vizuálu. Ačkoliv se oba dva typy výpočtů mohou zdát podobné, případně zaměnitelné, rozdíl mezi oběma měřítky je zásadní a každé měřítko má rozdílný význam.

Komentáře