# Window 指令碼函數

Window() 對完整表格的一個區段 (或「視窗」) 的多列執行計算，並為每一列產生單一值。

您可以使用 Window 函數執行操作，例如：

* 比較列中的個別數值與表格視窗內的平均、最大或最小值。

* 計算個別值的排名，視窗內或整個表格內皆可。

Window 函數不會變更表格中的記錄數量，但仍然可以執行與彙總、關係和範圍函數類似的任務。

Window 函數必須包含在您正在使用的表格的 LOAD 陳述式中，或參考該表格 (例如使用 Resident LOAD)。如需範例，請參閱 [範例 - 新增包含彙總的欄位](https://help.qlik.com/zh-TW/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm#Example2)。

可以省略名稱，但這會導致欄位名稱設定為整個 Window 函數運算式。例如，以下範例中的 AvgDepSalary：

```
[AvgSalary]:
Load 
	*,
	Window(avg(Salary), Department) as AvgDepSalary
Resident Employees;
```

資訊備註

建議向 Window 函數提供欄位名稱。

Window 支援一般函數，例如捨入或基本數字操作。例如︰

```
Load *, Round(Window(Sum(Salary),Department)) as SumDepSalary
```

```
Load *, Window(Sum(Salary),Department) + 5 as SumDepSalary
```

資訊備註

Window 函數掃描完整表格。從記憶體取用的角度而言，這種掃描的成本與表格中的欄位數量成正比。除了 Window 函數所操作的欄位之外，具有少量欄位的表格一律比具有許多欄位的表格更受歡迎。

通常，相較於包含相同彙總、Window 子句 (篩選條件)、Where 子句 (分割區) 和 Group by 子句 (排序) 的類似指令碼操作，Order by 函數會取用 2-4 倍的記憶體，而且載入時間也會延長 2-4 倍。

Window (Window (main\_expr, [partition1, partition2, ...], [sort\_type, [sort\_expr],[filter\_expr], [start\_expr, end\_expr]]))

傳回資料類型：每列一個值，可以與另一個運算式組合或用於另一個運算式，或直接新增至 LOAD 陳述式所建立的結果表格中。

引數

| 引數 | 描述 |
| --- | --- |
| main\_expr | 透過函數計算並傳回主要輸入運算式。這必須是基於彙總的任何運算式，例如 Median(Salary)。例如︰<br><br>Window(Median(Salary)) as MedianSalary<br><br>運算式也可以是沒有套用彙總的欄位名稱。在此情況下，Window 的處理方式如同 Only() 函數套用至該欄位。例如︰<br><br>Window(Salary) as WSalary<br><br>不允許使用包含巢狀彙總或巢狀視窗函數的運算式，例如 Window(Sum(Avg(Salary))) 或 Window(Sum(Window(Salary)))。 |
| partition1, partition2 | 在 main\_expr 之後，您可以定任何分割區數量。分割是定義哪些組合要套用彙總的欄位。例如︰<br><br>Window(Avg(Salary), Department) as AvgDepSalary<br><br>這會計算每個部門的平均薪資。<br><br>提供多個分割區參數時，彙總將透過分割區欄位的唯一組合套用於每一列。例如︰<br><br>Window(Avg(Salary), Department, Country) as AvgDepSalaryPerCountry<br><br>這會計算每個國家中每個部門的平均薪資。不同國家的重複部門 (例如瑞典的行銷和加拿大的行銷) 將被視為不同的分割區。<br><br>分割類似於透過 group by 子句達成的分組。不過，分割不會減少相較於輸入表格的記錄數量。 |
| sort\_type, [sort\_expr] | 也可以選擇指定排序類型和排序運算式。這定義了執行彙總的順序。sort\_type 是常數字串，可以有以下三個值之一：<br><br><ul> <li> <p> <span>ASC</span>：遞增排序。</p> </li> <li> <p> <span>DESC</span>：&nbsp;遞減排序。</p> </li> <li> <p>NONE</p> </li> </ul><br><br>若您定義 sort\_type ASC 或 DESC，則您需要定義排序運算式。透過 sort\_type NONE，不應提供排序運算式。排序運算式決定分割區內列的順序。<br><br>例如︰<br><br>Window(RecNo(), Department, 'ASC', Year)<br><br>在以上範例中，分割區內的彙總透過 Year 欄位遞增執行。<br><br>排序參數也會影響滑動視窗處理表格的順序。如需範例，請參閱 [範例 - 新增具有排序滑動視窗的欄位](https://help.qlik.com/zh-TW/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm#Example3)。 |
| filter\_expr | 也可以選擇新增篩選運算式。此為決定是否應在計算中納入記錄的布林運算式。<br><br>如果提供了 filter\_expr，則應包括排序類型。如果沒有定義排序類型，則可能會將引數解譯為分割區參數，而不是篩選運算式。filter\_expr 參數可以完全省略，也可以包含一個真值。這兩種情況都會導致不使用任何篩選條件，因此不會排除任何列。<br><br>例如︰<br><br>Window(avg(Salary), Department, 'ASC', Age, Country='US' Or Country='Canada') as AvgDepSalaryInUsOrCanada<br><br>上述 Window 陳述式將篩選掉 Country 欄位不是 US 或 Canada 的任何列，並從彙總中排除這些列。篩選掉的列仍然會有輸出值，但與所有其他輸出列一樣，這只包含未透過篩選條件排除的列的彙總結果。 |
| start\_expr,end\_expr | 也可以選擇為滑動視窗功能設定引數。這進一步限制了要彙總在一起的列數。每個輸出列將僅包含目前列之前和之後數列的 (彙總) 結果。滑動視窗需要兩個引數 (start\_expr,end\_expr)。如果提供了這些引數，則不應略過排序類型。否則，可能會將引數解譯為分割區參數，而不是滑動視窗。參數 start\_expr,end\_expr 包括：<br><br><ul> <li> <p>開始運算式：&nbsp;要在視窗中納入的目前列之前的列數。</p> </li> <li> <p>結束運算式：&nbsp;要在視窗中納入的目前列之後的列數。</p> </li> </ul><br><br>例如，若您想要納入之前 3 列、目前列和下一列：<br><br>Window(concat(Text(Salary),'-'), Department, 'NONE', 1, -3, 1) as WSlidingSalaryDepartment<br><br>若要指示所有之前的列或所有之後的列，您可以使用 Unbounded() 函數。例如，若要納入所有之前的列、目前的列以及下一列：<br><br>Window(concat(Text(Salary),'-'), Department, 'NONE', 1, UNBOUNDED(), 1) as WSlidingSalaryDepartment<br><br>例如，若要納入從目前的列算起第三列和所有之後的列：<br><br>Window(concat(Text(Salary),'-'), Department, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment<br><br>在上面的範例中，提供了排序類型 NONE，以便指令碼可以區分分割區引數和排序類型之後的參數。 |

## 範例 - 新增包含彙總的欄位

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### 範例：新增包含彙總的欄位

載入指令嗎

在資料載入編輯器中建立新的索引標籤，然後載入下列資料作為內嵌載入。在 Qlik Sense 中建立以下表格以查看結果。

```
[Employees]:
Load 
	*,
	Window(avg(Salary), Department) as AvgDepSalary
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
]; 
```

結果

新增包含彙總的欄位的結果

| Name | Department | Salary | Age | Year | Country | AvgDepSalary |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 39 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 39 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 61 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 61 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 39 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 39 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 61 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 61 |

## 範例 - 新增包含為特定值篩選之彙總的欄位

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### 範例：新增包含依特定值篩選之彙總的欄位

載入指令嗎

在資料載入編輯器中建立新的索引標籤，然後載入下列資料作為內嵌載入。在 Qlik Sense 中建立以下表格以查看結果。

```
[Employees]:
Load 
*,
Window(avg(Salary), Department, 'NONE', Country = 'Sweden') as AvgDepSalarySweden
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
];
```

結果

新增包含為特定值篩選之彙總的欄位的結果

| Name | Department | Salary | Age | Year | Country | AvgDepSalarySweden |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 44 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 44 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 55 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 55 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 44 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 44 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 55 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 55 |

## 範例 - 新增具有滑動視窗的欄位

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### 範例：使用滑動視窗新增欄位

載入指令嗎

在資料載入編輯器中建立新的索引標籤，然後載入下列資料作為內嵌載入。在 Qlik Sense 中建立以下表格以查看結果。

```
[Employees]:
Load 
	*,
	Window(concat(Text(Salary),'-'), Department, 'NONE', -1, 1) as SlidingWindow
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
];
```

結果

新增包含為特定值篩選之彙總的欄位的結果

| Name | Department | Salary | Age | Year | Country | SlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 11-22 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 11-22-55 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 33-44 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 33-44-77 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 22-55-66 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 55-66 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 44-77-88 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 77-88 |

## 範例 - 新增具有排序滑動視窗的欄位

[](https://help.qlik.com/en-US/qlikview/Subsystems/Client/Content/QV_QlikView/Scripting/WindowFunctions/window.htm)

#### 範例：使用滑動視窗新增欄位

載入指令嗎

在資料載入編輯器中建立新的索引標籤，然後載入下列資料作為內嵌載入。在 Qlik Sense 中建立以下表格以查看結果。

```
[Employees]:
Load 
	*,
	Window(concat(Text(Salary),'-'), Department, 'ASC', Age, -1, 1) as SortedSlidingWindow
Inline [
	Name, Department, Salary, Age, Year, Country
	David, Sales, 11, 32, 2019, Canada
	Sara, Sales, 22, 25, 2022, Sweden
	Nils, Marketing, 33, 18, 2022, Sweden
	Patrick, Marketing, 44, 43, 2022, Canada
	Anna, Sales, 55, 33, 2023, Canada
	Johan, Sales, 66, 26, 2025, Sweden
	Olle, Marketing, 77, 19, 2023, Sweden
	Bonnie, Marketing, 88, 44, 2023, US
];
```

結果

新增包含為特定值篩選之彙總的欄位的結果

| Name | Department | Salary | Age | Year | Country | SortedSlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| David | Sales | 11 | 32 | 2019 | Canada | 11-55-66 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 22-66 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 33-77-88 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 44-77 |
| Anna | Sales | 55 | 33 | 2023 | Canada | 11-55 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 11-22-66 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 33-44-77 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 33-88 |

為了進一步理解分割區和排序順序如何影響滑動視窗中的彙總，請按名稱以遞增方式排序表格。

新增包含為特定值篩選之彙總的欄位的結果

| Name | Department | Salary | Age | Year | Country | SortedSlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| Anna | Sales | 55 | 33 | 2023 | Canada | 11-55 |
| Bonnie | Marketing | 88 | 44 | 2023 | US | 33-88 |
| David | Sales | 11 | 32 | 2019 | Canada | 11-55-66 |
| Johan | Sales | 66 | 26 | 2025 | Sweden | 11-22-66 |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | 33-77-88 |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | 33-44-77 |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | 44-77 |
| Sara | Sales | 22 | 25 | 2022 | Sweden | 22-66 |

在 Johan的列中，彙總包括 David 以及 Sara 的薪資值。這些是依名稱排序的銷售部門分割區內的前一列和後一列。

如需另一個顯示包含哪些列的範例，請將 Windows 運算式從 Window(concat(Text(Salary),'-'), Department, 'ASC', Age, -1, 1) 變更為 Window(concat(Text(Name),'-'), Department, 'ASC', Age, -1, 1) 並載入。下表中 SortedSlidingWindow 的值從分割區銷售內的前一列和後一列提供名稱。

新增包含為特定值篩選之彙總的欄位的結果

| Name | Department | Salary | Age | Year | Country | SortedSlidingWindow |
| --- | --- | --- | --- | --- | --- | --- |
| Anna | Sales | 55 | 33 | 2023 | Canada | Anna-David |
| Bonnie | Marketing | 88 | 44 | 2023 | US | Bonnie-Nils |
| David | Sales | 11 | 32 | 2019 | Canada | Anna-David-Johan |
| Johan | Sales | 66 | 26 | 2025 | Sweden | David-Johan-Sara |
| Nils | Marketing | 33 | 18 | 2022 | Sweden | Bonnie-Nils-Olle |
| Olle | Marketing | 77 | 19 | 2023 | Sweden | Nils-Olle-Patrick |
| Patrick | Marketing | 44 | 43 | 2022 | Canada | Olle-Patrick |
| Sara | Sales | 22 | 25 | 2022 | Sweden | Johan-Sara |

## 限制

Window 具有下列限制：

* Window 是資源密集函數，尤其是在記憶體取用方面。

* Qlik Sense Mobile 中不支援 Window。

* 圖表運算式不支援 Window。

* 您無法在其他 Window 函數內部內嵌 Window 函數。

* 無法在彙總函數內部使用 Window。

* Window 不能在有 group by 子句的 LOAD 陳述式中使用。

* Window 無法用於包含 where 子句的 load 陳述式

* Window 需要能夠掃描整個表格。

* 使用滑動視窗功能時，WRank()、RecNo() 和 RowNo() 無法搭配 Window 使用。

* 使用滑動視窗功能時，計算時間會隨著視窗大小的增加而增加。通常應避免結合使用大型表格與大型視窗。