Iteratorfunktionen verwenden
Iteratorfunktionen werten einen Ausdruck für jede Zeile in einer Tabelle aus. Sie bieten Ihnen Flexibilität und Kontrolle darüber, wie Ihr Modell Daten zusammenfasst.
Einspaltige Zusammenfassungsfunktionen, wie SUM, COUNT, MIN und MAX haben äquivalente Iteratorfunktionen mit einem „X“-Suffix, wie SUMX, COUNTX, MINX und MAXX. Es gibt auch spezielle Iteratorfunktionen für Filterung, Rangfolge und semiadditive Berechnungen im Zeitverlauf.
Jede Iteratorfunktion erfordert eine Tabelle und einen Ausdruck. Die Tabelle kann eine Modelltabelle oder ein beliebiger Ausdruck sein, der eine Tabelle zurückgibt. Der Ausdruck muss für jede Zeile einen einzelnen Wert zurückgeben.
Einspaltige Zusammenfassungsfunktionen funktionieren wie SUM als Abkürzung. Power BI konvertiert SUM intern in SUMX. Die beiden folgenden Measures geben beispielsweise das gleiche Ergebnis bei gleicher Leistung zurück:
Revenue = SUM(Sales[Sales Amount])
Revenue =
SUMX(
Sales,
Sales[Sales Amount]
)
Iteratorfunktionen werten den Ausdruck für jede Zeile in einer Tabelle unter Verwendung des Zeilenkontexts aus, was bedeutet, dass sie jeweils eine Zeile verarbeiten, um das Endergebnis zu berechnen. Anschließend wird die Tabelle im Filterkontext ausgewertet. Wenn ein visueller Bericht beispielsweise nach Geschäftsjahr FY2020 filtert, umfasst die Tabelle Sales nur Verkaufszeilen aus diesem Jahr.
Wichtig
Die Verwendung von Iteratorfunktionen mit großen Tabellen und komplexen Ausdrücken kann die Leistung beeinträchtigen. Funktionen wie SEARCH und LOOKUPVALUE können teuer sein. Verwenden Sie wenn möglich RELATED, um eine bessere Leistung zu erzielen.
Iteratorfunktionen für komplexe Zusammenfassung
Mit Iteratorfunktionen können Sie mehr als eine einzelne Spalte aggregieren. Eine Umsatzkennzahl kann beispielsweise die Bestellmenge, den Stückpreis und einen Rabattfaktor für jede Zeile multiplizieren und dann die Ergebnisse summieren.
Revenue =
SUMX(
Sales,
Sales[Order Quantity] * Sales[Unit Price] * (1 - Sales[Unit Price Discount Pct])
)
Iteratorfunktionen können auch auf verwandte Tabellen verweisen. Mit der Funktion RELATED kann die Rabattkennzahl auf den Listenpreis in der Produkttabelle zugreifen:
Discount =
SUMX(
Sales,
Sales[Order Quantity]
* (
RELATED('Product'[List Price]) - Sales[Unit Price]
)
)
Das folgende Bild zeigt ein visuelles Tabellenelement mit den Spalten „Month“, „Revenue“ und „Discount“. „Revenue“ und „Discount“ sind die Measures, die zuvor erstellt wurden.
Iteratorfunktionen für bessere Grain-Zusammenfassung
Iteratorfunktionen können auch Daten mit unterschiedlichen Detailebenen (Grain) zusammenfassen. Beispielsweise möchten Sie möglicherweise einen Durchschnitt auf Einzelpostenebene oder auf Verkaufsauftragsebene berechnen.
In diesem Beispiel umfasst die Tabelle Sales eine Zeile für jede Position in einem Verkaufsauftrag. Jede Zeile umfasst Details wie Auftragsnummer, Produkt, verkaufte Menge, Stückpreis und Rabatt. Mehrere Zeilen können die gleiche Verkaufsauftragsnummer haben und verschiedene Artikel innerhalb des gleichen Auftrags darstellen.
Verwenden Sie die Funktion AVERAGEX, um jede Zeile in der Tabelle Sales zu durchlaufen und so den durchschnittlichen Umsatz pro Auftragsposition (Position) zu berechnen. Die Formel berechnet den Umsatz für jede Position und berechnet dann den Durchschnitt des Ergebnisses über alle Positionen im aktuellen Filterkontext:
Revenue Avg Order Line =
AVERAGEX(
Sales,
Sales[Order Quantity] * Sales[Unit Price] * (1 - Sales[Unit Price Discount Pct])
)
Falls der durchschnittliche Umsatz je Verkaufsauftrag und nicht für jede Position berechnet werden soll, lässt sich die Funktion VALUES verwenden, um zunächst eine Liste einzigartiger Verkaufsauftragsnummern abzurufen. Dann durchläuft AVERAGEX jeden Auftrag und ermittelt den Durchschnittswert des Gesamtumsatzes für jeden Auftrag:
Revenue Avg Order =
AVERAGEX(
VALUES('Sales Order'[Sales Order]),
[Revenue]
)
Die Funktion VALUES gibt die einzelnen Verkaufsaufträge auf Grundlage des aktuellen Filterkontexts zurück, und AVERAGEX durchläuft also jeden Verkaufsauftrag für jeden Monat.
Rangfolge mit Iteratorfunktionen
Die Funktion RANKX berechnet Ränge, indem sie eine Tabelle durchläuft und für jede Zeile einen Ausdruck auswertet.
Die Reihenfolge kann aufsteigend oder absteigend sein. Bei der Rangfolge des Umsatzes wird normalerweise eine absteigende Reihenfolge verwendet, sodass der höchste Wert an erster Stelle steht. Wenn Sie so etwas wie Beschwerden einstufen, verwenden Sie möglicherweise eine aufsteigende Reihenfolge, sodass der niedrigste Wert zuerst rangiert. Standardmäßig verwendet RANKX eine absteigende Reihenfolge, und bei Gleichständen werden die Ränge übersprungen.
Zum Beispiel kann ein Measure für den Produktmengenrang RANKX und die Funktion ALL verwenden, um Produkte nach Menge zu ordnen:
Product Quantity Rank =
RANKX(
ALL('Product'[Product]),
[Quantity]
)
Die Funktion ALL entfernt Filter, RANKX ordnet also alle Produkte. In der folgenden Abbildung liegen zwei Produkte gleichauf auf dem zehnten Platz, sodass das nächste Produkt auf Platz zwölf liegt und Rang 11 übersprungen wird.
Sie können auch eine Dense-Rangfolge verwenden, bei der der nächste Rang nach einem Gleichstand zugewiesen wird, ohne Zahlen zu überspringen. Das Measure kann für eine Dense-Rangfolge das Argument DENSE enthalten:
Product Quantity Rank =
RANKX(
ALL('Product'[Product]),
[Quantity],
,
,
DENSE
)
Jetzt, nachdem zwei Produkte gleichauf auf dem zehnten Platz liegen, wird das nächste Produkt auf Platz elf platziert und die Nummerierung setzt sich fortlaufend fort, ohne Rang 11 zu überspringen.
In diesem Visual wird in der Gesamtzeile für das Measure Product Quantity Rank eine angezeigt, da die Summe für alle Produkte ebenfalls in eine Rangfolge gebracht wird und nur ein Wert vorhanden ist.
Um eine Rangfolge der Gesamtzahl zu vermeiden, kann das Measure die Funktion HASONEVALUE verwenden, um BLANK zurückzugeben, so lange nicht ein einzelnes Produkt gefiltert wird:
Product Quantity Rank =
IF(
HASONEVALUE('Product'[Product]),
RANKX(
ALL('Product'[Product]),
[Quantity],
,
,
DENSE
)
)
Die Summe für Product Quantity Rank ist jetzt leer.
Die Funktion HASONEVALUE überprüft, ob die Produktspalte im Filterkontext einen einzelnen Wert enthält. Dies gilt für jede einzelne Produktgruppe, nicht jedoch für die Gesamtsumme, die für alle Produkte steht.
Mit Iteratorfunktionen stehen leistungsstarke Optionen zur Verfügung, um Daten in Power BI-Modellen zusammenzufassen, zu aggregieren und zu bewerten. Sie unterstützen komplexe Berechnungen und ermöglichen Ihnen, den Detaillierungsgrad Ihrer Berichte zu steuern.