# Window — funkcja skryptu

Window() wykonuje obliczenia z wielu wierszy, tworząc wartość dla każdego wiersza osobno.

Funkcji Window można używać do wykonywania takich operacji jak:

* Porównywanie pojedynczej wartości liczbowej w wierszu ze średnią, maksymalną lub minimalną w kolumnie.

* Obliczanie rangi pojedynczej wartości w kolumnie lub w całej tabeli.

Funkcja Window nie zmienia liczby rekordów w tabeli, ale nadal może wykonywać podobne zadania jak funkcje agregujące, relacyjne i zakresu.

Funkcja Window musi zawierać pamięć podręczną w instrukcji LOAD tabeli, z którą pracujesz, aby dodać ją do tabeli. Na przykład:

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

Window obsługuje funkcje ogólne, takie jak zaokrąglanie czy podstawowe operacje liczbowe. Na przykład:

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

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

Dla funkcji Window można zdefiniować przesuwane okno. Ustawia to liczbę wierszy używanych podczas stosowania funkcji Window w bieżącym wierszu. Na przykład możesz ustawić okno tak, aby zawierało 3 poprzednie i 3 kolejne wiersze:

Window(avg(Salary), Department, 'NONE' -3, 3) as AvgDepSalary

Składnia:

Window (Window (input\_expr, [partition1, partition2, ...], [sort\_type, [sort\_expr]],[filter\_expr], [start\_expr,end\_expr]))

Typ zwracanych danych: nowe pole dodane do tabeli wynikowej utworzonej przez instrukcję LOAD.

Argumenty:

Argumenty

| Argument | Opis |
| --- | --- |
| input\_expr | Wyrażenie wejściowe obliczone i zwrócone przez funkcję. Musi to być dowolne wyrażenie oparte na agregacji, np. Median(Salary). Na przykład:<br><br>Window(Median(Salary)) as MedianSalary<br><br>Dane wejściowe mogą być również nazwą pola bez zastosowania agregacji. W tym przypadku Window traktuje to tak, jakby funkcja Only() została zastosowana do tego pola. Na przykład:<br><br>Window(Salary,Department) as WSalary<br><br>Opcjonalnie możesz zdefiniować partycjonowanie za pomocą wyrażenia wejściowego. Partycjonowanie przebiega tak samo jak grupowanie za pomocą klauzuli group by, z tą różnicą, że wynik jest dodawany jako nowa kolumna do tabeli wejściowej. Partycjonowanie nie zmniejsza liczby rekordów tabeli wejściowej. Można zdefiniować wiele pól partycji.<br><br>Przykład:<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://:DataFiles/Sales Data.xlsx]FROM [lib://AttachedFiles/Sales Data.xlsx]<br>(ooxml, embedded labels, table is [Sales Data]); |
| partition1, partition2 | Po input\_expr możesz zdefiniować dowolną liczbę partycji. Partycje to pola definiujące kombinacje, z którymi mają być stosowane agregacje. Agregacja jest stosowana oddzielnie dla każdej partycji. Na przykład:<br><br>Window(Avg(Salary), Unit, Department, Country) as AvgSalary<br><br>W powyższym przypadku partycje to Unit, Department i Country.<br><br>Partycje nie są obowiązkowe, ale są wymagane do prawidłowego stosowania okien do pól. |
| sort\_type, [sort\_expr]] | Opcjonalnie określ typ i wyrażenie sortowania. sort\_type może mieć jedną z dwóch wartości:<br><br><ul><li><p><span>ASC</span>:&nbsp;sortowanie rosnące.</p></li><li><p><span>DESC</span>:&nbsp;sortowanie malejące.</p></li></ul><br><br>Jeśli zdefiniujesz sort\_type, musisz zdefiniować wyrażenie sortowania. Jest to wyrażenie określające kolejność wierszy w partycji.<br><br>Na przykład:<br><br>Window(RecNo(), Department, 'ASC', Year)<br><br>W powyższym przykładzie wyniki w ramach partycji posortowano rosnąco według pola Year.<br><br>InformacjaTyp i wyrażenie sortowania są wymagane zasadniczo tylko w przypadku funkcji RecNo i WRank . |
| filter\_expr | Opcjonalnie dodaj wyrażenie filtrujące. Jest to wyrażenie logiczne, które decyduje, czy rekord powinien zostać uwzględniony w obliczeniach, czy nie.<br><br>Parametr ten można całkowicie pominąć, czego efektem powinien być brak filtra.<br><br>Na przykład:<br><br>Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)<br>as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
| [start\_expr,end\_expr] | Opcjonalnie ustaw argument dotyczący funkcjonalności okna przesuwanego. Okno przesuwane wymaga dwóch argumentów:<br><br><ul><li><p>Wyrażenie początkowe:&nbsp;liczba wierszy przed bieżącym wierszem, które mają zostać uwzględnione w oknie.</p></li><li><p>Wyrażenie końcowe:&nbsp;liczba wierszy po bieżącym wierszu, które mają zostać uwzględnione w oknie.</p></li></ul><br><br>Na przykład, jeśli chcesz uwzględnić 3 poprzedzające wiersze, bieżący wiersz i następny wiersz:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, -3, 1)<br>as WSalaryDepartment<br><br>Aby wskazać wszystkie poprzednie lub wszystkie kolejne wiersze, można użyć funkcji Unbounded() . Na przykład, aby uwzględnić wszystkie poprzednie wiersze, bieżący wiersz i następujący wiersz:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, UNBOUNDED(), 1)<br>as WSlidingSalaryDepartment<br><br>Na przykład, aby uwzględnić trzeci wiersz od bieżącego wiersza i wszystkie kolejne wiersze:<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, 3, UNBOUNDED())<br>as WSlidingSalaryDepartment |

