Window — funkcja skryptu
Window() wykonuje obliczenia z wielu wierszy, tworząc wartość dla każdego wiersza osobno.
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 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:
Window obsługuje funkcje ogólne, takie jak zaokrąglanie czy podstawowe operacje liczbowe. Na przykład:
Dla funkcji Window można zdefiniować okno przesuwane. 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.
Składnia:
Typ zwracanych danych: nowe pole dodane do tabeli wynikowej utworzonej przez instrukcję LOAD.
Argumenty:
Argument | Description |
---|---|
input_expr |
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: Window(Median(Salary)) as MedianSalary
Dane wejściowe mogą 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: Window(Salary,Department) as WSalary
Opcjonalnie możesz zdefiniować partycjonowanie za pomocą wyrażenia wejściowego. Partycjonowanie przebiega w ten sam sposób co 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. Przykład:
LOAD
Window(Max(Sales), City, 'ASC', OrderDate, Sales > 300)
+ AddMonths(OrderDate,-6) as MAX_Sales_City_Last_6_Mos, Window(Avg(Sales), City, 'ASC', OrderDate, City = 'Portland') + AddMonths(OrderDate,-6) as Avg_Sales_Portland_Last_6_Mos, Window(Max(Sales), City, 'ASC', OrderDate, Sales > 300) + AddMonths(OrderDate,-12) as MAX_Sales_City_Last_12_Mos; LOAD City, Sales, OrderDate FROM [lib://:DataFiles/Sales Data.xlsx] (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: Window(Avg(Salary), Unit, Department, Country) as AvgSalary
W powyższym przypadku partycjami są Unit, Department i Country. Partycje nie są obowiązkowe, ale wymagane do prawidłowego stosowania funkcji okna do pól. |
sort_type, [sort_expr]] |
Opcjonalnie określ typ sortowania i wyrażenie sortowania. sort_type może mieć jedną z dwóch wartości:
Jeśli zdefiniujesz sort_type, musisz zdefiniować wyrażenie sortowania. Jest to wyrażenie określające kolejność wierszy w partycji. Na przykład: Window(RecNo(), Department, 'ASC', Year)
W powyższym przykładzie wyniki w ramach partycji posortowano rosnąco według pola Year. InformacjaTyp sortowania i wyrażenie sortowania są wymagane głównie tylko w przypadku funkcji RecNo i WRank.
|
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. Parametr ten można całkowicie pominąć i w efekcie powinien wystąpić brak filtru. Na przykład: Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)
as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
[start_expr,end_expr] |
Opcjonalnie ustaw argument dotyczący funkcjonalności okna przesuwanego. Okno przesuwane wymaga dwóch argumentów:
Na przykład, jeśli chcesz uwzględnić 3 poprzedzające wiersze, bieżący wiersz i następny wiersz: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, -3, 1) 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: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, UNBOUNDED(), 1) Na przykład, aby uwzględnić trzeci wiersz od bieżącego wiersza i wszystkie kolejne wiersze: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED()) |
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
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.
-
Window nie można używać w funkcji agregacji.
-
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.