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

[Transactions]: Load *, Window(avg(Expression1),[Num]); LOAD TransLineID, TransID, "Num", Dim1, Dim2, Dim3, Expression1, Expression2, Expression3 FROM [lib://DataFiles/transactions.qvd] (qvd);FROM [lib://AttachedFiles/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ć 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:  

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

Zwracany typ danych: nowe pole dodane do tabeli wynikowej utworzonej przez instrukcję LOAD.

Argumenty:  

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:

  • ASC: sortowanie rosnąco.

  • DESC: sortowanie malejąco.

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:

  • 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 poprzednie 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 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)
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 – 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.

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ć!

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