Window – Skriptfunktion
Window() führt Berechnungen für mehrere Zeilen durch und gibt einen getrennten Wert für jede Zeile zurück.
Sie können die Window-Funktionen für Vorgänge wie die Folgenden verwenden:
-
Einen einzelnen Zahlenwert in einer Zeile mit dem Durchschnitt, Höchstwert oder Mindestwert in der Spalte vergleichen.
-
Den Rang eines einzelnen Werts entweder in der Spalte oder in der ganzen Tabelle berechnen.
Die Window-Funktion ändert nicht die Anzahl der Datensätze in der Tabelle, kann jedoch ähnliche Aufgaben als Aggregierung, relationale und Bereichsfunktionen durchführen.
Zum Hinzufügen zur Tabelle muss die Window-Funktion einen Cache innerhalb des LOAD-Befehls der Tabelle enthalten, mit der Sie arbeiten. Hier ein Beispiel:
„Window“ unterstützt allgemeine Funktionen wie Rundungen oder grundlegende numerische Operationen. Hier ein Beispiel:
Sie können ein Sliding Window für die Window-Funktion definieren. Damit wird die Anzahl der Zeilen festgelegt, die beim Anwenden der Window-Funktion auf die aktuelle Zeile verwendet werden. Beispielsweise können Sie das Fenster auf die 3 vorherigen und die 3 darauffolgenden Zeilen festlegen.
Syntax:
Rückgabedatentyp: Ein neues Feld, das der durch den LOAD-Befehl erstellten Tabelle hinzugefügt wurde.
Argumente:
Argument | Beschreibung |
---|---|
input_expr |
Die von der Funktion berechnete und zurückgegebene Eingabeformel. Es muss sich um eine beliebige, auf einer Aggregierung basierende Formel handeln, z. B. Median(Salary). Hier ein Beispiel: Window(Median(Salary)) as MedianSalary
Die Eingabe kann auch ein Feldname ohne angewendete Aggregierung sein. In diesem Fall behandelt Window ihn so, als würde die Only()-Funktion auf dieses Feld angewendet. Hier ein Beispiel: Window(Salary,Department) as WSalary
Optional können Sie Partitionierung mit der Eingabeformel definieren. Partitionierung entspricht der Gruppierung, die mithilfe des group by-Befehls erzielt wird, mit dem Unterschied, dass das Ergebnis der Eingabetabelle als neue Spalte hinzugefügt wird. Partitionierung reduziert die Anzahl der Datensätze in der Eingabetabelle nicht. Es können mehrere Partitionsfelder definiert werden. Beispiel:
LOAD
Window(Max(Sales), City, 'ASC', OrderDate, Sales > 300)
+ AddMonths(OrderDate,-6) as MAX_Sales_City_Last_6_Mos, Window(Avg(Sales), City, 'ASC', OrderDate, City = 'Portland') + AddMonths(OrderDate,-6) as Avg_Sales_Portland_Last_6_Mos, Window(Max(Sales), City, 'ASC', OrderDate, Sales > 300) + AddMonths(OrderDate,-12) as MAX_Sales_City_Last_12_Mos; LOAD City, Sales, OrderDate FROM [lib://AttachedFiles/Sales Data.xlsx] (ooxml, embedded labels, table is [Sales Data]);
|
partition1, partition2 |
Nach input_expr können Sie eine beliebige Anzahl Partitionen definieren. Partitionen sind Felder, die definieren, auf welche Kombinationen die Aggregierungen angewendet werden sollen. Die Aggregierung wird für jede Partition getrennt angewendet. Hier ein Beispiel: Window(Avg(Salary), Unit, Department, Country) as AvgSalary
Im obigen Beispiel sind die Partitionen Unit, Department und Country. Partitionen sind nicht obligatorisch, aber für ordnungsgemäßes Windowing von Feldern erforderlich. |
sort_type, [sort_expr]] |
Geben Sie optional den Sortiertyp und die Sortierformel an. sort_type kann einen von zwei Werten haben:
Wenn Sie „sort_type“ definieren, müssen Sie eine Sortierformel definieren. Dies ist eine Formel, die die Zeilenreihenfolge innerhalb einer Partition festlegt. Hier ein Beispiel: Window(RecNo(), Department, 'ASC', Year)
Im obigen Beispiel werden die Ergebnisse innerhalb der Partition aufsteigend vom Feld Year sortiert. InformationshinweisDer Sortiertyp und die Sortierformel sind im Wesentlichen nur für die Funktionen RecNo und WRank erforderlich.
|
filter_expr |
Fügen Sie optional eine Filterformel hinzu. Dies ist eine boolesche Formel, die festlegt, ob der Datensatz in die Berechnung einbezogen werden soll oder nicht. Dieser Parameter kann vollständig ausgelassen werden, und das Ergebnis gibt an, dass kein Filter vorhanden ist. Hier ein Beispiel: Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)
as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
[start_expr,end_expr] |
Legen Sie optional das Argument für die Sliding Window-Funktionalität fest. Ein Sliding Window erfordert zwei Argumente:
Wenn Sie beispielsweise die 3 vorherigen Zeilen, die aktuelle Zeile und die nachfolgende Zeile einschließen möchten: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, -3, 1) Um alle vorherigen oder alle nachfolgenden Zeilen anzugeben, können Sie die Funktion Unbounded() verwenden. Wenn Sie beispielsweise alle vorhergehenden Zeilen, die aktuelle Zeile und die nachfolgende Zeile einschließen möchten: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, UNBOUNDED(), 1) Beispiel zum Einschließen der dritten Zeile ab der aktuellen Zeile und aller nachfolgenden Zeilen: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED()) |
Beispiel: Hinzufügen eines Felds, das eine Aggregierung enthält
Beispiel:– Hinzufügen eines Felds, das eine nach bestimmten Werten gefilterte Aggregierung enthält
Beispiel: Hinzufügen eines Felds mit einem Sliding Window
Beschränkungen
Window hat die folgenden Einschränkungen:
-
Window ist eine ressourcenintensive Funktion, vor allem hinsichtlich der Arbeitsspeichernutzung.
-
Window wird in Qlik Sense Mobile nicht unterstützt.
-
Diagrammformeln unterstützen Window nicht.
-
Sie können Window-Funktionen nicht in anderen Window-Funktionen verschachteln.
-
Window kann nicht innerhalb einer Aggregierungsfunktion verwendet werden.
-
Window muss die ganze Tabelle scannen können.
-
WRank(), RecNo() und RowNo() können nicht mit Window verwendet werden, wenn die Sliding Window-Funktionalität verwendet wird.