Window — funkcja skryptu
Window() wykonuje obliczenia z wielu wierszy, tworząc wartość dla każdego wiersza z osobna.
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 agregacyjne, 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 liczbę wierszy używanych podczas stosowania funkcji Window w bieżącym wierszu. Na przykład można ustawić okno tak, aby zawierało 3 poprzednie i 3 następne wiersze.
Składnia:
Zwracany typ 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żna 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 sortujące. 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 poprzednie 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 – dodanie pola zawierającego agregację przefiltrowanego pod kątem konkretnych wartości
Przykład – dodanie pola z przesuwanym oknem
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.
-
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.