Przeskocz do zawartości głównej Przejdź do treści uzupełniającej

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:

[Transactions]: Load *, Window(avg(Expression1),[Num]); LOAD TransLineID, TransID, "Num", Dim1, Dim2, Dim3, Expression1, Expression2, Expression3 FROM [lib://DataFiles/transactions.qvd] (qvd);

Window obsługuje funkcje ogólne, takie jak zaokrąglanie czy podstawowe operacje liczbowe. Na przykład:

Load *, Round(Window(Sum(Salary),Department)) as SumSalary
Load *, Window(Sum(Salary),Department) + 5 as SumSalary

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:  

Window (input_expr, [partition1, partition2, ...], [sort_type, [sort_expr]],[filter_expr], [start_expr,end_expr])

Typ zwracanych danych: nowe pole dodane do tabeli wynikowej utworzonej przez instrukcję LOAD.

Argumenty:  

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:

  • ASC: sortowanie rosnące.

  • DESC: sortowanie malejące.

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:

  • 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, 'ASC', Age, Year>0, -3, 1)
as WSalaryDepartment

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)
as WSlidingSalaryDepartment

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())
as WSlidingSalaryDepartment

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.

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ć, co możemy poprawić!