Window - 指令碼函數
Window() 從多列執行計算,為每列分別產生值。
您可以使用 Window 函數執行操作,例如:
-
比較列中的個別數值與欄內的平均、最大或最小值。
-
計算個別值的排名,欄內或整個表格內皆可。
Window 函數不會變更表格中的記錄數量,但仍然可以執行與彙總、關係和範圍函數類似的任務。
Window 函數在您所用表格的 LOAD 陳述式內必須有快取,以新增至表格。例如︰
Window 支援一般函數,例如捨入或基本數字操作。例如︰
您可以定義 Window 函數的滑動視窗。這設定在目前的列套用 Window 函數時使用的列數。例如,您可以將視窗設定為之前 3 列和之後 3 列。
語法:
傳回的資料類型:新欄位新增至透過 LOAD 陳述式建立的結果表格。
引數:
引數 | 描述 |
---|---|
input_expr |
透過函數計算並傳回輸入運算式。這必須是根據彙總的任何運算式,例如 Median(Salary)。例如︰ Window(Median(Salary)) as MedianSalary
輸入也可以是沒有套用彙總的欄位名稱。在此情況下,Window 對此的看待方式如同 Only() 函數套用至該欄位。例如︰ Window(Salary,Department) as WSalary
您也可以選擇定義透過輸入運算式分割。分割與透過 group by 子句達到的分組相同,差異為結果作為新欄新增至輸入表格。分割不會減少輸入表格的記錄數量。可以定義多個分割區欄位。 範例:
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://AttachedFiles/Sales Data.xlsx] (ooxml, embedded labels, table is [Sales Data]);
|
partition1, partition2 |
在 input_expr 之後,您可以定任何分割區數量。分割區是定義哪些組合要用來套用彙總的欄位。每個分割區會獨立套件彙總。例如︰ Window(Avg(Salary), Unit, Department, Country) as AvgSalary
總之,分割區為 Unit、Department 和 Country。 分割區不是強制性質,但為適當的欄位視窗化所必需。 |
sort_type, [sort_expr]] |
也可以選擇指定排序類型和排序運算式。sort_type 可以有兩個值之一:
若您定義 sort_type,您需要定義排序運算式。此為決定分割區內列順序的運算式。 例如︰ Window(RecNo(), Department, 'ASC', Year)
在以上範例中,分割區內的結果透過 Year 欄位遞增排序。 資訊備註主要是 RecNo 和 WRank 函數才需要排序類型和排序運算式。
|
filter_expr |
也可以新增篩選運算式。此為布林值運算式,這決定是否應將記錄納入計算中。 此參數可以完全省略,結果應為沒有篩選。 例如︰ Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)
as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
[start_expr,end_expr] |
也可以選擇為滑動視窗功能設定引數。 滑動視窗需要兩個引數:
例如,若您想要納入之前 3 列、目前列和下一列: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, -3, 1) 若要指示之前所有列或之後所有列,您可以使用 Unbounded() 函數。例如,若要納入之前所有列、目前列和下一列: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, UNBOUNDED(), 1) 例如,若要納入從目前列算起第三列和之後所有列: Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED()) |
範例 - 新增包含彙總的欄位
範例 - 新增包含為特定值篩選之彙總的欄位
範例 - 新增具有滑動視窗的欄位
限制
Window 具有下列限制:
-
Window 是資源密集函數,尤其是在記憶體取用方面。
-
Qlik Sense Mobile 中不支援 Window。
-
圖表運算式不支援 Window。
-
您無法在 Window 函數內部內嵌 Window 函數。
-
Window 無法在彙總函數內部使用。
-
Window 需要能夠掃描整個表格。
-
WRank()、RecNo() 和 RowNo() 無法在使用滑動視窗功能時用於 Window。