Funkce MAXX() a MINX() jsou agregační a současně iterační funkce se dvěma povinnými argumenty. Prvním argumentem obou funkcí je tabulka. Druhým argumentem je výraz, který je vyhodnocen v kontextu řádku tabulky zadané v prvním argumentu. Výsledkem je pak největší, respektive nejmenší hodnota ze všech výsledků výrazu uvedeného ve druhém argumentu.
Tento příspěvek obsahuje vybrané příklady s použitím funkcí MAXX() a MINX() s cílem vysvětlit, jak tyto funkce fungují. Příklady jsou vytvořeny ve cvičném Power BI souboru Adventure Works DW 2020.pbix, který je volně dostupný ke stažení na internetu. Soubor s řešením je k dispozici ke stažení níže pod tímto příspěvkem.
Příklad použití funkcí MAXX a MINX
V použitém cvičném modelu jsou ve faktové tabulce 'Sales' záznamy o prodaných produktech. Jeden konkrétní produkt se v průběhu času mohl prodávat za různé ceny podle toho, zda došlo ke zdražení, nebo naopak ke zlevnění produktu. Pokud bychom chtěli zobrazit v reportu maximální nebo minimální cenu, za kterou byl daný produkt alespoň jednou prodán, vystačíme si s funkcemi MAX() a MIN().
Měřítka:
Pokud nová měřítka vložíme do vizuálu Matice, spolu s produkty v řádcích, můžeme u každého produktu vidět nejvyšší a nejnižší cenu, za jakou byl tento produkt v průběhu času prodáván.
Stejného výsledku můžeme dosáhnout také při použití funkcí MAXX() a MINX() následujícím způsobem.Měřítka:
Pokud vložíme obě nová měřítka do stejného vizuálu, tak při vyhodnocení těchto měřítek dojde v prvním kroku k zafiltrování tabulky 'Sales' v prvním argumentu obou funkcí pouze na ty prodané produkty, které odpovídají produktu v aktuálním řádku vizuálu. Následně v takto zafiltrované tabulce dojde řádek o řádku k vyhodnocení druhého argumentu. Funkce MAXX() potom vrátí nejvyšší hodnotu ze všech jednotkových cen pro daný produkt, a funkce MINX() nejnižší jednotkovou cenu. Ve skutečnosti, kdykoliv když použijeme funkci MAX() nebo MIN() s jedním argumentem ve formě odkazu na sloupec, jsou tyto funkce vyhodnoceny úplně stejně jako funkce MAXX() a MINX(), kde je ve druhém argumentu odkaz na sloupec, a v prvním argumentu tabulka, ze které tento sloupec pochází. Výsledky obou variant měřítek jsou proto také stejné.
Výhodou funkcí MAXX() a MINX() je, že v prvním argumentu těchto funkcí můžeme použít jakoukoliv tabulku, včetně funkcí vracející tabulky, a ve druhém argumentu můžeme použít jakýkoliv výraz vracející v aktuálním kontextu skalární hodnotu. Pomocí funkcí MAXX() a MINX() tak můžeme například rozvinout původní výpočet. Každý záznam ve faktové tabulce 'Sales' obsahuje jednotkovou cenu ve sloupci 'Sales'[Unit Price], a dále také počet prodaných kusů ve sloupci 'Sales'[Order Quantity]. Pokud bychom se tedy nespokojili pouze s nejnižší nebo nejvyšší jednotkovou cenou, ale chtěli bychom vědět nejvyšší a nejnižší částku utracenou za daný produkt v rámci jedné objednávky, můžeme ve druhém argumentu funkcí MAXX() a MINX() vynásobit jednotkovou cenu počtem objednaných kusů.Měřítka:
Nově vytvořená měřítka si můžeme vložit opět do stejného vizuálu s názvy produktů v řádcích a zobrazit si výsledek.
Na obrázku výše můžeme vidět, že produkt s názvem "All-Purpose Bike Stand" uvedený v prvním řádku vizuálu byl vždy prodáván za stejnou cenu, a navíc byl vždy prodáván pouze po jednom kusu. Ve druhém řádku již byl nejvyšší nákup produktu s názvem "AWC Logo Cap" výrazně vyšší, než je jeho nejvyšší jednotková cena. To znamená že tento nejvyšší nákup tohoto konkrétního produktu zahrnoval více prodaných kusů najednou.Měřítko [Nejnižší nákup] pak pro většinu produktů bude vracet hodnotu z řádku v tabulce 'Sales', ve kterém je záznam pouze s jedním prodaným kusem, nicméně jak můžeme vidět na obrázku výše, nemuselo se vždy jednat o prodej produktu za jeho nejnižší jednotkovou cenu. To znamená, že u těchto produktů bylo dosaženo nejnižší jednotkové ceny u prodejů s větším počtem odebraných kusů.
Ve druhém argumentu funkcí MAXX() a MINX() můžeme použít jakýkoliv výraz, včetně měřítek, který bude vracet v kontextu řádku tabulky v prvním argumentu skalární hodnotu. Můžeme si tak například vytvořit následující dvě jednoduchá měřítka, která budou vracet nejvyšší, respektive nejnižší denní prodeje v aktuálním kontextu vyhodnocení.
Měřítka:
Nová měřítka si můžeme vložit do vizuálu Matice s měsíci v řádcích. Pokud současně v průřezu vybereme pouze jeden konkrétní rok, měřítko [Nejvyšší denní prodeje] bude vracet hodnotu, která představuje nejvyšší denní tržby v daném měsíci vybraného roku. Měřítko [Nejnižší denní prodeje] pak bude vracet nejnižší denní tržby, opět s ohledem na aktuální kontext vyhodnocení.
Další důležitou vlastností obou popisovaných funkcí je, že jak funkce MAXX(), tak funkce MINX() může obsahovat ve druhém argumentu odkaz na sloupec vytvořený pomocí výrazu ve virtuální tabulce dostupné pouze v rámci aktuálního výpočtu. Tento typ výpočtu můžeme vidět v následujícím měřítku.Měřítko:
V měřítku [Prodeje nejlepšího produktu] bude první proměnná obsahovat virtuální tabulku, ve které pomocí funkce ADCOLUMNS() přidáváme k názvům produktů nový počítaný sloupec. Tento nový sloupec bude obsahovat sumu za prodeje pro každý produkt. Tuto virtuální tabulku následně můžeme použít ve funkci MAXX(), a vybrat z ní nejvyšší hodnotu z nově vytvořeného sloupce. Výsledkem je hodnota představující tržby za produkt s nevyšší inkasovanou částkou v aktuálním kontextu vyhodnocení.
Všechny příklady v tomto příspěvku jsou pouze ilustrativní s cílem vysvětlit fungování funkcí MAXX() a MINX(). Praktické příklady můžete najít na stránce DAX – příklady nebo na stránce Power BI.Oficiální Microsoft dokumentace funkcí MAXX a MINX:
https://learn.microsoft.com/cs-cz/dax/maxx-function-dax
https://learn.microsoft.com/cs-cz/dax/minx-function-dax
Komentáře
Okomentovat