Jak vyhledat produkty často prodávané společně v Power BI a DAX

Úvodní obrázek

Každý, kdo někdy nakupoval zboží v některém z internetových obchodů si mohl všimnout, že před dokončením objednávky se na stránkách prodejce zobrazí nabídka doplňkového zboží, které si ostatní zákazníci často kupují společně s produktem vybraným v nákupním košíku. 

V tomto příspěvku si ukážeme postup, jak v Power BI pomocí jazyka DAX zjistit, které produkty si zákazníci kupují nejčastěji společně.

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

Zobrazené příklady jsou vytvořeny ve cvičném Power BI souboru Adventure Works DW 2020.pbix. Soubor s řešením je k dispozici ke stažení níže pod tímto příspěvkem.

Časté společné nákupy produktů

V prvním kroku si v použitém modelu vytvoříme dvě nové tabulky. Obě tabulky budou obsahovat jeden sloupec s názvy všech produktů z tabulky 'Product'. První tabulka bude obsahovat produkty představující zakoupený produkt. Ve druhé tabulce budou produkty určené k porovnání. Tabulky si můžeme vytvořit přímo v Power BI, kliknutím na tlačítko "Nová tabulka" na kartě "Modelování". Do DAX editoru následně vložíme níže uvedený výraz pro vytvoření první tabulky.

Počítaná tabulka:

Zakoupený produkt =
SELECTCOLUMNS
(
    DISTINCT('Product'[Product]),
    "Zakoupený produkt",
    'Product'[Product]
)

Druhá tabulka bude obsahovat stejné hodnoty, tedy názvy všech produktů z tabulky 'Product', pouze tabulku a sloupec pro přehlednost jinak pojmenujeme.

Počítaná tabulka:

Porovnávaný produkt =
SELECTCOLUMNS
(
    DISTINCT('Product'[Product]),
    "Porovnávaný produkt",
    'Product'[Product]
)

Takto vytvořené tabulky jsou nyní součástí modelu, nicméně nebudou propojeny s ostatními tabulkami pomocí relací.

Jak vyhledat produkty často prodávané společně v Power BI a DAX

Nyní se můžeme přesunout k samotnému Power BI reportu. Názvy produktů z tabulky 'Zakoupený produkt' vložíme do průřezu. Názvy produktů z tabulky 'Porovnávaný produkt' pak vložíme do řádků vizuálu tabulka. Výchozí report tak může vypadat následovně. 

Jak vyhledat produkty často prodávané společně v Power BI a DAX 2

Vybraný produkt v průřezu zatím nijak neovlivňuje produkty zobrazené ve vizuálu pod průřezem. Hodnoty v obou vizuálech pocházejí z jiných tabulek, které nejsou propojeny pomocí relací. 

Celá logika bude zachycena v měřítku pomocí DAX výrazu. Výpočet si rozdělíme do jednotlivých dílčích kroků pomocí proměnných. Při použití proměnných sice zabere DAX kód více řádků, nicméně benefitem je přehlednější a výrazně jednodušší výpočet.

Měřítko:

Společné nákupy =
VAR ZakoupenyProdukt =
    SELECTEDVALUE('Zakoupený produkt'[Zakoupený produkt])
VAR PorovnavanyProdukt =
    SELECTEDVALUE('Porovnávaný produkt'[Porovnávaný produkt])
VAR ObjednavkyZakoupenehoProduktu =
    CALCULATETABLE
    (
        VALUES('Sales Order'[Sales Order]),
        'Product'[Product] = ZakoupenyProdukt
    )
VAR SpolecneObjednavky =
   CALCULATETABLE
   (
       VALUES('Sales Order'[Sales Order]),
       ObjednavkyZakoupenehoProduktu,
       'Product'[Product] = PorovnavanyProdukt
   )
VAR PocetObjednavekZakoupenyProdukt = SUMX(ObjednavkyZakoupenehoProduktu, 1)
VAR PocetSpolecnychObjednavek = SUMX(SpolecneObjednavky, 1)
VAR ProcentualniPodilSpolecnychObjednavek =
    DIVIDE
    (
        PocetSpolecnychObjednavek,
        PocetObjednavekZakoupenyProdukt
    )
VAR Vysledek =
    IF
    (
        ZakoupenyProdukt <> PorovnavanyProdukt,
        ProcentualniPodilSpolecnychObjednavek
    )
RETURN
   Vysledek

Díky názvům proměnných je DAX kód více méně samopopisný. Důležitou částí výpočtu je volba, co znamená společný nákup produktů. Ve výpočtu použitém v tomto příkladu jsou za společně nakupované produkty považovány ty produkty, které jsou na společných objednávkách, což je možné vidět v proměnné SpolecneObjednavky

Jakmile dokážeme určit počet objednávek vybraného produktu v průřezu a počet objednávek, na kterých je jak produkt vybraný v průřezu, tak produkt v aktuálním řádku vizuálu Tabulka, jednoduchým dělením dostaneme procentuální podíl společných nákupů. Nové měřítko si můžeme vložit do připraveného vizuálu tabulka.

Jak vyhledat produkty často prodávané společně v Power BI a DAX 3

