Window – Skriptfunktion
Window() führt mehrzeilige Berechnungen durch und gibt einen getrennten Wert für jede Zeile zurück.
Sie können die Window-Funktionen verwenden, um Vorgänge wie die Folgenden durchzuführen:
-
Vergleichen eines einzelnen Zahlenwerts in einer Zeile mit dem Durchschnitt, Maximum oder Minimum in der Spalte.
-
Berechnen des Rangs eines einzelnen Werts, entweder innerhalb der Spalte oder innerhalb der ganzen Tabelle.
Die Window-Funktion ändert nicht die Anzahl der Datensätze in der Tabelle, kann aber dennoch ähnliche Aufgaben wie Aggregierungs-, relationale und Bereichsfunktionen durchführen.
Die Window-Funktion muss einen Cache innerhalb der LOAD-Anweisung der Tabelle haben, mit der Sie arbeiten, um ihn zur Tabelle hinzuzufügen. Hier ein Beispiel:
„Window“ unterstützt allgemeine Funktionen wie Runden oder grundlegende Vorgänge mit Zahlen. Hier ein Beispiel:
Sie können ein gleitendes Fenster für die Window-Funktion definieren. Dabei wird die Anzahl der Zeilen festgelegt, die verwendet werden, wenn die Window-Funktion auf die aktuelle Zeile angewendet werden. Sie können beispielsweise das Fenster auf die 3 vorherigen Zeilen und die 3 nachfolgenden Zeilen festlegen.
Syntax:
Rückgabedatentyp: Ein neues Feld wird der Ergebnistabelle hinzugefügt, die von der LOAD-Anweisung erstellt wurde.
Argumente:
Argument | Beschreibung |
---|---|
input_expr |
Die Eingabeformel wird von der Funktion berechnet und zurückgegeben. Es muss sich um eine Formel handeln, die auf einer Aggregierung basiert, 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 sie so, als würde die Funktion Only() auf dieses Feld angewendet. Hier ein Beispiel: Window(Salary,Department) as WSalary
Optional können Sie Partitionierung mit der Eingabeformel definieren. Partitionierung ist das Gleiche wie die Gruppierung, die durch die group by-Bedingung erzielt wird, mit dem Unterschied, dass das Ergebnis als neue Spalte zur Eingabetabelle hinzugefügt wird. Partitionierung reduziert die Anzahl der Datensätze 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://:DataFiles/Sales Data.xlsx]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. Die Aggregierung wird für jede Partition einzeln 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 die ordnungsgemäße Fenstereinteilung der Felder 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 über die Reihenfolge der Zeilen innerhalb einer Partition entscheidet. Hier ein Beispiel: Window(RecNo(), Department, 'ASC', Year)
Im obigen Beispiel werden die Ergebnisse innerhalb der Partition aufsteigend durch das Feld Year sortiert. InformationshinweisDer Sortiertyp und die Sortierformel sind hauptsächlich nur für die Funktionen RecNo und WRank erforderlich.
|
filter_expr |
Fügen Sie optional eine Filterformel hinzu. Dies ist eine Boolesche Formel, die entscheidet, ob ein Datensatz in die Berechnung eingeschlossen werden soll oder nicht. Der Parameter kann vollständig ausgelassen werden, und das Ergebnis sollte sein, 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 gleitende Fensterfunktion fest. Ein gleitendes Fenster erfordert zwei Argumente:
Wenn Sie zum Beispiel die 3 vorangehenden 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 vorangehenden oder alle nachfolgenden Zeilen anzugeben, können Sie die Funktion Unbounded() verwenden. Wenn Sie zum Beispiel alle vorangehenden Zeilen, die aktuelle Zeile und die nachfolgende Zeile einschließen möchten: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, UNBOUNDED(), 1) Wenn Sie zum Beispiel die dritte Zeile ab der aktuellen Zeile und alle nachfolgenden Zeilen einschließen möchten: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED()) |
Beispiel – Hinzufügen eines Felds mit einer Aggregierung
Beispiel – Hinzufügen eines Felds mit einer Aggregierung, gefiltert nach bestimmten Werten
Beispiel – Hinzufügen eines Felds mit einem gleitenden Fenster
Beschränkungen
Window weist die folgenden Beschränkungen auf:
-
Window ist eine ressourcenintensive Funktion, insbesondere hinsichtlich des Speicherverbrauchs.
-
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 Funktionalität der gleitenden Fenster verwendet wird.