# Window Funkcja skryptu

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

Funkcji Window można używać do wykonywania takich operacji 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.

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/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/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).

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

| 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, np. 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 to 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 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>:&nbsp;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ę. Na przykład zobacz temat [Przykład — dodawanie pola z sortowanym oknem przesuwanym](https://help.qlik.com/pl-PL/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm#Example3). |
| 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>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 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, '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/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.

```
[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/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### Przykład: Dodawanie pola zawierającego agregację przefiltrowaną pod kątem określonych 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/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### Przykład: Dodawanie pola z oknem przesuwnym

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/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### Przykład: Dodawanie pola z oknem przesuwnym

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ę przefiltrowaną 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 nazwy.

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.

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

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

* Window nie może być używany w instrukcji load z klauzulą where

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

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