Na obrázku výše můžeme vidět, že jako zakoupený produkt je v průřezu vybraný produkt s názvem "All-Purpose Bike Stand". V tabulce pod průřezem jsou zobrazené produkty, které jsou s vybraným produktem nakupované nejčastěji, včetně procentuálního podílu společných nákupů ve vztahu ke všem objednávkám vybraného produktu v průřezu. 

V postranním panelu filtrů můžeme u použitého vizuálu tabulka ještě omezit počet zobrazených produktů, například na top 5 nejčastěji společně nakupovaných produktů.

Jak vyhledat produkty často prodávané společně v Power BI a DAX 4

Ve filtru vizuálu filtrujeme názvy produktů z tabulky 'Porovnávaný produkt'. Jako typ filtru je vybrána možnost "Nejlepší" pro pět nejlepších výsledků podle výsledku měřítka [Společné nákupy]. Po kliknutí na tlačítko "Použít filtr" je vizuál tabulka filtrován pouze na pět nejčastěji společně nakupovaných produktů s produktem vybraným v průřezu.

Jak vyhledat produkty často prodávané společně v Power BI a DAX 5

Na obrázku výše je v průřezu nad tabulkou vybrán produkt "HL Mountain Rear Wheel", což je náhradní díl pro horské jízdní kolo. Ve výsledné tabulce jsou vidět produkty, které jsou s tímto vybraným zadním náhradním kolem nejčastěji na společných objednávkách. Zvýrazněné produkty jsou horská kola. 

Pokud si někdo kupuje horské kolo, může si k horskému kolu zakoupit také jako náhradní díl náhradní zadní kolo. Pokud ovšem někdo kupuje zadní náhradní kolo, které je vybrané v průřezu, obvykle již má doma i samotné jízdní kolo, na které náhradní díl kupuje. Výše uvedený pohled na společné nákupy bychom tedy ještě mohli upravit tak, že budeme zobrazovat pouze nejčastěji společně nakupované produkty, které splňují nějakou dodatečnou podmínku. 

Měřítko [Společné nákupy] můžeme doplnit například o podmínku, kdy k zakoupenému produktu budeme zobrazovat pouze společně nejčastěji nakupované produkty, které jsou levnější než produkt vybraný v průřezu.

Měřítko:

Společné nákupy (Pouze levnější produkty) =
VAR ZakoupenyProdukt =
    SELECTEDVALUE('Zakoupený produkt'[Zakoupený produkt])
VAR PorovnavanyProdukt =
    SELECTEDVALUE('Porovnávaný produkt'[Porovnávaný produkt])
VAR ObjednavkyZakoupenehoProduktu =
    CALCULATETABLE
    (
        VALUES('Sales Order'[Sales Order]),
        'Product'[Product] = ZakoupenyProdukt
    )
VAR SpolecneObjednavky =
   CALCULATETABLE
   (
       VALUES('Sales Order'[Sales Order]),
       ObjednavkyZakoupenehoProduktu,
       'Product'[Product] = PorovnavanyProdukt
   )
VAR PocetObjednavekZakoupenyProdukt = SUMX(ObjednavkyZakoupenehoProduktu, 1)
VAR PocetSpolecnychObjednavek = SUMX(SpolecneObjednavky, 1)
VAR ProcentualniPodilSpolecnychObjednavek =
    DIVIDE
    (
        PocetSpolecnychObjednavek,
        PocetObjednavekZakoupenyProdukt
    )
VAR CenaVybranyProdukt =
    CALCULATE
    (
        MAX('Product'[List Price]),
        'Product'[Product] = ZakoupenyProdukt
    )
VAR CenaPorovnavanyProdukt =
    CALCULATE
    (
        MAX('Product'[List Price]),
        'Product'[Product] = PorovnavanyProdukt
    )
VAR Vysledek =
    IF
    (
        ZakoupenyProdukt <> PorovnavanyProdukt &&
        CenaVybranyProdukt > CenaPorovnavanyProdukt,
        ProcentualniPodilSpolecnychObjednavek
    )
RETURN
   Vysledek

Cena zakoupeného produktu, tedy produktu vybraného v průřezu, je uložena v proměnné CenaVybranyProdukt. V proměnné CenaPorovnavanyProdukt je pak uložena cena produktů zobrazených v řádcích vizuálu tabulka. 

Podmínka, že porovnávaný produkt musí být levnější, než zakoupený produkt je pak přidána do prvního argumentu funkce IF() v proměnné Vysledek. Tato podmínka by samozřejmě mohla být vytvořena i jinak, například na cenu produktu v určitém rozmezí ve vztahu k zakoupenému produktu apod.

Pokud nyní použijeme tuto novou verzi výpočtu, výsledek bude vypadat následovně.

Jak vyhledat produkty často prodávané společně v Power BI a DAX 6

Jak je možné vidět na obrázku výše, v zobrazené tabulce s produkty, které jsou nakupované často společně s vybraným produktem, již nejsou dvě jízdní kola, jak tomu bylo u původního výpočtu, ale zobrazené jsou pouze produkty s katalogovou cenou nižší než u vybraného produktu v průřezu. 

Soubor s řešením si můžete stáhnout pod níže uvedeným odkazem. Některé další příklady můžete najít na stránce DAX - příklady.  

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

Komentáře