Window - Skriptfunktion
Window() führt Berechnungen aus mehreren Zeilen eines Abschnitts (oder „Fensters“) einer vollständigen Tabelle durch und erzeugt einen einzelnen Wert für jede Zeile.
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 im Fenster der Tabelle vergleichen.
-
Den Rang eines einzelnen Werts entweder im Fenster 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.
Die Funktion Window muss im LOAD-Befehl der Tabelle, mit der Sie arbeiten, enthalten sein oder auf die Tabelle verweisen, z. B. mit einem Resident LOAD. Siehe zum Beispiel Beispiel: Hinzufügen eines Felds, das eine Aggregierung enthält.
Der Name kann weggelassen werden, aber das führt dazu, dass der Feldname auf die Gesamtheit der Formel der Window-Funktion festgelegt wird. Zum Beispiel AvgDepSalary in dem Beispiel unten:
Es wird empfohlen, der Window-Funktion einen Feldnamen zu geben.
Window unterstützt allgemeine Funktionen wie Rundungen oder grundlegende numerische Operationen. Zum Beispiel:
Die Window-Funktion scannt die gesamte Tabelle. Hinsichtlich der Arbeitsspeichernutzung sind die Kosten für diesen Scan proportional zur Anzahl der Felder in der Tabelle. Eine Tabelle mit wenigen Feldern, abgesehen von den Feldern, mit denen die Window-Funktion arbeitet, ist immer einer Tabelle mit vielen Feldern vorzuziehen.
In der Regel nutzt eine Window-Funktion 2-4 mal mehr Arbeitsspeicher und benötigt 2-4 mal mehr Zeit zum Laden im Vergleich zu einem vergleichbaren Skriptvorgang, der dieselbe Aggregierung, eine Where-Klausel (Filter), eine Group by-Klausel (Partition) und eine Order by-Klausel (Sortierung) enthält.
Syntax:
Rückgabedatentyp: Ein Wert pro Zeile, der mit einer anderen Formel kombiniert oder in einer anderen Formel verwendet werden kann oder direkt zu der durch den LOAD-Befehl erstellten Tabelle hinzugefügt werden kann.
Argumente:
Argument | Beschreibung |
---|---|
main_expr | Die von der Funktion berechnete und zurückgegebene Haupteingabeformel. Es muss sich um eine beliebige, auf einer Aggregierung basierende Formel handeln, z. B. Median(Salary). Zum Beispiel: Window(Median(Salary)) as MedianSalary Die Formel 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. Zum Beispiel: Window(Salary) as WSalary Formeln wie Window(Sum(Avg(Salary))) oder Window(Sum(Window(Salary))), die verschachtelte Aggregierungen oder verschachtelte Fensterfunktionen enthalten, sind nicht zulässig. |
partition1, partition2 | Nach main_expr können Sie eine beliebige Anzahl Partitionen definieren. Partitionen sind Felder, die definieren, in welchen Kombinationen die Aggregierungen angewendet werden sollen. Zum Beispiel: Window(Avg(Salary), Department) as AvgDepSalary Damit wird das Durchschnittsgehalt für jede Abteilung berechnet. Wenn mehrere Partitionsparameter angegeben werden, wird die Aggregierung auf jede Zeile mit einer eindeutigen Kombination von Partitionsfeldern angewendet. Zum Beispiel: Window(Avg(Salary), Department, Country) as AvgDepSalaryPerCountry Damit wird das Durchschnittsgehalt für jede Abteilung in jedem Land berechnet. Duplizierte Abteilungen in verschiedenen Ländern, z. B. Marketing in Schweden und Marketing in Kanada, werden als unterschiedliche Partitionen behandelt. Die Partitionierung ähnelt der Gruppierung, die durch die group by-Klausel erreicht wird. Partitionierung reduziert jedoch die Anzahl der Datensätze in der Eingabetabelle nicht. |
sort_type, [sort_expr] | Geben Sie optional den Sortiertyp und die Sortierformel an. Dies definiert die Reihenfolge, in der die Aggregierung durchgeführt wird. „sort_type“ ist ein konstanter String und kann einen von drei Werten annehmen:
Wenn Sie „sort_type“ als ASC oder DESC definieren, müssen Sie eine Sortierformel definieren. Bei „sort_type“ NONE sollte keine Sortierformel angegeben werden. Die Sortierformel legt die Zeilenreihenfolge innerhalb einer Partition fest. Zum Beispiel: Window(RecNo(), Department, 'ASC', Year) Im obigen Beispiel erfolgt die Aggregierung innerhalb der Partition aufsteigend vom Feld Year. Die Sortierparameter beeinflussen auch die Reihenfolge, in der ein Sliding Window eine Tabelle verarbeitet. Ein Beispiel finden Sie unter Beispiel: Hinzufügen eines Felds mit einem sortierten Sliding Window. |
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. Wenn filter_expr angegeben wird, muss ein Sortiertyp angegeben werden. Wenn kein Sortiertyp definiert ist, wird das Argument möglicherweise als Partitionsparameter und nicht als Filterformel interpretiert. Der Parameter filter_expr kann komplett weggelassen werden, oder es kann ein „truthy“-Wert angegeben werden. Beides führt dazu, dass keine Filter verwendet werden und keine Zeilen ausgeschlossen werden. Zum Beispiel: Window(avg(Salary), Department, 'ASC', Age, Country='US' Or Country='Canada') as AvgDepSalaryInUsOrCanada Der obige Window-Befehl filtert alle Zeilen heraus, in denen das Feld Country nicht US oder Canada lautet und schließt diese Zeilen aus der Aggregierung aus. Es werden immer noch Ausgabewerte für die Zeilen ausgegeben, die herausgefiltert wurden, aber wie alle anderen Ausgabezeilen enthalten sie nur aggregierte Ergebnisse von Zeilen, die nicht durch den Filter ausgeschlossen wurden. |
start_expr,end_expr | Legen Sie optional die Argumente für die Sliding Window-Funktionalität fest. Dadurch wird die Anzahl der zu aggregierenden Zeilen weiter eingeschränkt. Jede Ausgabezeile enthält nur die (aggregierten) Ergebnisse aus einer Reihe von Zeilen, die der aktuellen Zeile vorausgehen und ihr folgen. Ein Sliding Window erfordert zwei Argumente (start_expr,end_expr). Wenn diese Argumente angegeben werden, darf der Sortiertyp nicht übersprungen werden. Andernfalls können die Argumente als Partitionsparameter anstelle eines Sliding Window interpretiert werden. Der Parameter start_expr,end_expr umfasst:
Wenn Sie beispielsweise die 3 vorangehenden Zeilen, die aktuelle Zeile und die nachfolgende Zeile einschließen möchten: Window(concat(Text(Salary),'-'), Department, 'NONE', 1, -3, 1) as WSlidingSalaryDepartment 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, 'NONE', 1, UNBOUNDED(), 1) as WSlidingSalaryDepartment Beispiel zum Einschließen der dritten Zeile ab der aktuellen Zeile und aller nachfolgenden Zeilen: Window(concat(Text(Salary),'-'), Department, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment In den obigen Beispielen wird der Sortiertyp NONE angegeben, damit das Skript zwischen Partitionsargumenten und den Parametern, die nach dem Sortiertyp kommen, unterscheiden kann. |
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 kann nicht in einer load-Anweisung mit einer „group by“-Klausel 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.
Wenn die Funktion „Sliding Window“ verwendet wird, steigt die Berechnungszeit mit der Größe des Fensters. Große Tabellen in Kombination mit großen Fenstern sollten generell vermieden werden.