Window - skriptfunktion
Window() utför beräkningar från flera rader och skapar ett värde för varje rad separat.
Du kan använda Window-funktionerna för att utföra åtgärder som:
-
Jämför ett individuellt talvärde i en rad med medelvärdet, maxvärdet eller minimivärdet i kolumnen.
-
Beräkna placeringen för ett enskilt värde, antingen i kolumnen eller i hela tabellen.
Window-funktionen ändrar inte antalet poster i tabellen men kan fortfarande utföra liknande uppgifter, t.ex. aggregering, relationella och intervallfunktioner.
Window-funktionen måste ha ett cacheminne i LOAD-satsen för tabellen som du arbetar med som ska läggas till i tabellen. Exempel:
Fönster har stöd för allmänna funktioner, till exempel avrundning eller grundläggande numeriska operationer. Exempel:
Du kan definiera ett glidande fönster för Window-funktionen. Då ställs antalet rader som används in när Window-funktionen tillämpas på den aktuella raden. Du kan exempelvis ställa in fönstret till de 3 föregående raderna och de 3 efterföljande raderna.
Syntax:
Returnerad datatyp: Ett nytt fält lades till den resulterande tabellen som skapades av LOAD-satsen.
Argument:
Argument | Beskrivning |
---|---|
input_expr |
Indatauttrycket beräknas och returneras av funktionen. Det måste vara ett uttryck som baseras på en aggregering, till exempel Median(Salary). Exempel: Window(Median(Salary)) as MedianSalary
Indata kan också vara ett fältnamn utan att någon aggregering tillämpats. I det här fallet behandlar Window den som om Only()-funktionen har tillämpats på det fältet. Exempel: Window(Salary,Department) as WSalary
Definiera partitionering med indatauttrycket (valfritt). Partitionering är samma sak som grupperingen som sker med group by-satsen, med den skillnaden att resultatet läggs till som en ny kolumn i indatatabellen. Partitioneringen minskar inte antalet tabeller i indatatabellen. Flera partitionsfält kan definieras. Exempel:
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://AttachedFiles/Sales Data.xlsx] (ooxml, embedded labels, table is [Sales Data]);
|
partition1, partition2 |
Efter input_expr kan du definiera valfritt antal partitioner. Partitioner är fält som definierar vilka kombinationer som aggregeringarna ska tillämpas med. Aggregeringen tillämpas separat med varje partition. Exempel: Window(Avg(Salary), Unit, Department, Country) as AvgSalary
Ovan är partitionerna Unit, Department och Country. Partitioner är inte obligatoriska, men det krävs för att fälten ska kunna delas upp i fönster på rätt sätt. |
sort_type, [sort_expr]] |
Ange sorteringstyp och sorteringsuttryck (valfritt). sort_type kan ett av två värden:
Om du definierar sort_type måste du definiera ett sorteringsuttryck. Detta är ett uttryck som avgör ordningen för raderna i en partition. Exempel: Window(RecNo(), Department, 'ASC', Year)
I exemplet ovan sorteras resultatet i partitionen stigande av Year-fältet. Anteckning om informationSorteringstypen och sorteringsuttrycket krävs primärt bara med RecNo- och WRank-funktionerna.
|
filter_expr |
Lägg till ett filteruttryck (valfritt). Detta är ett booleskt uttryck som avgör huruvida posten ska inkluderas i beräkningen eller inte. Den här parametern kan utelämnas helt. Resultatet blir då att det inte finns något filter. Exempel: Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)
as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
[start_expr,end_expr] |
Ställ in argumentet för glidande fönster-funktionalitet (valfritt). För ett glidande fönster krävs två argument:
Om du exempelvis vill inkludera de 3 föregående raderna, aktuell rad och nästa följande rad: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, -3, 1) För att indikera alla föregående rader eller alla efterföljande rader kan du använda funktionen Unbounded(). Om du exempelvis vill inkludera alla föregående rader, aktuell rad och nästa följande rad: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, UNBOUNDED(), 1) Om du exempelvis vill inkludera den tredje raden från den aktuella raden och alla efterföljande rader: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED()) |
Exempel - lägga till ett fält som innehåller en aggregering:
Exempel - lägga till ett fält som innehåller en aggregering som filtrerats för specifika värden
Exempel - Lägga till ett fält med ett glidande fönster
Begränsningar
Window har följande begränsningar:
-
Window är en resursintensiv funktion, framför allt avseende minnesförbrukning.
-
Window stöds inte i Qlik Sense Mobile.
-
Diagramuttrycken har inte stöd för Window.
-
Du kan inte nästla Window-funktioner inuti andra Window-funktioner.
-
Window kan inte användas inuti en aggregeringsfunktion.
-
Window måste kunna söka genom hela tabellen.
-
WRank(), RecNo() och RowNo() kan inte användas tillsammans med Window när glidande fönster-funktionaliteten används.