## Przykład — dodawanie pola zawierającego agregację

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### Przykład: dodawanie pola zawierającego agregację

Skrypt ładowania

Utwórz nową kartę w edytorze ładowania danych, a następnie załaduj następujące dane jako ładowanie wbudowane. Utwórz tabelę poniżej w Qlik Sense, aby zobaczyć wyniki.

```
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
];
 
```

Wyniki

Wyniki dodania pola zawierającego agregację

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

## Przykład — dodawanie pola zawierającego agregację przefiltrowanego pod kątem konkretnych wartości

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### Przykład: dodawanie pola zawierającego agregację przefiltrowanego pod kątem konkretnych wartości

Skrypt ładowania

Utwórz nową kartę w edytorze ładowania danych, a następnie załaduj następujące dane jako ładowanie wbudowane. Utwórz tabelę poniżej w Qlik Sense, aby zobaczyć wyniki.

```
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
];
 
```

Wyniki

Wyniki dodania pola zawierającego agregację, przefiltrowanego pod kątem określonych wartości

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

## Przykład — dodawanie pola z oknem przesuwanym

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### Przykład: dodawanie pola z oknem przesuwanym

Skrypt ładowania

Utwórz nową kartę w edytorze ładowania danych, a następnie załaduj następujące dane jako ładowanie wbudowane. Utwórz tabelę poniżej w Qlik Sense, aby zobaczyć wyniki.

```
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
];
 
```

Wyniki

Wyniki dodania pola zawierającego agregację, przefiltrowanego pod kątem określonych wartości

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

## Ograniczenia

Window ma następujące ograniczenia:

* Window jest funkcją wymagającą dużej ilości zasobów, szczególnie pod względem wykorzystania pamięci.

* Funkcja Window nie jest obsługiwana w Qlik Sense Mobile.

* Wyrażenia wykresów nie obsługują Window.

* Nie można zagnieżdżać funkcji Window wewnątrz innych funkcji Window.

* Nie można używać Window wewnątrz funkcji agregującej.

* Window musi być w stanie przeszukać całą tabelę.

* Funkcji WRank(), RecNo() i RowNo() nie można używać z Window podczas korzystania z funkcji przesuwanego okna.