# Window Funkcja skryptu

Window() wykonuje obliczenia na podstawie wielu wierszy sekcji (czyli „okna”) pełnej tabeli i tworzy pojedynczą wartość dla każdego wiersza.

Za pomocą funkcji Window można wykonać takie operacje jak:

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

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

[Window - Script syntax and chart function](https://play.vidyard.com/KddMeUa2GDAvFQ3vFFroPy)

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 być zawarta w instrukcji LOAD tabeli, z którą pracujesz, lub odwoływać się do tabeli, takiej jak Resident LOAD. Przykład można znaleźć w artykule [Przykład — dodawanie pola zawierającego agregację](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm#Example2).

Nazwę można pominąć, ale spowoduje to ustawienie nazwy pola na całe wyrażenie funkcji Window. Na przykład AvgDepSalary w poniższym przykładzie:

```
[AvgSalary]:
Load 
	*,
	Window(avg(Salary), Department) as AvgDepSalary
Resident Employees;
```

Informacja

Zaleca się nadanie funkcji Window nazwy pola.

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

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

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

Informacja

Funkcja Window skanuje całą tabelę. Jeśli chodzi o wykorzystanie pamięci, koszt tego skanowania jest proporcjonalny do liczby pól w tabeli. Tabela z kilkoma polami, oprócz tych, na których działa funkcja Window, jest zawsze preferowana niż tabela z wieloma polami.

Zazwyczaj funkcja Window zużywa 2–4 razy więcej pamięci i zajmuje 2–4 razy więcej czasu na przeładowanie w porównaniu do podobnej operacji skryptu zawierającej tę samą agregację, klauzulę Where (filtr), klauzulę Group by (partycjonowanie) i klauzulę Order by (sortowanie).

Składnia:

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

Zwracany typ danych: jedna wartość na wiersz, która może zostać połączona z innym wyrażeniem lub użyta w nim albo dodana bezpośrednio do tabeli wynikowej utworzonej przez instrukcję LOAD.

Argumenty:

Argumenty

| Argument | Opis |
| --- | --- |
| main\_expr | Główne wyrażenie wejściowe obliczone i zwrócone przez funkcję. Musi to być dowolne wyrażenie oparte na agregacji, takie jak Median(Salary). Na przykład:<br><br>Window(Median(Salary)) as MedianSalary<br><br>Wyrażenie może być również nazwą pola bez zastosowania agregacji. W tym przypadku Window traktuje je tak, jakby funkcja Only() została zastosowana do tego pola. Na przykład:<br><br>Window(Salary) as WSalary<br><br>Wyrażenia zawierające zagnieżdżone agregacje lub zagnieżdżone funkcje okna, takie jak Window(Sum(Avg(Salary))) lub Window(Sum(Window(Salary))) nie są dozwolone. |
| partition1, partition2 | Po main\_expr możesz zdefiniować dowolną liczbę partycji. Partycje to pola definiujące kombinacje, z którymi mają być stosowane agregacje. Na przykład:<br><br>Window(Avg(Salary), Department) as AvgDepSalary<br><br>Oblicza to średnie wynagrodzenie dla każdego działu.<br><br>Jeśli podano kilka parametrów partycjonowania, agregacja zostanie zastosowana do każdego wiersza z unikalną kombinacją pól partycji. Na przykład:<br><br>Window(Avg(Salary), Department, Country) as AvgDepSalaryPerCountry<br><br>Oblicza to średnie wynagrodzenie dla każdego działu w każdym z krajów. Duplikowane działy w różnych krajach, takie jak Marketing w Szwecji i Marketing w Kanadzie, będą traktowane jako różne partycje.<br><br>Partycjonowanie jest podobne do grupowania osiąganego przez klauzulę group by. Partycjonowanie nie zmniejsza jednak liczby rekordów w porównaniu do tabeli wejściowej. |
| sort\_type, [sort\_expr] | Opcjonalnie określ typ sortowania i wyrażenie sortowania. Określa kolejność, w jakiej wykonywana jest agregacja. sort\_type jest stałym ciągiem znaków i może przyjmować jedną z trzech wartości:<br><br><ul> <li> <p> <span>ASC</span>: sortowanie rosnące.</p> </li> <li> <p> <span>DESC</span>: sortowanie malejące.</p> </li> <li> <p>NONE</p> </li> </ul><br><br>Jeśli zdefiniujesz sort\_type ASC lub DESC, musisz zdefiniować wyrażenie sortowania. W przypadku sort\_type NONE nie należy podawać wyrażenia sortowania. Wyrażenie sortowania określa kolejność wierszy w partycji.<br><br>Na przykład:<br><br>Window(RecNo(), Department, 'ASC', Year)<br><br>W powyższym przykładzie agregacja w ramach partycji jest wykonywana rosnąco według pola Year.<br><br>Parametry sortowania wpływają również na kolejność, w jakiej okno przesuwane przetwarza tabelę. Przykład można znaleźć w temacie [Przykład — dodawanie pola z sortowanym oknem przesuwanym](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm#Example3). |
| filter\_expr | Opcjonalnie dodaj wyrażenie filtru. Jest to wyrażenie logiczne, które decyduje, czy rekord powinien zostać uwzględniony w obliczeniach, czy nie.<br><br>Jeśli podano filter\_expr, należy podać typ sortowania. Jeśli nie zdefiniowano typu sortowania, argument może być interpretowany jako parametr partycji, a nie wyrażenie filtru. Parametr filter\_expr można całkowicie pominąć lub uwzględnić wartość będącą prawdą. W obu przypadkach nie są używane żadne filtry, więc żadne wiersze nie są wykluczane.<br><br>Na przykład:<br><br>Window(avg(Salary), Department, 'ASC', Age, Country='US' Or Country='Canada') as AvgDepSalaryInUsOrCanada<br><br>Powyższa instrukcja Window odfiltruje każdy wiersz, w którym pole Country nie ma wartości US lub Canada, wykluczając te wiersze z agregacji. Nadal będą dostępne wartości wyjściowe dla wierszy, które zostały odfiltrowane, ale podobnie jak wszystkie inne wiersze wyjściowe, będą one zawierać tylko zagregowane wyniki z wierszy, które nie zostały wykluczone przez filtr. |
| start\_expr,end\_expr | Opcjonalnie ustaw argumenty dotyczące funkcjonalności okna przesuwanego. To dodatkowo ogranicza liczbę wierszy, które mogą być agregowane razem. Każdy wiersz wyjściowy będzie zawierał tylko (zagregowane) wyniki z szeregu wierszy poprzedzających bieżący wiersz i następujących po nim. Okno przesuwane wymaga dwóch argumentów: (start\_expr,end\_expr). Jeśli argumenty te zostaną podane, wówczas typ sortowania nie powinien zostać pominięty. W przeciwnym razie argumenty mogą zostać zinterpretowane jako parametr partycji zamiast okna przesuwanego. Parametr start\_expr,end\_expr obejmuje:<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, 'NONE', 1, -3, 1) as WSlidingSalaryDepartment<br><br>Aby wskazać wszystkie poprzednie wiersze lub wszystkie następne wiersze, możesz użyć funkcji Unbounded(). Na przykład, aby uwzględnić wszystkie poprzedzające wiersze, bieżący wiersz i następny wiersz:<br><br>Window(concat(Text(Salary),'-'), Department, 'NONE', 1, UNBOUNDED(), 1) 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, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment<br><br>W powyższych przykładach podano typ sortowania NONE, aby skrypt mógł rozróżnić argumenty partycji i parametry, które występują po typie sortowania. |

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

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/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.

```
[Employees]:
Load 
	*,
	Window(avg(Salary), Department) as AvgDepSalary
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
]; 
```

Wyniki

Wyniki dodania pola zawierającego agregację

| Name | Department | Salary | Age | Year | Country | AvgDepSalary |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 39 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 39 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 61 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 61 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 39 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 39 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 61 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 61 |

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

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/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.

```
[Employees]:
Load 
*,
Window(avg(Salary), Department, 'NONE', Country = 'Sweden') as AvgDepSalarySweden
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
];
```

Wyniki

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

| Name | Department | Salary | Age | Year | Country | AvgDepSalarySweden |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 44 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 44 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 55 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 55 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 44 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 44 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 55 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 55 |

## Przykład — dodawanie pola z oknem przesuwanym

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/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.

```
[Employees]:
Load 
	*,
	Window(concat(Text(Salary),'-'), Department, 'NONE', -1, 1) as SlidingWindow
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
];
```

Wyniki

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

| Name | Department | Salary | Age | Year | Country | SlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 11-22 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 11-22-55 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 33-44 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 33-44-77 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 22-55-66 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 55-66 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 44-77-88 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 77-88 |

## Przykład — dodawanie pola z sortowanym oknem przesuwanym

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/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.

```
[Employees]:
Load 
	*,
	Window(concat(Text(Salary),'-'), Department, 'ASC', Age, -1, 1) as SortedSlidingWindow
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
];
```

Wyniki

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

| Name | Department | Salary | Age | Year | Country | SortedSlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 11-55-66 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 22-66 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 33-77-88 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 44-77 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 11-55 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 11-22-66 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 33-44-77 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 33-88 |

Aby lepiej zrozumieć, jak partycje i kolejność sortowania wpływają na agregacje w oknie przesuwanym, posortuj tabelę rosnąco według nazwy.

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

| Name | Department | Salary | Age | Year | Country | SortedSlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| Anna | Sales | 55 | 33 | 2023 | Canada | 11-55 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 33-88 |
| David | Sales | 11 | 32 | 2019 | Canada | 11-55-66 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 11-22-66 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 33-77-88 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 33-44-77 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 44-77 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 22-66 |

W wierszu dla Johana agregacja uwzględniła wartości wynagrodzeń dla Davida i Sary. Są to wiersze poprzedzające i następujące w ramach partycji działu Sales posortowane według wieku.

Aby uzyskać inny przykład pokazujący, które wiersze są uwzględniane, zmień wyrażenie Windows z Window(concat(Text(Salary),'-'), Department, 'ASC', Age, -1, 1) na Window(concat(Text(Name),'-'), Department, 'ASC', Age, -1, 1) i przeładuj dane. Wartości w SortedSlidingWindow w poniższej tabeli podają nazwę z wiersza poprzedzającego i następującego w ramach partycji Sales.

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

| Name | Department | Salary | Age | Year | Country | SortedSlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| Anna | Sales | 55 | 33 | 2023 | Canada | Anna-David |
| Bonnie | Marketing | 88 | 44 | 2023 | US | Bonnie-Nils |
| David | Sales | 11 | 32 | 2019 | Canada | Anna-David-Johan |
| Johan | Sales | 66 | 26 | 2025 | Sweden | David-Johan-Sara |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | Bonnie-Nils-Olle |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | Nils-Olle-Patrick |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | Olle-Patrick |
| Sara | Sales | 22 | 25 | 2022 | Sweden | Johan-Sara |

## Ograniczenia

Window mają 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.

* Window nie można używać w funkcji agregacji.

* Window nie można użyć w instrukcji load z klauzulą group by.

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

* WRank(), RecNo() ani RowNo() nie można używać z Window podczas korzystania z funkcjonalności okna przesuwanego.

* Gdy używana jest funkcja okna przesuwanego, czas obliczeń wzrasta wraz z rozmiarem okna. Zasadniczo należy unikać dużych tabel w połączeniu z dużymi rozmiarami okien.