# 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 (Window (input\_expr, [partition1, partition2, ...], [sort\_type, [sort\_expr]],[filter\_expr], [start\_expr,end\_expr]))

Returdatatyp: 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:<br><br>Window(Median(Salary)) as MedianSalary<br><br>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:<br><br>Window(Salary,Department) as WSalary<br><br>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.<br><br>Exempel:<br><br><br>LOAD<br>Window(Max(Sales), City, 'ASC', OrderDate, Sales &gt; 300)<br>+ AddMonths(OrderDate,-6) as MAX\_Sales\_City\_Last\_6\_Mos,<br>Window(Avg(Sales), City, 'ASC', OrderDate, City = 'Portland')<br>+ AddMonths(OrderDate,-6) as Avg\_Sales\_Portland\_Last\_6\_Mos,<br>Window(Max(Sales), City, 'ASC', OrderDate, Sales &gt; 300)<br>+ AddMonths(OrderDate,-12) as MAX\_Sales\_City\_Last\_12\_Mos;<br>LOAD<br>City,<br>Sales,<br>OrderDate<br>FROM [lib://AttachedFiles/Sales Data.xlsx]<br>(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:<br><br>Window(Avg(Salary), Unit, Department, Country) as AvgSalary<br><br>Ovan är partitionerna Unit, Department och Country.<br><br>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:<br><br><ul> <li> <p> <span>ASC</span>:&nbsp;stigande sortering.</p> </li> <li> <p> <span>DESC</span>:&nbsp;fallande sortering.</p> </li> </ul><br><br>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.<br><br>Exempel:<br><br>Window(RecNo(), Department, 'ASC', Year)<br><br>I exemplet ovan sorteras resultatet i partitionen stigande av Year-fältet.<br><br>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.<br><br>Den här parametern kan utelämnas helt. Resultatet blir då att det inte finns något filter.<br><br>Exempel:<br><br>Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)<br>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:<br><br><ul> <li> <p>Startuttryck:&nbsp;antalet rader före den aktuella raden som ska inkluderas i fönstret.</p> </li> <li> <p>Slututtryck:&nbsp;antalet rader efter den aktuella raden som ska inkluderas i fönstret.</p> </li> </ul><br><br>Om du exempelvis vill inkludera de 3 föregående raderna, aktuell rad och nästa följande rad:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, -3, 1)<br>as WSalaryDepartment<br><br>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:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, UNBOUNDED(), 1)<br>as WSlidingSalaryDepartment<br><br>Om du exempelvis vill inkludera den tredje raden från den aktuella raden och alla efterföljande rader:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, 3, UNBOUNDED())<br>as WSlidingSalaryDepartment |

## Exempel - lägga till ett fält som innehåller en aggregering:

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

#### Exempel: lägga till ett fält som innehåller en aggregering:

Laddningsskript

Skapa en ny flik i Skriptredigeraren och ladda sedan följande data som en inline load. Skapa tabellen nedan i Qlik Sense för att se resultatet.

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id) as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

Resultat

Resultat för att lägga till ett fält som innehåller en aggregering

| transaction\_id | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | storlek | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Röd | 103.43 |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | 266.775 |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Blå | 42.935 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Svart | 64.21 |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Röd | 273.88 |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Blå | 103.43 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Svart | 266.775 |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Röd | 103.43 |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Orange | 266.775 |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Blå | 42.935 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Svart | 64.21 |
| 3763 | 20180926 | 63.55 | 1–2 | 049681 | S | Röd | 273.88 |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Blå | 103.43 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Svart | 266.775 |

## Exempel - lägga till ett fält som innehåller en aggregering som filtrerats för specifika värden

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

#### Exempel: lägga till ett fält som innehåller en aggregering som filtrerats för specifika värden

Laddningsskript

Skapa en ny flik i Skriptredigeraren och ladda sedan följande data som en inline load. Skapa tabellen nedan i Qlik Sense för att se resultatet.

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id, color_code = 'Blue') as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

Resultat

Exempel - lägga till ett fält som innehåller en aggregering som filtrerats för specifika värden

| transaction\_id | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | storlek | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Röd | - |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | - |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Blå | 42.94 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Svart | - |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Röd | - |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Blå | 118.4 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Svart | - |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Röd | - |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Orange | - |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Blå | 42.94 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Svart | - |
| 3763 | 20180926 | 63.55 | 1–2 | 049681 | S | Röd | - |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Blå | 118.4 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Svart | - |

## Exempel - Lägga till ett fält med ett glidande fönster

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

#### Exempel: lägga till ett fält med ett glidande fönster

Laddningsskript

Skapa en ny flik i Skriptredigeraren och ladda sedan följande data som en inline load. Skapa tabellen nedan i Qlik Sense för att se resultatet.

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id, 'ASC', -1, 1, 0, 1) as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

Resultat

Exempel - lägga till ett fält som innehåller en aggregering som filtrerats för specifika värden

| transaction\_id | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | storlek | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Röd | 41.37 |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | 366.865 |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Blå | 42.935 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Svart | 64.21 |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Röd | 273.88 |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Blå | 106.3 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Svart | 92.42 |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Röd | 165.49 |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Orange | 166.685 |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Blå | 80.12 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Svart | 3.42 |
| 3763 | 20180926 | 63.55 | 1–2 | 049681 | S | Röd | 177.56 |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Blå | 63.55 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Svart | 325.95 |

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