Gå till huvudinnehåll Gå till ytterligare innehåll

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:

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

Fönster har stöd för allmänna funktioner, till exempel avrundning eller grundläggande numeriska operationer. Exempel:

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

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:  

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

Returnerad datatyp: Ett nytt fält lades till den resulterande tabellen som skapades av LOAD-satsen.

Argument:  

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:

  • ASC: Stigande sortering.

  • DESC: Fallande sortering.

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:

  • Startuttryck: Antalet rader före den aktuella raden som ska inkluderas i fönstret.

  • Slututtryck: Antalet rader före den aktuella raden som ska inkluderas i fönstret.

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)
as WSalaryDepartment

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)
as WSlidingSalaryDepartment

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())
as WSlidingSalaryDepartment

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.

Var den här sidan till hjälp för dig?

Om du hittar några fel på denna sida eller i innehållet – ett stavfel, ett steg som saknas eller ett tekniskt fel – berätta för oss så att vi kan blir bättre!