Window - scriptfunctie
Window() voert berekeningen uit op meerdere rijen en produceert een waarde per rij.
U kunt de Window-functies gebruiken om bewerkingen uit te voeren zoals:
-
Een individuele nummerwaarde in een rij vergelijken met het gemiddelde, maximum of minimum in de kolom vergelijken.
-
De positie van een individuele waarde berekenen, hetzij binnen de kolom of in de gehele tabel.
De Window-functie verandert het aantal records in de tabel niet, maar kan wel vergelijke taken uitvoeren zoals aggregatie-, relationele en bereikfuncties.
De Window-functie moet een cache hebben binnen de LOAD-opdracht van de tabel waar u aan werkt om aan de tabel toe te voegen. Bijvoorbeeld:
Venter ondersteunt algemene functies zoals afronding of basale numerieke bewerkingen. Bijvoorbeeld:
U kunt een schuifvenster voor de Window-functie definiëren. Dit stelt het aantal gebruikte rijen in wanneer de Window-functie op de huidige rij wordt toegepast. U kunt het venster bijvoorbeeld instellen om drie vorige rijen en de drie daarop volgende rijen te zijn.
Syntaxis:
Retourgegevenstypen: Een nieuw veld dat wordt toegevoegd aan de resulterende tabel die is gemaakt door de LOAD-opdracht.
Argumenten:
Argument | Beschrijving |
---|---|
input_expr |
De invoeruitdrukking die wordt berekend en geretourneerd door de functie. Het moet een uitdrukking zijn die is gebaseerd op een aggregatie, zoals Median(Salary). Bijvoorbeeld: Window(Median(Salary)) as MedianSalary
De invoer kan ook een veldnaam zijn zonder dat aggregatie is toegepast. In dit geval behandelt Window het alsof de Only()-functie is toegepast op dat veld. Bijvoorbeeld: Window(Salary,Department) as WSalary
U kunt optioneel partities definiëren met de invoeruitdrukking. Partitioneren is hetzelfde als het groeperen dat wordt bereikt met de group by-clausule. Het verschil is dat het resultaat als een nieuwe kolom aan de invoertabel wordt toegevoegd. Partitioneren vermindert het aantal records van de invoertabel niet. Er kunnen meerdere partitievelden worden gedefinieerd. Voorbeeld:
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] (ooxml, embedded labels, table is [Sales Data]);
|
partition1, partition2 |
Na input_expr kunt u een willekeurig aantal partities definiëren. Partities zijn velden die definiëren met welke combinaties de aggregaties moeten worden toegepast. De aggregatie wordt op iedere partitie afzonderlijk toegepast. Bijvoorbeeld: Window(Avg(Salary), Unit, Department, Country) as AvgSalary
In het bovenstaande zijn de partities Unit, Department en Country. Partities zijn niet verplicht, maar vereist voor goede vensterweergave van velden. |
sort_type, [sort_expr]] |
U kunt optioneel het sorteertype en de sorteeruitdrukking specificeren. sort_type kan één of twee waarden bevatten:
Als u sort_type definieert, moet u een sorteeruitdrukking definiëren. Dit is een uitdrukking die de volgorde van de rijen in een partitie bepaalt. Bijvoorbeeld: Window(RecNo(), Department, 'ASC', Year)
In het bovenstaande voorbeeld zijn de resultaten in de partitie in oplopende volgorde gesorteerd op basis van het Year-veld. InformatieHet sorteertype en de sorteeruitdrukking zijn doorgaans alleen vereist met de RecNo- en WRank-functies.
|
filter_expr |
U kunt optioneel een filteruitdrukking toevoegen. Dit is een booleaanse uitdrukking die bepaalt of de record in de berekening moet worden opgenomen of niet. Deze parameter kan volledig worden weggelaten en resultaat zou dan zijn dat er geen filter is. Bijvoorbeeld: Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)
as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
[start_expr,end_expr] |
Stel het argument voor de schuifvensterfunctie in (optioneel). Een schuifvenster vereist twee argumenten:
Als u bijvoorbeeld 3 voorgaande rijen, de huidige rij en de volgende rij wilt toevoegen: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, -3, 1) Om alle eerdere rijen of alle volgende rijen aan te geven kunt u de Unbounded()-functie gebruiken. Bijvoorbeeld: om alle voorgaande rijen, de huidige rij en de volgende rij toe te voegen: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, UNBOUNDED(), 1) Bijvoorbeeld: om de derde rij uit de huidige rij en de daaropvolgende rijen toe te voegen: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED()) |
Voorbeeld: een veld met een aggregatie toevoegen
Voorbeeld: een veld met een aggregatie toevoegen, gefilterd op specifieke waarden
Voorbeeld: een veld met een schuifvenster toevoegen
Beperkingen
Window heeft de volgende beperkingen:
-
Window is een functie die veel resources gebruikt, vooral wat betreft geheugen.
-
Window wordt niet ondersteund in Qlik Sense Mobile.
-
Diagramuitdrukkingen bieden geen ondersteuning voor Window.
-
U kunt Window-functies niet in andere Window-functies nesten.
-
Window kan niet worden gebruikt in een aggregatiefunctie.
-
Window moet de hele tabel kunnen scannen.
-
WRank(), RecNo() en RowNo() kunnen niet worden gebruikt met Window wanneer de schuifvensterfunctionaliteit wordt gebruikt.