Window Funkcja skryptu | QlikView Pomoc
Przeskocz do zawartości głównej Przejdź do treści uzupełniającej

Window Funkcja skryptu

Ostatnia aktualizacja: 7.10.2026

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

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 (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:

Window(Median(Salary)) as MedianSalary

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:

Window(Salary) as WSalary

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:

Window(Avg(Salary), Department) as AvgDepSalary

Oblicza to średnie wynagrodzenie dla każdego działu.

Jeśli podano kilka parametrów partycjonowania, agregacja zostanie zastosowana do każdego wiersza z unikalną kombinacją pól partycji. Na przykład:

Window(Avg(Salary), Department, Country) as AvgDepSalaryPerCountry

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.

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:

  • ASC: sortowanie rosnące.

  • DESC: sortowanie malejące.

  • NONE

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.

Na przykład:

Window(RecNo(), Department, 'ASC', Year)

W powyższym przykładzie agregacja w ramach partycji jest wykonywana rosnąco według pola Year.

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.

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.

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.

Na przykład:

Window(avg(Salary), Department, 'ASC', Age, Country='US' Or Country='Canada') as AvgDepSalaryInUsOrCanada

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:

  • Wyrażenie początkowe: liczba wierszy przed bieżącym wierszem, które mają zostać uwzględnione w oknie.

  • Wyrażenie końcowe: liczba wierszy po bieżącym wierszu, które mają zostać uwzględnione w oknie.

Na przykład, jeśli chcesz uwzględnić 3 poprzedzające wiersze, bieżący wiersz i następny wiersz:

Window(concat(Text(Salary),'-'), Department, 'NONE', 1, -3, 1) as WSlidingSalaryDepartment

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:

Window(concat(Text(Salary),'-'), Department, 'NONE', 1, UNBOUNDED(), 1) as WSlidingSalaryDepartment

Na przykład, aby uwzględnić trzeci wiersz od bieżącego wiersza i wszystkie kolejne wiersze:

Window(concat(Text(Salary),'-'), Department, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment

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ę

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

Przykład — dodawanie pola z oknem przesuwanym

Przykład — dodawanie pola z sortowanym oknem przesuwanym

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.

Czy ta strona była pomocna?

Jeżeli natkniesz się na problemy z tą stroną lub jej zawartością — literówkę, brakujący krok lub błąd techniczny — daj nam znać!

Dołącz do Programu Modernizacji Analityki

Remove banner from view

Przeprowadź modernizację bez szkody dla Twoich cennych aplikacji QlikView za pomocą programu Analytics Modernization Program. Kliknij tutaj aby uzyskać więcej informacji lub skontaktuj się z nami: ampquestions@qlik.com