DAX und Datenmodelle

RANKX in Power BI: Syntax, ALL vs. ALLSELECTED, Beispiele

RANKX rankt Elemente nach einem Measure und passt sich Filtern an. Syntax, Gleichstände, ALL vs. ALLSELECTED, mit DAX-Beispielen.

Sajagan Thirugnanam

·

Aktualisiert

RANKX ist die DAX-Funktion, die jedem Element einer Tabelle auf Basis eines Measures oder Ausdrucks einen Rang zuweist, etwa 1. oder 2., und sie berechnet sich automatisch neu, wenn sich Filter und Slicer ändern. Die Syntax lautet RANKX(<table>, <expression>, [<value>], [<order>], [<ties>]). Dieser Leitfaden behandelt die Syntax, den Unterschied zwischen Ranking mit ALL und ALLSELECTED und den Umgang mit Gleichständen.

RANKX-Syntax

RANKX(<table>, <expression>, [<value>], [<order>], [<ties>
  • table - die Menge der Elemente, die Sie ranken, zum Beispiel alle Produkte.

  • expression - das Measure oder der Ausdruck, nach dem Sie ranken, zum Beispiel ein Measure Total Sales.

  • value (optional) - der Ausdruck, der für die aktuelle Zeile ausgewertet wird. Lassen Sie ihn in den meisten Fällen leer. Power BI leitet ihn aus dem Zeilenkontext ab.

  • order (optional) - DESC (Standard) vergibt Rang 1 an den höchsten Wert. ASC vergibt Rang 1 an den niedrigsten Wert.

  • ties (optional) - wie gleiche Werte gerankt werden. SKIP ist der Standard.

Ein einfaches Ranking-Measure

Angenommen, Sie haben eine Tabelle Sales, eine Tabelle Products und dieses Basis-Measure:

Total Sales = SUM(Sales[SalesAmount])

So ranken Sie Produkte nach Umsatz:

Product Rank = RANKX(ALL(Products[ProductName]), [Total Sales], , DESC)

Das rankt jedes Produkt nach Gesamtumsatz, höchster zuerst. Das dritte Argument bleibt leer, damit Power BI die aktuelle Zeile automatisch auswertet.

Warum ALL in RANKX wichtig ist

Schreiben Sie RANKX(Products, [Total Sales]) ohne Filtermodifikator, rankt das nur die Produkte, die im Visual sichtbar sind, nicht jedes Produkt im Modell. Ist ein Report auf eine Region gefiltert, wird ein Produkt nur gegen die anderen Produkte dieser Region gerankt, nicht gegen die ganze Tabelle. Das kann wie ein Fehler aussehen, ist aber nur der Filterkontext, der tut, was er immer tut.

ALL() und ALLSELECTED() beheben das, indem sie steuern, gegen welche Zeilen RANKX rankt, unabhängig vom Filterkontext darum herum.

RANKX mit ALL vs. ALLSELECTED

Rang über den gesamten Datensatz, Filter ignorieren:

Rank Global = RANKX(ALL(Products[ProductName]), [Total Sales], , DESC)

Dieser Rang ändert sich nie mit Slicern. Ein auf eine Region gefiltertes Produkt zeigt trotzdem seinen Rang über alle Regionen.

Rang nur innerhalb der aktuellen Auswahl:

Rank Selected = RANKX(ALLSELECTED(Products[ProductName]), [Total Sales], , DESC)

Wählt ein Leser in einem Slicer eine Region, berechnet sich das Ranking nur innerhalb dieser Auswahl neu. Das ist meist, was ein Dashboard braucht.

Nutzen Sie ALL für einen festen Benchmark-Rang, der sich mit Filtern nicht bewegen soll. Nutzen Sie ALLSELECTED für einen Rang „Top N in dem, was angezeigt wird“, der Slicern folgt. Unser Leitfaden zu Zeilenkontext vs. Filterkontext erklärt, warum sich ALL und ALLSELECTED unterschiedlich verhalten, und unser Leitfaden ALLSELECTED vs. ALL behandelt den Unterschied genauer.

Nach einem anderen Measure ranken

Das Argument expression kann jedes Measure sein. Dasselbe Muster rankt deshalb statt nach Umsatz nach Gewinn:

Total Profit = SUM(Sales[Profit])

Profit Rank = RANKX(ALL(Products[ProductName]), [Total Profit], , DESC)

Aufsteigend ranken

Um Rang 1 an den niedrigsten Wert zu vergeben, zum Beispiel um die Produkte mit dem niedrigsten Gewinn zu finden, setzen Sie das Argument order auf ASC:

Lowest Profit Rank = RANKX(ALL(Products[ProductName]), [Total Profit], , ASC)

Gleichstände behandeln

Nehmen Sie vier Produkte mit diesen Umsatzsummen:

Produkt

Umsatz

A

100

B

90

C

90

D

70

SKIP (der Standard)

Product Rank = RANKX(ALL(Products[ProductName]), [Total Sales], , DESC)

B und C haben bei 90 einen Gleichstand und bekommen beide Rang 2. D bekommt Rang 4: Rang 3 wird übersprungen, um den Gleichstand zu berücksichtigen.

  • A = 1

  • B = 2

  • C = 2

  • D = 4

DENSE

Product Rank Dense = RANKX(ALL(Products[ProductName]), [Total Sales], , DESC, DENSE)

B und C haben weiterhin Gleichstand auf Rang 2, aber D bekommt Rang 3. Keine Rangnummer wird übersprungen.

  • A = 1

  • B = 2

  • C = 2

  • D = 3

Beides ist korrektes DAX. Die Varianten beantworten unterschiedliche Fragen. SKIP bildet die tatsächliche Position ab, nützlich für Ranglisten wie im Sport, in denen nach einem Gleichstand eine Lücke erwartet wird. DENSE liefert eine kompakte Folge 1-2-3, nützlich, wenn Sie ein Visual auf „Rang <= 3“ filtern und genau drei verschiedene Rangwerte sehen wollen.

RANKX und Filterkontext

RANKX rankt innerhalb des Filterkontexts, in dem es läuft. Ist ein Report auf eine Region gefiltert, rankt RANKX nur die Zeilen, die nach diesem Filter übrig sind, es sei denn, ALL überschreibt ihn. Das ist derselbe Filterkontext-Mechanismus, der jedes DAX-Measure bestimmt. Unser vollständiger DAX-Leitfaden erklärt den Filterkontext von Grund auf, falls Ihnen das Verhalten von RANKX hier unbekannt ist.

FAQs

Was macht RANKX in Power BI?

RANKX weist jeder Zeile einer Tabelle auf Basis eines Measures oder Ausdrucks eine Rangnummer zu und berechnet sie dynamisch neu, wenn sich Filter und Slicer ändern.

Wie ranke ich innerhalb einer Slicer-Auswahl?

Setzen Sie die Ranking-Tabelle in ALLSELECTED() statt in ALL(). RANKX(ALLSELECTED(Products[ProductName]), [Total Sales], , DESC) rankt nur die Zeilen, die nach der aktuellen Slicer-Auswahl sichtbar sind.

Was ist Dense Ranking in Power BI?

Beim Dense Ranking teilen sich gleiche Werte einen Rang, und die nächste Rangnummer wird nicht übersprungen, zum Beispiel 1, 2, 2, 3. Setzen Sie dafür das fünfte Argument von RANKX auf DENSE. Der Standard SKIP würde dieselben Werte mit 1, 2, 2, 4 ranken.

Quellen

RANKX ist die DAX-Funktion, die jedem Element einer Tabelle auf Basis eines Measures oder Ausdrucks einen Rang zuweist, etwa 1. oder 2., und sie berechnet sich automatisch neu, wenn sich Filter und Slicer ändern. Die Syntax lautet RANKX(<table>, <expression>, [<value>], [<order>], [<ties>]). Dieser Leitfaden behandelt die Syntax, den Unterschied zwischen Ranking mit ALL und ALLSELECTED und den Umgang mit Gleichständen.

RANKX-Syntax

RANKX(<table>, <expression>, [<value>], [<order>], [<ties>
  • table - die Menge der Elemente, die Sie ranken, zum Beispiel alle Produkte.

  • expression - das Measure oder der Ausdruck, nach dem Sie ranken, zum Beispiel ein Measure Total Sales.

  • value (optional) - der Ausdruck, der für die aktuelle Zeile ausgewertet wird. Lassen Sie ihn in den meisten Fällen leer. Power BI leitet ihn aus dem Zeilenkontext ab.

  • order (optional) - DESC (Standard) vergibt Rang 1 an den höchsten Wert. ASC vergibt Rang 1 an den niedrigsten Wert.

  • ties (optional) - wie gleiche Werte gerankt werden. SKIP ist der Standard.

Ein einfaches Ranking-Measure

Angenommen, Sie haben eine Tabelle Sales, eine Tabelle Products und dieses Basis-Measure:

Total Sales = SUM(Sales[SalesAmount])

So ranken Sie Produkte nach Umsatz:

Product Rank = RANKX(ALL(Products[ProductName]), [Total Sales], , DESC)

Das rankt jedes Produkt nach Gesamtumsatz, höchster zuerst. Das dritte Argument bleibt leer, damit Power BI die aktuelle Zeile automatisch auswertet.

Warum ALL in RANKX wichtig ist

Schreiben Sie RANKX(Products, [Total Sales]) ohne Filtermodifikator, rankt das nur die Produkte, die im Visual sichtbar sind, nicht jedes Produkt im Modell. Ist ein Report auf eine Region gefiltert, wird ein Produkt nur gegen die anderen Produkte dieser Region gerankt, nicht gegen die ganze Tabelle. Das kann wie ein Fehler aussehen, ist aber nur der Filterkontext, der tut, was er immer tut.

ALL() und ALLSELECTED() beheben das, indem sie steuern, gegen welche Zeilen RANKX rankt, unabhängig vom Filterkontext darum herum.

RANKX mit ALL vs. ALLSELECTED

Rang über den gesamten Datensatz, Filter ignorieren:

Rank Global = RANKX(ALL(Products[ProductName]), [Total Sales], , DESC)

Dieser Rang ändert sich nie mit Slicern. Ein auf eine Region gefiltertes Produkt zeigt trotzdem seinen Rang über alle Regionen.

Rang nur innerhalb der aktuellen Auswahl:

Rank Selected = RANKX(ALLSELECTED(Products[ProductName]), [Total Sales], , DESC)

Wählt ein Leser in einem Slicer eine Region, berechnet sich das Ranking nur innerhalb dieser Auswahl neu. Das ist meist, was ein Dashboard braucht.

Nutzen Sie ALL für einen festen Benchmark-Rang, der sich mit Filtern nicht bewegen soll. Nutzen Sie ALLSELECTED für einen Rang „Top N in dem, was angezeigt wird“, der Slicern folgt. Unser Leitfaden zu Zeilenkontext vs. Filterkontext erklärt, warum sich ALL und ALLSELECTED unterschiedlich verhalten, und unser Leitfaden ALLSELECTED vs. ALL behandelt den Unterschied genauer.

Nach einem anderen Measure ranken

Das Argument expression kann jedes Measure sein. Dasselbe Muster rankt deshalb statt nach Umsatz nach Gewinn:

Total Profit = SUM(Sales[Profit])

Profit Rank = RANKX(ALL(Products[ProductName]), [Total Profit], , DESC)

Aufsteigend ranken

Um Rang 1 an den niedrigsten Wert zu vergeben, zum Beispiel um die Produkte mit dem niedrigsten Gewinn zu finden, setzen Sie das Argument order auf ASC:

Lowest Profit Rank = RANKX(ALL(Products[ProductName]), [Total Profit], , ASC)

Gleichstände behandeln

Nehmen Sie vier Produkte mit diesen Umsatzsummen:

Produkt

Umsatz

A

100

B

90

C

90

D

70

SKIP (der Standard)

Product Rank = RANKX(ALL(Products[ProductName]), [Total Sales], , DESC)

B und C haben bei 90 einen Gleichstand und bekommen beide Rang 2. D bekommt Rang 4: Rang 3 wird übersprungen, um den Gleichstand zu berücksichtigen.

  • A = 1

  • B = 2

  • C = 2

  • D = 4

DENSE

Product Rank Dense = RANKX(ALL(Products[ProductName]), [Total Sales], , DESC, DENSE)

B und C haben weiterhin Gleichstand auf Rang 2, aber D bekommt Rang 3. Keine Rangnummer wird übersprungen.

  • A = 1

  • B = 2

  • C = 2

  • D = 3

Beides ist korrektes DAX. Die Varianten beantworten unterschiedliche Fragen. SKIP bildet die tatsächliche Position ab, nützlich für Ranglisten wie im Sport, in denen nach einem Gleichstand eine Lücke erwartet wird. DENSE liefert eine kompakte Folge 1-2-3, nützlich, wenn Sie ein Visual auf „Rang <= 3“ filtern und genau drei verschiedene Rangwerte sehen wollen.

RANKX und Filterkontext

RANKX rankt innerhalb des Filterkontexts, in dem es läuft. Ist ein Report auf eine Region gefiltert, rankt RANKX nur die Zeilen, die nach diesem Filter übrig sind, es sei denn, ALL überschreibt ihn. Das ist derselbe Filterkontext-Mechanismus, der jedes DAX-Measure bestimmt. Unser vollständiger DAX-Leitfaden erklärt den Filterkontext von Grund auf, falls Ihnen das Verhalten von RANKX hier unbekannt ist.

FAQs

Was macht RANKX in Power BI?

RANKX weist jeder Zeile einer Tabelle auf Basis eines Measures oder Ausdrucks eine Rangnummer zu und berechnet sie dynamisch neu, wenn sich Filter und Slicer ändern.

Wie ranke ich innerhalb einer Slicer-Auswahl?

Setzen Sie die Ranking-Tabelle in ALLSELECTED() statt in ALL(). RANKX(ALLSELECTED(Products[ProductName]), [Total Sales], , DESC) rankt nur die Zeilen, die nach der aktuellen Slicer-Auswahl sichtbar sind.

Was ist Dense Ranking in Power BI?

Beim Dense Ranking teilen sich gleiche Werte einen Rang, und die nächste Rangnummer wird nicht übersprungen, zum Beispiel 1, 2, 2, 3. Setzen Sie dafür das fünfte Argument von RANKX auf DENSE. Der Standard SKIP würde dieselben Werte mit 1, 2, 2, 4 ranken.

Quellen

Zeigen Sie uns Ihren Report, dem niemand traut.

1 · Ein Gespräch von 30 Minuten.

2 · Wir sehen uns gemeinsam Ihre aktuellen Reports an.

3 · Wir sagen Ihnen, was wir tun würden.

Zeigen Sie uns Ihren Report, dem niemand traut.

1 · Ein Gespräch von 30 Minuten.

2 · Wir sehen uns gemeinsam Ihre aktuellen Reports an.

3 · Wir sagen Ihnen, was wir tun würden.

Zeigen Sie uns Ihren Report, dem niemand traut.

1 · Ein Gespräch von 30 Minuten.

2 · Wir sehen uns gemeinsam Ihre aktuellen Reports an.

3 · Wir sagen Ihnen, was wir tun würden.

CaseWhen ist eine BI-Beratung aus Berlin. Wir bauen Reporting, dem die Geschäftsführung vertraut, auf dem Microsoft-Stack: Power BI, Fabric und Azure.

Berlin, Deutschland

© CaseWhen Consulting GmbH

Deutsch

CaseWhen ist eine BI-Beratung aus Berlin. Wir bauen Reporting, dem die Geschäftsführung vertraut, auf dem Microsoft-Stack: Power BI, Fabric und Azure.

Berlin, Deutschland

© CaseWhen Consulting GmbH

Deutsch

CaseWhen ist eine BI-Beratung aus Berlin. Wir bauen Reporting, dem die Geschäftsführung vertraut, auf dem Microsoft-Stack: Power BI, Fabric und Azure.

Berlin, Deutschland

© CaseWhen Consulting GmbH

Deutsch