Beräkna rangordning
RANKX
DAX-funktionen är en speciell iteratorfunktion som du kan använda för att beräkna rangordningar. Syntaxen ser ut så här:
RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])
Precis som alla iteratorfunktioner måste du skicka in en tabell och ett uttryck. Du kan också skicka ett rangvärde, ange orderriktningen eller bestämma hur du ska hantera rangordningar när värden är bundna.
Sorteringsriktning
Sorteringsriktningen är antingen stigande eller fallande. När du rangordnar något positivt, till exempel intäktsvärden, använder du förmodligen fallande ordning så att de högsta intäkterna rangordnas först. När du rangordnar något ogynnsamma, till exempel kundklagomål, kan du använda stigande ordning så att det lägsta antalet klagomål rangordnas först. När du inte skickar ett orderargument använder funktionen 0 (noll) ( för fallande ordning).
Hantering vid oavgjort
Du kan hantera oavgjorda lägen vid rangordning genom att hoppa över nästa värde i rangordningen, eller använda en tätare rangordning, som använder nästa placering direkt efter ett oavgjort (delat) värde. När du inte skickar ett ties-argument använder funktionen Hoppa över. Du får möjlighet att arbeta med ett exempel på varje oavgjort argument senare i den här lektionen.
Skapa mått för rangordning
Lägg till följande mått i tabellen Produkt :
Product Quantity Rank =
RANKX(
ALL('Product'[Product]),
[Quantity]
)
Lägg till måttet Rangordning för produktkvantitet till tabellvisualiseringen som finns på Sidan 2 i rapporten. Tabellvisualiseringen grupperar cykelprodukter och visar kvantitet, som beställer produkter efter fallande kvantitet.
Funktionen RANKX
itererar över en tabell som returneras av ALL
DAX-funktionen. Funktionen ALL
används för att returnera alla rader i en modelltabell eller värden i en eller flera kolumner och ignorerar alla filter. I det här fallet returnerar den därför en tabell som består av alla kolumnvärden för Produkt i tabellen Produkt . Funktionen RANKX
måste använda ALL
funktionen eftersom det visuella tabellobjektet grupperas efter produkt (vilket är ett filter i tabellen Produkt ).
I tabellvisualiseringen ser du att två produkter ligger lika på en oavgjord tionde plats och att nästa produkts plats i rangordningen är 12. Det här visuella objektet är ett exempel på hur du använder argumentet Överhoppat vid oavgjort läge.
Nästa uppgift är att ange följande logik för att ändra måttdefinitionen för Rangordning efter produktkvantitet så att tät rangordning används:
Product Quantity Rank =
RANKX(
ALL('Product'[Product]),
[Quantity],
,
,
DENSE
)
Observera att en ingen plats i rangordningen hoppas över längre i tabellvisualiseringen. Efter de två produkter som ligger på en oavgjord tionde plats är nästa plats i rangordningen 11.
Observera att tabellvisualiseringens summa för Rangordning efter produktkvantitet är ett (1). Orsaken är att summan av alla produkter är rangordnad.
Det är inte lämpligt att rangordna summan av produkter, så du kommer nu att använda följande logik för att ändra måttdefinitionen så att den returnerar BLANK, såvida inte en enskild produkt filtreras:
Product Quantity Rank =
IF(
HASONEVALUE('Product'[Product]),
RANKX(
ALL('Product'[Product]),
[Quantity],
,
,
DENSE
)
)
Observera att den totala rangordningen för produktkvantitet nu är TOM, vilket uppnåddes med hjälp HASONEVALUE
av DAX-funktionen för att testa om kolumnen Produkt i tabellen Produkt har ett enda värde i filterkontexten. Det är fallet för varje produktgrupp, men inte för summan, som representerar alla produkter.
Filterkontext och HASONEVALUE
funktionen introduceras i modulen filterkontext.