Ga naar hoofdinhoud Ga naar aanvullende inhoud

Window - scriptfunctie

Window() voert berekeningen van meerdere rijen uit en produceert voor elke afzonderlijke rij een waarde.

U kunt de Window-functies gebruiken voor de volgende bewerkingen:

  • Een afzonderlijke getalwaarde in een rij vergelijken met het gemiddelde, maximum of minimum binnen de kolom.

  • De rangorde van een afzonderlijke waarde berekenen, hetzij binnen de kolom of binnen de volledige tabel.

De Window-functie wijzigt het aantal records in de tabel niet, maar deze kan vergelijkbare taken als aggregatiefuncties, relationele functies en bereikfuncties uitvoeren.

De Window-functie moet een cache hebben in de LOAD-instructie van de tabel waarmee u werkt om aan de tabel toe te voegen. Bijvoorbeeld:

[Transactions]: Load *, Window(avg(Expression1),[Num]); LOAD TransLineID, TransID, "Num", Dim1, Dim2, Dim3, Expression1, Expression2, Expression3 FROM [lib://DataFiles/transactions.qvd] (qvd);FROM [lib://AttachedFiles/transactions.qvd] (qvd);

Window ondersteunt algemene functies, zoals afronden of numerieke basisbewerkingen. Bijvoorbeeld:

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

U kunt een sliding window voor de Window-functie definiëren. Hiermee wordt ingesteld hoeveel rijen worden gebruikt bij het toepassen van de Window-functie op de huidige rij. U kunt instellen dat de window uit de 3 vorige rijen en de 3 volgende rijen bestaat.

Syntaxis:  

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

Gegevenstype retourneren: er wordt een nieuw veld toegevoegd aan de resulterende tabel, die is gemaakt door de LOAD‑instructie.

Argumenten:  

Argumenten
Argumenten Beschrijving
input_expr

De invoeruitdrukking die wordt berekend en geretourneerd door de functie. Dit 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 waarop geen aggregatie is toegepast. In dit geval behandelt Window dit alsof de Only()-functie is toegepast op dat veld. Bijvoorbeeld:

Window(Salary,Department) as WSalary

 

U kunt eventueel partitionering definiëren met de invoeruitdrukking. Partitionering is hetzelfde als de groepering die wordt bereikt met de group by-clausule. Het enige verschil is dat het resultaat wordt toegevoegd als een nieuwe kolom in de invoertabel. Bij partionering wordt het aantal records van de invoertabel niet verminderd. 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]FROM [lib://AttachedFiles/Sales Data.xlsx] (ooxml, embedded labels, table is [Sales Data]);

partition1, partition2

Na input_expr kunt u ieder gewenst aantal partities definiëren. Partities zijn velden die definiëren welke combinaties worden toegepast op de aggregaties. De aggregatie wordt bij elke partitie afzonderlijk toegepast. Bijvoorbeeld:

Window(Avg(Salary), Unit, Department, Country) as AvgSalary

In het bovenstaande voorbeeld zijn de partities Unit, Department en Country.

Partities zijn niet verplicht, maar zijn vereist voor een juiste uitvoering van de window-functie op velden.

sort_type, [sort_expr]]

Geef desgewenst het sorteertype en de sorteeruitdrukking op. sort_type kan een van de twee waarden hebben:

  • ASC: oplopende volgorde

  • DESC: aflopende volgorde.

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, worden de resultaten in de partitie in oplopende volgorde gesorteerd voor het veld Year.

InformatieHet sorteertype en de sorteeruitdrukking zijn doorgaans alleen vereist bij de functies RecNo en WRank.
filter_expr

U kunt optioneel een filteruitdrukking toevoegen. Dit is een booleaanse uitdrukking die bepaalt of het record wel of niet in de berekening moet worden opgenomen.

Deze parameter kan volledig worden weggelaten, wat ertoe leidt 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]

U kunt desgewenst het argument voor de functiontaliteit sliding window instellen. Voor een sliding window zijn twee argumenten vereist:

  • Beginuitdrukking: het aantal rijen voorafgaand aan de huidige rij om op te nemen in de window.

  • Einduitdrukking: het aantal rijen na de huidige rij om op te nemen in de window.

Als u bijvoorbeeld de 3 voorgaande rijen, de huidige rij en de volgende rij wilt opnemen:

Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, -3, 1)
as WSalaryDepartment

Gebruik de functie Unbounded() om alle voorgaande of daaropvolgende rijen aan te geven. Als u bijvoorbeeld alle voorgaande rijen, de huidige rij en de volgende rij wilt opnemen:

Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, UNBOUNDED(), 1)
as WSlidingSalaryDepartment

Bijvoorbeeld al u de derde rij van de huidige rij alle daaropvolgende rijen wilt opnemen:

Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED())
as WSlidingSalaryDepartment

Voorbeeld - Een veld toevoegen dat een aggregatie bevat

Voorbeeld - Een veld toevoegen dat een aggregatie bevat die is gefilterd op specifieke waarden

Voorbeeld - Een veld met een sliding window toevoegen

Beperkingen

Window heeft de volgende beperkingen:

  • Window is een bronintensieve functie, met name wat betreft het geheugengebruik.

  • Grafiekuitdrukkingen bieden geen ondersteuning voor Window.

  • U kunt Window-functies niet nesten binnen andere Window-functies.

  • Window kan niet binnen een aggregatiefunctie worden gebruikt.

  • Window moet in staat zijn de volledige tabel te scannen.

  • WRank(), RecNo(), en RowNo() kunnen niet worden gebruikt met Window als de sliding window wordt gebruikt.

Was deze pagina nuttig?

Als u problemen ervaart op deze pagina of de inhoud onjuist is – een typfout, een ontbrekende stap of een technische fout – laat het ons weten zodat we dit kunnen verbeteren!

Neem deel aan het Analytics Modernization Program

Remove banner from view

Moderniseer zonder uw waardevolle QlikView-apps op het spel te zetten met het Analytics Modernization Program. Klik hier voor meer informatie of om contact op te nemen: ampquestions@qlik.com