# Window - スクリプト関数

Window() は、完全なテーブルのセクション (または「ウィンドウ」) の複数の行から計算を実行し、行ごとに 1 つの値を生成します。

Window 関数を使用して、次の操作を実行できます。

* 行内の個々の数値を、テーブルのウィンドウ内の平均、最大値、または最小値と比較します。

* ウィンドウ内またはテーブル全体内で個々の値のランクを計算します。

Window 関数はテーブル内のレコード数を変更しませんが、集計関数、関係関数、範囲関数と同様のタスクを実行できます。

Window 関数は、操作しているテーブルの LOAD ステートメント内に含めるか、Resident LOAD などでテーブルを参照する必要があります。この例は[例 - 集計を含む項目の追加](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/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]]))

返されるデータ型: 行ごとに 1 つの値。この値は、別の式と組み合わせたり、別の式で使用したり、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 は定数文字列であり、次の 3 つの値のいずれかを取ることができます。<br><br><ul><li><p><span>ASC</span>: 昇順ソート。</p></li><li><p><span>DESC</span>: 降順ソート。</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/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/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 | 必要に応じて、スライディング ウィンドウ機能の引数を設定します。これにより、集計される行数がさらに制限されます。各出力行には、現在の行の前と後のいくつかの行からの (集計された) 結果のみが含まれます。スライディング ウィンドウには 2 つの引数 (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>例えば、現在の行から 3 行目以降のすべての行を含める場合は、次のようになります。<br><br>Window(concat(Text(Salary),'-'), Department, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment<br><br>上記の例では、スクリプトがパーティション引数とソート タイプの後に続くパラメータを区別できるように、ソート タイプ NONE が指定されています。 |

## 例 - 集計を含む項目の追加

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/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/sense/Subsystems/Hub/Content/Sense_Hub/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/sense/Subsystems/Hub/Content/Sense_Hub/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/sense/Subsystems/Hub/Content/Sense_Hub/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 の給与値も含まれています。これらは、年齢順に並べ替えた場合の Sales 部門パーティション内の前の行と次の行です。

含まれる行を示す別の例として、Windows 式を Window(concat(Text(Salary),'-'), Department, 'ASC', Age, -1, 1) から Window(concat(Text(Name),'-'), Department, 'ASC', Age, -1, 1) に変更してリロードします。以下の表の SortedSlidingWindow の値は、パーティション Sales 内の前の行と次の行の名前を示します。

特定の値でフィルタリングされた集計を含む項目を追加した結果

| 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 はリソースを大量に消費する機能であり、特にメモリの消費量が大きくなります。

* Window は Qlik Sense Mobile には対応していません。

* チャートの数式は Windowをサポートしていません。

* Window 関数を他の Window 関数内にネストすることはできません。

* Window は集計関数内では使用できません。

* Window は、group by 句を含む Load ステートメントでは使用できません。

* Window はテーブル全体をスキャンできる必要があります。

* スライディング ウィンドウ機能を使用する場合、WRank()、RecNo()、RowNo() は Window と一緒に使用できません。

* スライディング ウィンドウ機能を使用すると、ウィンドウのサイズに応じて計算時間が増加します。一般的に、大きなテーブルと大きなウィンドウ サイズの組み合わせは避けるべきです。