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:
Window obsługuje funkcje ogólne, takie jak zaokrąglanie czy podstawowe operacje liczbowe. Na przykład:
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:
Składnia:
Typ zwracanych danych: nowe pole dodane do tabeli wynikowej utworzonej przez instrukcję LOAD.
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: Window(Median(Salary)) as MedianSalary 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: Window(Salary,Department) as WSalary
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. 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]FROM [lib://AttachedFiles/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 partycje to Unit, Department i Country. 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:
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 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. Parametr ten można całkowicie pominąć, czego efektem powinien być brak filtra. 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 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, '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.
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.