Verschachtelte Aggregierung
In einer Diagrammformel muss jeder Feldname von genau einer Aggregierungsfunktion eingeschlossen sein. Wenn Sie Aggregierungen verschachteln müssen, können Sie Aggr() verwenden, um eine zweite Aggregierungsebene hinzuzufügen. Aggr() enthält eine Aggregierungsfunktion als Argument.
Immer eine Aggregieruingsebene in einer Funktion
Eine typische App setzt sich beispielsweise wie folgt zusammen:
- eine Million Datensätze in den Daten
- hundert Zeilen in einer Pivottabelle
- ein KPI in einem Messzeiger oder einem Textfeld
Obwohl sie in verschiedenen Größenordnungen vorliegen, können alle drei Zahlen dennoch alle Daten darstellen. Es handelt sich einfach um verschiedene Aggregierungsebenen.
Aggregierungsfunktionen verwenden die Werte vieler Datensätze als Eingabe und verdichten diese zu einem einzelnen Wert, der als Zusammenfassung aller Datensätze verstanden werden kann. Hierbei gilt eine Einschränkung: Sie können keine Aggregierungsfunktion innerhalb einer anderen Aggregierungsfunktion verwenden. Normalerweise muss jede Feldreferenz in genau einer Aggregierungsfunktion eingeschlossen sein.
Die folgenden Formeln funktionieren:
- Sum(Sales)
- Sum(Sales)/Count(Order Number)
Die folgende Formel funktioniert nicht, da es sich um eine verschachtelte Aggregierung handelt:
- Count(Sum(Sales))
Die Lösung dieses Problems ist die Funktion Aggr(). Trotz ihres Namens handelt es sich nicht um eine Aggregierungsfunktion. Es ist eine „Viele-zu-viele“-Funktion ähnlich einer Matrix in der Mathematik. Damit wird eine Tabelle mit N Datensätzen in eine Tabelle mit M Datensätzen konvertiert. Sie gibt eine Reihe von Werten zurück. Die Funktion kann auch als virtuelles Tabellendiagramm mit einer Kennzahl und einer oder mehreren Dimensionen betrachtet werden.
Verwenden von Aggr() für verschachtelte Aggregierungen
Aggr() berechnet eine Reihe von Werten für die Formel, aggregiert über die angegebene Dimension bzw. Dimensionen. Beispielsweise den maximalen Umsatzwert pro Kunde oder Region. In erweiterten Aggregierungen ist die Funktion Aggr() in einer weiteren Aggregierungsfunktion eingeschlossen. Dazu wird die Reihe von Ergebnissen der Funktion Aggr() als Eingabe für die Aggregierung verwendet, in der sie verschachtelt ist.
Wenn die Aggr()-Anweisung verwendet wird, ergibt sie eine virtuelle Tabelle mit einer Formel, gruppiert nach einer oder mehreren Dimensionen. Das Ergebnis dieser virtuellen Tabelle kann dann anhand einer äußeren Aggregierungsfunktion weiter aggregiert werden.
Berechnen des höchsten durchschnittlichen Bestellwerts
Im folgenden Beispiel wird eine einfache Aggr()-Anweisung in einer Diagrammformel verwendet.
Wir möchten unsere Gesamtmetriken auf regionaler Ebene sehen, aber auch zwei komplexere Formeln zeigen können:
- Größter durchschnittlicher Bestellwert nach Manager innerhalb jeder Region.
- Manager, der für diesen höchsten durchschnittlichen Bestellwert verantwortlich ist.
Der durchschnittliche Bestellwert für jede Region lässt sich leicht anhand einer Standardformel Sum(Sales)/Count([Order Number]) berechnen.
In der App finden Sie auf dem Arbeitsblatt Nested Aggregations eine Tabelle mit dem Titel Aggr() function.
Gehen Sie folgendermaßen vor:
- Wählen Sie die verfügbare Tabelle Aggr() function aus.
Das Eigenschaftsfenster öffnet sich. - Klicken Sie auf Spalte hinzufügen und wählen Sie Kennzahl aus.
- Klicken Sie auf das Symbol .
Der Formel-Editor wird geöffnet. - Geben Sie Folgendes ein: Sum(Sales)/Count([Order Number])
- Klicken Sie auf Übernehmen.
Das Ziel ist es, den höchsten durchschnittlichen Bestellwert für jede Region abzurufen. Wir müssen Aggr() verwenden, um Qlik Sense anzugeben, dass der durchschnittliche Bestellwert für jede Region pro Manager abgerufen und dann der höchste dieser Werte angezeigt werden soll. Um diese durchschnittlichen Bestellwerte für jede Region pro Manager zu erhalten, müssen wir diese Dimensionen in die Aggr()-Anweisung einschließen:
Aggr(Sum(Sales)/Count([Order Number]), Region, Manager)
Mit dieser Formel erstellt Qlik Sense eine virtuelle Tabelle, die wie folgt aussieht:
Nachdem Qlik Sense die individuellen durchschnittlichen Bestellwerte für Region pro Manager berechnet hat, muss der höchste dieser Werte ermittelt werden. Hierfür schließen wir die Funktion Aggr() in Max() ein:
Max(Aggr(Sum(Sales)/Count([Order Number]), Manager, Region))
Gehen Sie folgendermaßen vor:
- Klicken Sie auf Spalte hinzufügen und wählen Sie Kennzahl aus.
- Klicken Sie auf das Symbol .
Der Formel-Editor wird geöffnet. - Geben Sie Folgendes ein: Max(Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
- Klicken Sie auf Übernehmen.
Sie können den höchsten durchschnittlichen Bestellwert für alle Manager auf Regionsebene sehen. Dies ist die erste unserer zwei komplexen Formeln! Die nächste Anforderung besteht darin, den Namen des Managers zu ermitteln, der für diese hohen durchschnittlichen Bestellwerte verantwortlich ist, und ihn neben den Werten selbst anzuzeigen.
Hierfür verwenden wir die gleiche Funktion Aggr() wie zuvor, aber dieses Mal zusammen mit der Funktion FirstSortedValue(). Die Funktion FirstSortedValue() weist Qlik Sense an, den Manager zurückzugeben, und zwar für die spezifische Dimension, die im zweiten Teil der Funktion angegeben ist:
FirstSortedValue(Manager,-Aggr(Sum(Sales)/Count(Order Number), Manager, Region))
Gehen Sie folgendermaßen vor:
- Klicken Sie auf Spalte hinzufügen und wählen Sie Kennzahl aus.
- Klicken Sie auf das Symbol .
Der Formel-Editor wird geöffnet. - Geben Sie Folgendes ein: FirstSortedValue(Manager,-Aggr(Sum(Sales)/ Count([Order Number]), Manager, Region))
- Klicken Sie auf Übernehmen.
Weitere Informationen finden Sie unter Aggr.
Weitere Informationen finden Sie unter FirstSortedValue