Verwenden von Iteratorfunktionen zur Aggregation

Abgeschlossen

Jede einspaltige Zusammenfassungsfunktion verfügt über eine entsprechende Iteratorfunktion. In den folgenden Abschnitten werden zwei Aggregationsszenarien betrachtet, in denen Iteratorfunktionen nützlich sind: komplexe Zusammenfassungen und granularere Zusammenfassungen.

Komplexe Zusammenfassung

In diesem Abschnitt erstellen Sie das erste Measure, das eine Iteratorfunktion verwendet. Laden Sie zunächst die Datei Adventure Works DW 2020 M05.pbix herunter, und öffnen Sie sie. Fügen Sie als Nächstes die folgende Measuredefinition hinzu:

Revenue =
SUMX(
    Sales,
    Sales[Order Quantity] * Sales[Unit Price] * (1 - Sales[Unit Price Discount Pct])
)

Formatieren Sie das Measure Revenue als Währung mit zwei Dezimalstellen, und fügen Sie es dann dem Tabellenvisual auf Seite 1 des Berichts hinzu.

Abbildung eines Tabellenvisuals mit zwei Spalten: „Month“ und „Revenue“. Die Daten eines Jahres werden angezeigt.

Mithilfe einer Iteratorfunktion aggregiert die Formel für das Measure Revenue mehr als die Werte einer einzelnen Spalte. Für jede Zeile werden Werte im Zeilenkontext von drei Spalten verwendet, um den Umsatzbetrag zu berechnen.

Fügen Sie nun ein weiteres Measure hinzu:

Discount =
SUMX(
    Sales,
    Sales[Order Quantity]
    * (
        RELATED('Product'[List Price]) - Sales[Unit Price]
    )
)

Formatieren Sie das Measure Discount als Währung mit zwei Dezimalstellen, und fügen Sie es dem Tabellenvisual hinzu.

Abbildung eines Tabellenvisuals mit drei Spalten: „Month“, „Revenue“ und „Discount“. Die Daten eines Jahres werden angezeigt.

Beachten Sie, dass die Formel die RELATED-Funktion verwendet. Denken Sie daran, dass der Zeilenkontext nicht über die Tabelle hinausgeht. Wenn die Formel auf Spalten in anderen Tabellen verweisen muss und zwischen diesen Tabellen Modellbeziehungen bestehen, verwenden Sie die RELATED-Funktion für die Beziehung auf der 1-Seite oder die RELATEDTABLE-Funktion für die Beziehung auf der n-Seite.

Zusammenfassungen mit höherer Granularität

Im folgenden Beispiel wird von der Anforderung ausgegangen, einen Bericht über den durchschnittlichen Umsatz auszugeben. Fügen Sie das folgende Measure hinzu:

Revenue Avg =
AVERAGEX(
    Sales,
    Sales[Order Quantity] * Sales[Unit Price] * (1 - Sales[Unit Price Discount Pct])
)

Formatieren Sie das Measure Revenue Avg als Währung mit zwei Dezimalstellen, und fügen Sie es dem Tabellenvisual hinzu.

Abbildung eines Tabellenvisuals mit vier Spalten: „Month“, „Revenue“, „Discount“ und „Revenue Avg“. Die Daten eines Jahres werden angezeigt.

Beachten Sie, dass Durchschnitt die Summe der Werte dividiert durch die Anzahl der Werte bedeutet. Dies wirft jedoch eine Frage auf: Wofür steht die Anzahl der Werte? In diesem Fall entspricht die Anzahl der Werte der Anzahl von Ausdrücken, die nicht als BLANK ausgewertet wurden. Da die Iteratorfunktion die Zeilen der Tabelle Sales durchläuft, bedeutet Durchschnitt außerdem den Umsatz pro Zeile. Wenn Sie diese Logik einen Schritt weiter führen, bedeutet dies: Da jede Zeile in der Tabelle Sales eine Kaufbestellung enthält, bedeutet dies noch genauer Umsatz pro Bestellung.

Dementsprechend sollten Sie das Measure Revenue Avg in Revenue Avg Order Line umbenennen, damit Berichtsbenutzer genau wissen, was als Grundlage für den Durchschnitt verwendet wird.

Im folgenden Beispiel wird eine Iteratorfunktion verwendet, um ein neues Measure zu erstellen, das die Granularität auf die Ebene von Kaufbestellungen hebt (eine Kaufbestellung besteht aus mindestens einem bestellten Artikel). Fügen Sie das folgende Measure hinzu:

Revenue Avg Order =
AVERAGEX(
    VALUES('Sales Order'[Sales Order]),
    [Revenue]
)

Formatieren Sie das Measure Revenue Avg Order als Währung mit zwei Dezimalstellen, und fügen Sie es dem Tabellenvisual hinzu.

Abbildung eines Tabellenvisuals mit fünf Spalten: „Month“, „Revenue“, „Discount“, „Revenue Avg Order Line“ und „Revenue Avg Order“. Die Daten eines Jahres werden angezeigt.

Erwartungsgemäß ist der durchschnittliche Umsatz pro Bestellung immer höher als der durchschnittliche Umsatz für einen einzelnen bestellten Artikel.

Beachten Sie, dass die Formel die DAX-Funktion VALUES verwendet. Mit dieser Funktion können Ihre Formeln ermitteln, welche Werte sich im Filterkontext befinden. In diesem Fall durchläuft diese AVERAGEX-Funktion die einzelnen Bestellungen im Filterkontext. Mit anderen Worten: Sie durchläuft jede Kaufbestellung für den Monat. Der Filterkontext und die VALUES-Funktion werden im Modul zum Filterkontext eingeführt.