Počítání pořadí
Funkce RANKX
DAX je speciální funkce iterátoru, kterou můžete použít k výpočtu pořadí. Její syntaxe je následující:
RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])
Podobně jako u všech funkcí iterátoru musíte předat tabulku a výraz. Volitelně můžete předat hodnotu pořadí, nastavit směr pořadí nebo určit, jak se mají pořadí zpracovávat, když jsou hodnoty svázané.
Směr pořadí
Směr pořadí je buď vzestupný (Ascending), nebo sestupný (Descending). Při řazení něčeho příznivého, jako jsou například hodnoty výnosů, budete pravděpodobně používat sestupné pořadí, aby nejvyšší výnosy byly seřazeny jako první. Při řazení něčeho nepříznivého, jako jsou stížnosti zákazníků, můžete použít vzestupné pořadí, aby byl nejnižší počet stížností seřazený na prvním místě. Pokud nepředáte argument pořadí, funkce použije hodnotu 0 (nula) (pro sestupné pořadí).
Jak pracovat se shodnými hodnotami
Pokud máte několik shodných hodnot, můžete pořadová místa přeskočit, nebo použít zhuštěné řazení, což znamená, že číslování následujícího pořadového místa by mělo navázat na číslo místa, o které se dělí shodné hodnoty. Pokud nepředáte argument shod, funkce použije skip. Později v této lekci budete mít možnost pracovat s příkladem každého argumentu vazby.
Vytváření měr pro určení pořadí
Do tabulky Product přidejte následující míru:
Product Quantity Rank =
RANKX(
ALL('Product'[Product]),
[Quantity]
)
Do vizuálu tabulky, který najdete na stránce 2 v sestavě přidejte míru Product Quantity Rank (Pořadí produktů podle množství). Vizuál tabulky seskupuje produkty související s koly a zobrazí jejich množství v sestupném pořadí.
Funkce RANKX
iteruje v tabulce, která je vrácena funkcí jazyka ALL
DAX. Funkce ALL
se používá k vrácení všech řádků v tabulce modelu nebo hodnot v jednom nebo více sloupcích a ignoruje všechny filtry. Proto v tomto případě vrátí tabulku, která se skládá ze všech hodnot sloupců Product v tabulce Product . Funkce RANKX
musí používat ALL
funkci, protože vizuál tabulky se seskupí podle produktu (což je filtr tabulky Product ).
Ve vizuálu tabulky si všimněte, že se dva produkty dělí o desáté místo a že další produkt je dvanáctý v pořadí. Tento vizuál je příkladem situace, kdy argument Ties používá přeskočení pořadového místa.
Vaším úkolem je zadat následující logiku a upravit definici míry Product Quantity Rank (Pořadí produktů podle množství) tak, aby používala zhuštěné řazení:
Product Quantity Rank =
RANKX(
ALL('Product'[Product]),
[Quantity],
,
,
DENSE
)
Všimněte si, že ve vizuálu tabulky již neexistuje řazení, které by přeskakovalo pořadová místa. Po dvou produktech, které se dělí o 10. místo, následuje produkt na 11. místě.
Všimněte si, že vizuální součet tabulky Product Quantity Rank (Pořadí produktů podle množství) je jedna (1). Důvodem je skutečnost, že celkové hodnoty u všech produktů jsou seřazené.
Vytvářet pořadí celkového počtu produktů není vhodné. Pomocí následující logiky tedy upravte definici míry tak, aby vracela prázdnou hodnotu, pokud nebude vyfiltrován jen jeden produkt:
Product Quantity Rank =
IF(
HASONEVALUE('Product'[Product]),
RANKX(
ALL('Product'[Product]),
[Quantity],
,
,
DENSE
)
)
Všimněte si, že celkový počet Product Quantity Rank (Pořadí produktů podle množství) je teď BLANK, což se dosáhlo pomocí HASONEVALUE
funkce DAX, která otestuje, jestli má sloupec Product v tabulce Product jednu hodnotu v kontextu filtru. Platí to pro každou skupinu produktů, ale ne pro součet tabulky, která zahrnuje všechny produkty.
Kontext filtru a HASONEVALUE
funkce budou představeny v modulu kontextu filtru.