Zu Hauptinhalt springen Zu ergänzendem Inhalt springen

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:

[AvgSalary]: Load *, Window(avg(Salary), Department) as AvgDepSalary Resident Employees;
Informationshinweis

Es wird empfohlen, der Window-Funktion einen Feldnamen zu geben.

Window unterstützt allgemeine Funktionen wie Rundungen oder grundlegende numerische Operationen. Zum Beispiel:

Load *, Round(Window(Sum(Salary),Department)) as SumDepSalary
Load *, Window(Sum(Salary),Department) + 5 as SumDepSalary
Informationshinweis

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:  

Window (main_expr, [partition1, partition2, ...], [sort_type, [sort_expr],[filter_expr], [start_expr, end_expr]])

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:  

Argumente
ArgumentBeschreibung
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:

  • ASC: aufsteigende Sortierung

  • DESC: absteigende Sortierung

  • NONE

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:

  • Startformel: Die Anzahl der Zeilen vor der aktuellen Zeile, die in das Fenster eingeschlossen werden sollen.

  • Endformel: Die Anzahl der Zeilen nach der aktuellen Zeile, die in das Fenster eingeschlossen werden sollen.

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

Beispiel: Hinzufügen eines Felds mit einem sortierten 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.

Hat diese Seite Ihnen geholfen?

Wenn Sie Probleme mit dieser Seite oder ihren Inhalten feststellen – einen Tippfehler, einen fehlenden Schritt oder einen technischen Fehler –, teilen Sie uns bitte mit, wie wir uns verbessern können!