Vytvořit v PowerBI report mapující vývoj počtu zákazníků v čase, nebo obecně jakékoliv jiné metriky, pro kterou máme k dispozici data, je relativně jednoduchá úloha. V tomto příspěvku je zobrazen příklad výpočtu počtu zákazníků v různých časových obdobích, porovnání počtu zákazníků s předcházejícím obdobím a výpočet procentuálních rozdílů mezi počty zákazníků v aktuálním a předchozím období pomocí jazyka DAX.
K tomuto tématu je k dispozici také video:
Příklady jsou vytvořeny ve cvičném Power BI souboru Adventure Works DW 2020.pbix. Soubor s řešením je pak dostupný ke stažení níže pod tímto příspěvkem.
Vývoj počtu zákazníků v čase
V použitém cvičném Power BI souboru budeme pracovat se třemi tabulkami. Tabulka 'Date' je klasická kalendářní tabulka. Tabulka 'Internet Sales' obsahuje záznamy o prodaných produktech, mimo jiné s atributem dne, ve kterém došlo k prodeji. Tabulka 'Customer' představuje tabulku obsahující záznamy o jednotlivých zákaznících, nicméně bez jakéhokoliv časového atributu. To znamená, že v tabulce 'Customer' nejsou k dispozici informace o tom, v jakém čase byl daný zákazník aktivní a nakupoval produkty. Tyto údaje jsou k dispozici v tabulce 'Internet Sales', která obsahuje podrobné informace o každé objednávce, včetně zákazníků a dne uskutečnění nákupu. Tabulky, se kterými budeme v tomto příkladu pracovat, jsou v modelu propojeny relacemi zobrazenými na následujícím obrázku.
Jak je možné vidět na obrázku výše, tabulka 'Date' a tabulka 'Customer' mohou obě filtrovat tabulku 'Internet Sales'. Na druhou stranu, v modelu vytvořené relace neumožňují propagaci filtrů z tabulky 'Date' k tabulce 'Customer'. Pokud bychom chtěli například zobrazit počty zákazníků v jednotlivých letech a měsících, následující výpočet nebude fungovat.
Měřítko:
Jak můžeme vidět na následujícím obrázku, filtr vytvořený hodnotami měsíců a let v řádcích a sloupcích vizuálu Matice neovlivňuje výsledek měřítka [Počet zákazníků (nefunkční)], protože filtr působící na měřítko není propagován přes relace z tabulky 'Date' k tabulce 'Customer'.
Hodnota měřítka je v každé buňce vizuálu stejná, a představuje počet všech zákazníků, kteří mají záznam v tabulce 'Customer'.
Jak už to tak v jazyku DAX bývá, způsobů jak dosáhnout stejného výsledku je obvykle více. Jednou z možností, jak získat počet zákazníků, kteří nakupují v určitém časovém období, je dočasně aktivovat obousměrnou propagaci filtrů mezi tabulkou 'Internet Sales' a tabulkou 'Customer'. Obousměrné filtrování můžeme aktivovat v době vyhodnocení výpočtu ve funkci CALCULATE() pomocí funkce CROSSFILTER() následujícím způsobem.
Měřítko:
Nyní již měřítko vrací správné hodnoty, tedy jedinečný počet zákazníků, kteří uskutečnili alespoň jeden nákup v daném časovém období, kdy období je definované měsícem a rokem v řádcích a sloupcích vizuálu.
Další možností, jak dosáhnout stejného výsledku, je spočítat počet jedinečných hodnot ve sloupci 'Internet Sales'[CustomerKey].
Měřítko:
Ve výše uvedeném výpočtu již nepracujeme přímo s tabulkou 'Customer'. Počet zákazníků nakupujících produkty v čase totiž můžeme zjistit také z tabulky 'Internet Sales', protože ta obsahuje jedinečný identifikátor každého zákazníka, který nakoupil alespoň jeden produkt. Počet jedinečných identifikátorů každého zákazníka v tabulce 'Internet Sales' vrací stejné výsledky, jako počet řádků z tabulky 'Customer', což byl případ předcházejícího výpočtu v měřítku [Počet zákazníků (crossfilter)].
V našem příkladu pak můžeme použít následující ekvivalentní výpočet počtu jedinečných hodnot ze sloupce 'Internet Sales'[CustomerKey].
Měřítko:
Ve výše uvedeném výpočtu pak nejdříve pomocí funkce VALUES() načteme všechny jedinečné hodnoty ze sloupce 'Internet Sales'[CustomerKey] dostupné v aktuálním kontextu vyhodnocení. V tabulce s jedním sloupcem vytvořené pomocí funkce VALUES() pak následně pomocí funkce SUMX() spočítáme počet řádků.
Výsledek obou výše uvedených výpočtů bude v použitém modelu stejný. Měřítko [Počet zákazníků] ale budeme používat v dalších výpočtech, a zde bude v našem konkrétním příkladu z pohledu výkonu rychleji vyhodnocena druhá varianta výpočtu s použitím funkce SUMX(). I zde ale platí, že pokud vybíráme z více variant stejných výpočtů, měli bychom provést měření a až následně se rozhodnout pro jednu nebo druhou variantu výpočtu, protože rychlost vyhodnocení výpočtů je ovlivněna mnoha faktory.
Nyní, když již dokážeme určit počet zákazníků, kteří nakupují zboží v určitém čase, můžeme si vytvořit odvozené měřítko, které bude vracet v aktuálním období hodnotu měřítka [Počet zákazníků] za předcházející rok. Logika následujícího výpočtu je podrobněji popsána v samostatném příspěvku.
Měřítko:
Jak je možné vidět na následujícím obrázku, pokud přesuneme roky ze sloupců vizuálu Matice do řádků, a přidáme nové měřítko [Počet zákazníků (předchozí rok)], můžeme si snadno porovnat počet zákazníků v aktuálním období se stejným obdobím v předchozím roce.
Pokud bychom chtěli vidět přímo rozdíl mezi počtem zákazníků v aktuálním období a počtem zákazníků v minulém roce, můžeme jednoduše vypočítat rozdíl mezi měřítky [Počet zákazníků] a [Počet zákazníků (předchozí rok)].
Měřítko:
Nové měřítko můžeme vložit do vizuálu Matice a na první pohled tak vidět, jaký je rozdíl mezi počtem zákazníků v aktuálním období v porovnání se stejným obdobím v předchozím roce.
Pokud bychom chtěli vidět procentuální růst počtu zákazníků, výpočet bude opět velmi jednoduchý.
Měřítko:
Pokud nové měřítko vložíme do vizuálu v Power BI reportu, výsledek může vypadat následovně.
Jak můžeme vidět na obrázku výše, tak například v roce 2019 měl prodejce v použitém modelu každý měsíc více zákazníků, než v předcházejícím roce 2018.
Shrnutí
Jak bylo možné vidět na příkladu v tomto příspěvku, vytvořit report mapující vývoj počtu zákazníků je v Power BI, nebo obecně v jazyku DAX, relativně jednoduchá úloha. Takto vytvoření report je otázkou několika málo minut, a může být vytvořen obdobným způsobem v Power BI, v Excelu nebo v kterémkoliv jiném nástroji, který má k dispozici Tabulární model. Stejně tak může být s malými úpravami výše uvedený postup aplikován na jiné metriky, jako například na počet prodaných produktů, sumu utrženou za prodané produkty, vynaložené náklady na výrobu, a mnohé další, v závislosti na dostupnosti dat a požadavcích uživatelů reportu.
Další příklady můžete najít na stránce DAX příklady nebo na stránce Power BI.
Komentáře
Okomentovat