Berechnen von Rangfolgen

Abgeschlossen

Die DAX-Funktion RANKX ist eine spezielle Iteratorfunktion, mit der Sie Rangfolgen berechnen können. Die Syntax ist wie folgt:

RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])

Ähnlich wie bei allen Iteratorfunktionen müssen Sie eine Tabelle und einen Ausdruck übergeben. Optional können Sie einen Rangwert übergeben, um die Reihenfolge der Ränge zu ermitteln oder um festzulegen, wie Ränge bei übereinstimmenden Werten behandelt werden.

Richtung der Reihenfolge

Die Richtung der Reihenfolge ist aufsteigend oder absteigend. Wenn eine Rangfolge von etwas Vorteilhaftem erstellt wird, z. B. von Umsatzwerten, verwenden Sie wahrscheinlich eine absteigende Reihenfolge, damit der höchste Umsatz in der Rangfolge ganz vorne steht. Wenn Sie etwas Nachteiligem (z. B. Kundenbeschwerden) einen Rang zuweisen, können Sie die aufsteigende Reihenfolge verwenden, damit die niedrigste Anzahl von Beschwerden den ersten Rang erhält. Wenn Sie kein Argument für die Reihenfolge übergeben, verwendet die Funktion die absteigende Reihenfolge.

Behandeln von gleichen Werten

Sie können gleiche Werte (Ties) behandeln, indem Sie Rangwerte überspringen oder eine lückenlose Rangfolge erzwingen, bei der nach gleichen Werten der nächste Rangwert verwendet wird. Wenn Sie kein Argument für die Behandlung gleicher Werte übergeben, überspringt die Funktion die entsprechende Anzahl von Rängen. In den nachfolgenden Abschnitten haben Sie die Möglichkeit, mit einem Beispiel für jedes Ties-Argument zu arbeiten.

Erstellen von Rangfolgemeasures

Fügen Sie das folgende Measure hinzu:

Product Quantity Rank =
RANKX(
    ALL('Product'[Product]),
    [Quantity]
)

Fügen Sie das Measure Product Quantity Rank dem Tabellenvisual auf Seite 2 des Berichts hinzu. Das Tabellenvisual gruppiert die Fahrradprodukte und zeigt die Menge an, wobei die Produkte nach absteigender Menge sortiert sind.

Die RANKX-Funktion durchläuft eine Tabelle, die von der DAX-Funktion ALL zurückgegeben wird. Mit der ALL-Funktion werden alle Zeilen in einer Modelltabelle oder Werte in einer oder mehreren Spalten zurückgegeben. Dabei werden alle Filter ignoriert. Daher wird in diesem Fall eine Tabelle zurückgegeben, die alle Werte der Spalte Product in der Tabelle „Product“ umfasst. Die RANKX-Funktion muss die ALL-Funktion verwenden, da das Tabellenvisual nach Produkt gruppiert wird (dies ist ein Filter in der Tabelle „Product“).

Beachten Sie, dass sich im Tabellenvisual zwei Produkte auf Rang 10 befinden und dass der Rang des nächsten Produkts 12 ist. Dieses Visual ist ein Beispiel für die Verwendung des Ties-Arguments Skip (Überspringen).

Abbildung eines Tabellenvisuals mit dem Namen „Bike Sales“. Es enthält drei Spalten: „Product“, „Quantity“ und „Product Quantity Rank“. Die Tabellenzeilen sind in absteigender Reihenfolge nach Menge sortiert. Zwei Produkte teilen sich den 10. Rang, und das nächste Produkt hat den Rang 12.

Ihre nächste Aufgabe besteht darin, die folgende Logik einzugeben, um die Definition des Measures Product Quantity Rank so zu ändern, dass für die Rangfolge das Argument „Dense“ verwendet wird:

Product Quantity Rank =
RANKX(
    ALL('Product'[Product]),
    [Quantity],
    ,
    ,
    DENSE
)

Beachten Sie, dass im Tabellenvisual nun kein Rang mehr übersprungen wird. Nach den beiden Produkten, die gemeinsam auf dem zehnten Rang stehen, folgt als nächster Rang 11.

Abbildung eines Tabellenvisuals mit dem Namen „Bike Sales“. Es enthält drei Spalten: „Product“, „Quantity“ und „Product Quantity Rank“. Die Tabellenzeilen sind in absteigender Reihenfolge nach Menge sortiert. Zwei Produkte teilen sich Rang 10, und das nächste Produkt hat den Rang 11.

Beachten Sie, dass die Summe des Tabellenvisuals für Product Quantity Rank 1 ist. Der Grund hierfür ist, dass die Summe aller Produkte bewertet wird.

Abbildung mit der Summe „1“ für „Product Quantity Rank“.

Es ergibt keinen Sinn, der Summe der Produkte einen Rang zuzuweisen. Verwenden Sie daher die folgende Logik, um die Definition des Measures so zu ändern, dass es BLANK zurückgibt, wenn nicht nach einem einzelnem Produkt gefiltert wird:

Product Quantity Rank =
IF(
    HASONEVALUE('Product'[Product]),
    RANKX(
        ALL('Product'[Product]),
        [Quantity],
        ,
        ,
        DENSE
    )
)

Abbildung mit der Summe BLANK für „Product Quantity Rank“.

Beachten Sie, dass die Summe für Product Quantity Rank nun BLANK ist und daher kein Wert angezeigt wird. Dies wurde erreicht, indem mit der DAX-Funktion HASONEVALUE getestet wurde, ob die Spalte Product in der Tabelle „Product“ im Filterkontext einen einzelnen Wert aufweist. Dies ist der Fall für jede Produktgruppe, jedoch nicht für die Summe, die ja für alle Produkte steht.

Der Filterkontext und die HASONEVALUE-Funktion werden im Modul zum Filterkontext eingeführt.