Funkce TOPN() je filtrovací iterační funkce vracející tabulku s prvními N řádky podle zadaných argumentů. Funkci TOPN() můžeme používat pro definici počítané tabulky, při psaní DAX dotazů, ale také v měřítku nebo počítaném sloupci.
Funkce TOPN
Syntaxe funkce TOPN:
Prvním argumentem funkce TOPN() je počet řádků, které se mají vrátit. Jako první argument můžeme použít číslo nebo výraz. Druhým argumentem je tabulka, ze které chceme načíst prvních N řádků. Třetí argument může být výraz vracející skalární hodnotu, například měřítko, nebo odkaz na sloupec v tabulce ve druhém argumentu funkce. Výraz ve druhém argumentu je vyhodnocen v kontextu řádku tabulky uvedené ve druhém argumentu, a podle hodnot třetího argumentu je tato tabulka seřazena a filtrována na prvních N řádků. Ve čtvrtém argumentu pak můžeme volitelně zvolit, zda chceme tabulku seřadit sestupně nebo vzestupně. Pokud čtvrtý argument vynecháme, je výchozí řazení sestupné (DESC).
Volitelně je možné přidat také další argumenty, díky kterým můžeme ovlivňovat řazení tabulky ve druhém argumentu při vyhledání prvních N řádků.
Funkce TOPN() může za určitých okolností vracet více řádků, než je zadaný počet v prvním argumentu funkce, jak bude možné vidět v příkladech níže v tomto příspěvku. Výsledná tabulka také nemusí být seřazena tak, jak je uvedeno ve třetím a dalších argumentech funkce. Řazení je důležité pro určení prvních N řádků, ale těchto N řádků pak může být vráceno v různém pořadí.
Příklady TOPN
Měřítko:
Začněme jednoduchým příkladem. V použitém cvičném modelu si můžeme vytvořit novou počítanou tabulku, jejímž výsledkem bude sedm nejlepších produktů podle sumy inkasované za jejich prodeje. Takto popsanou tabulku můžeme jednoduše vytvořit právě pomocí funkce TOPN().
Počítaná tabulka:
Prvním argumentem funkce TOPN() je počet řádků, které chceme vrátit z tabulky ve druhém argumentu. Tabulka ve druhém argumentu je pak pro výběr prvních sedmi řádků seřazena podle sumy prodejů za každý produkt, od nejvyšší hodnoty pod nejnižší. Výsledná počítaná tabulka může vypadat následovně.
Pokud bychom chtěli mít součástí tabulky i hodnotu, podle které je tabulka seřazena, můžeme přidat do tabulky ve druhém argumentu funkce TOPN() sloupec se sumou prodejů, a tento sloupec pak bude součástí výsledné tabulky.
Počítaná tabulka:
Výsledná tabulka obsahuje také hodnoty prodejů. Jak je možné vidět na obrázku níže, tato tabulka není seřazena podle sloupce určeného pro vyhledání prvních N řádků.
Prvních N řádků můžeme určit také podle hodnot, které jsou přímo součástí tabulky ve druhém argumentu funkce. Z tabulky 'Product' můžeme například filtrovat prvních 7 produktů s nejvyšší katalogovou cenou, která je ve sloupci 'Product'[List Price].
Počítaná tabulka:
Jelikož je na sedmém místě v pořadí více produktů se stejnou katalogovou cenou, výsledná tabulka obsahuje více než 7 řádků, jak bylo zadáno v prvním argumentu funkce TOPN().
Pokud bychom chtěli mít jistotu, že výsledkem bude opravdu maximálně prvních N řádků, musíme použít jednoznačný identifikátor v tabulce. Takovým identifikátorem v tabulce 'Product' je sloupec 'Product'[ProductKey]. Můžeme tedy přidat k předchozí definici počítané tabulky pátý a šestý argument. Tyto dodatečné argumenty budou použity pro řazení v případě duplicitních hodnot na N-tém řádku tabulky.
Počítaná tabulka:
Jak můžeme vidět na obrázku níže, nyní již je výsledkem tabulka se sedmi řádky.
Jak již bylo uvedeno výše, funkci TOPN() můžeme používat mimo jiné také v měřítku. Pokud bychom například chtěli získat sumu za prodané produkty pro 7 nejvíce prodávaných produktů, můžeme použít následující výpočet.
Měřítko:
Měřítko [Prodeje TOP 7 produktů] má ve funkci CALCULATE() filtr, který obsahuje tabulku produktů, filtrovanou na 7 produktů s nejvyššími prodeji v aktuálním kontextu vyhodnocení. Pokud vložíme nové měřítko do vizuálu Tabulka, spolu s kategoriemi produktů v řádcích, výsledek může vypadat následovně.
Jak je vidět na obrázku výše, měřítko [Prodeje TOP 7 produktů] pro každou kategorii nižší hodnotu, než je výsledek měřítka [Prodeje], protože ve filtru měřítka [Prodeje TOP 7 produktů] používáme tabulku obsahující pouze 7 nejprodávanějších produktů dostupných v aktuálním kontextu vyhodnocení.
Nejprodávanější produkty pak můžeme nechat přímo vypsat v měřítku. Pouze musíme myslet na to, že výsledkem měřítka musí být skalární hodnota. Následující výpočet vrátí nejprodávanější produkt podle počtu prodaných kusů.
Měřítko:
Pokud měřítko použijeme v Power BI reportu bez jakýchkoliv filtrů, výsledkem bude produkt z největším množstvím prodaných kusů.
V případě že do vizuálu tabulky přidáme kategorie produktů, a v průřezu vybereme jeden konkrétní rok, výsledkem měřítka bude nejprodávanější produkt v každé kategorii a vybraném roce.
Jednotlivé argumenty, kromě argumentu pro určení způsobu řazení, můžeme určit dynamicky pomocí výrazů. Můžeme tak vytvořit například následující report, ve kterém si uživatel může vybrat počet nejlepších produktů k zobrazení a kritérium pro výběr produktů.
Pokud vybereme jako kritérium pro výběr měřítko [Prodeje] a změníme počet zobrazených produktů na 7, výsledek měřítka se dynamicky změní.
Takto vytvořené měřítko je již relativně komplexní a vrací výsledky na základě vybraných hodnot v průřezech. Tyto průřezy jsou vytvořeny v Power BI reportu jako parametry. Celé řešení by vydalo na samostatný příspěvek a je dostupné ke stažení níže pod tímto příspěvkem. Pro úplnost uvedu alespoň definici použitého měřítka.
Měřítko:
Smyslem poslední ukázky je pouze znázornit, že jednotlivé parametry funkce TOPN() mohou být vyplněny také dynamicky. Praktický příklad použití funkce TOPN() můžete najít v samostatném příspěvku pod tímto odkazem. V odkazovaném článku je zobrazen postup, jak vytvořit v Power BI reportu Tooltip zobrazující TOPN nejlepších položek podle aktuálního kontextu vyhodnocení.
https://docs.microsoft.com/cs-cz/dax/topn-function-dax
Komentáře
Okomentovat