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-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 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. Till exempel:
Window har stöd för allmänna funktioner, till exempel avrundning eller grundläggande numeriska operationer. Till 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:
Returdatatyp: ett nytt fält lades till den resulterande tabellen som skapades av LOAD-satsen.
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). Till 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. Till 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. 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://: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. Till 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 ett av två värden:
Om du definierar sort_type måste du definiera ett sorteringsuttryck. Detta är ett uttryck som avgör radordningen i en partition. Till 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. Till 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:
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 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) 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 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.