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

Window - skriptfunktion

Window() utför beräkningar från flera rader vilket producerar ett värde separat för varje rad.

Du kan använda Window-funktioner för att utföra åtgärder som exempelvis:

  • Jämföra ett enstaka talvärde i en rad med genomsnittet, maximivärdet eller minimivärdet i kolumnen.

  • Beräkna rangordningen för ett individuellt värde, antingen inom kolumnen eller i hela tabellen.

Window-funktionen ändrar inte antalet poster i tabellen, men den kan fortfarande utföra liknande uppgifter, till exempel aggregering, relations- och intervallfunktioner.

Window -funktionen måste ha ett cache-minne i LOAD-satsen i den tabell du arbetar med för att lägga till i tabellen. Exempel:

[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);

Fönster har stöd för allmänna funktioner, till exempel avrundning eller enkla 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. Detta anger antalet rader som används när Window-funktionen tillämpas på den aktuella raden. Du kan exempelvis ställa in att fönstret ska omfatta de tre föregående och de tre efterföljande raderna.

Syntax:  

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

Typ av returdata: ett nytt fält läggs till i den resulterande tabellen som skapats med LOAD-satsen.

Argument:  

Argument
Argument Beskrivning
input_expr

Indatauttrycket som beräknats och returnerats av funktionen. Det måste vara ett uttryck som baseras på aggregering, till exempel Median(Salary). Exempel:

Window(Median(Salary)) as MedianSalary

Indata kan också vara ett fältnamn utan en tillämpad aggregering. I det här fallet behandlar Window den som om Only()-funktionen tillämpas på det fältet. Exempel:

Window(Salary,Department) as WSalary

 

Du kan vid behov definiera partitionering med indatauttrycket. Partitionering är samma sak som den gruppering som utförs med group by-satsen, med skillnaden att resultatet läggs till som en ny kolumn i indatatabellen. Partitionering minskar inte antalet poster i indatatabellen. Det går att definiera flera partitionsfält.

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://:DataFiles/Sales Data.xlsx]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 för varje partition. Exempel:

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

I ovanstående exempel är partitionerna Unit, Department och Country.

Partitioner är inte obligatoriska, men krävs för att fältens placering i fönster ska bli korrekt.

sort_type, [sort_expr]]

Du kan vid behov ange sorteringstyp och sorteringsuttryck. sort_type kan ha 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 radordningen i en partition.

Exempel:

Window(RecNo(), Department, 'ASC', Year)

I ovanstående exempel sorteras resultaten i partitionen stigande via Year-fältet.

Anteckning om informationSorteringstypen och sorteringsuttrycket krävs primärt bara med funktionerna RecNo och WRank.
filter_expr

Lägg vid behov till ett filteruttryck. Detta är ett booleskt uttryck som avgör om posten ska inkluderas i beräkningen eller inte.

Denna parameter kan utelämnas helt och resultatet bör bli 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 vid behov in argumentet för glidande fönster-funktionen. För ett glidande fönster krävs två argument:

  • Startuttryck: antalet rader före den aktuella raden som ska tas med i fönstret.

  • Slututtryck: antalet rader efter den aktuella raden som ska tas med i fönstret.

Om du exempelvis vill ta med de tre föregående raderna, den aktuella raden och nästa rad.

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

För att ange alla föregående rader eller alla efterföljande rader kan du använda funktionen Unbounded(). Om du exempelvis vill ta med alla föregående rader, den aktuella raden och den följande raden:

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 avseende 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.

  • Diagramuttryck har inte stöd för Window.

  • Du kan inte nästla Window-funktioner i andra Window-funktioner.

  • Window kan inte användas i en aggregeringsfunktion.

  • Window måste kunna söka genom hela tabellen.

  • WRank(), RecNo() och RowNo() kan inte användas med Window när du använder glidande fönster-funktionen.

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!

Gå med i programmet Analytics Modernization

Remove banner from view

Modernisera utan att kompromissa med dina värdefulla QlikView-appar med programmet för analysmodernisering. Klicka här för mer information eller ta kontakt: ampquestions@qlik.com