# Window - スクリプト関数

Window() は複数の行から計算を実行し、各行の値を個別に生成します。

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

* 行内の個々の数値と、列内の平均値、最大値、または最小値を比較します。

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

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

Window 関数では、テーブルに追加するために作業しているテーブルの LOAD ステートメント内にキャッシュが必要です。例:

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

Window は、丸めや基本的な数値演算などの一般的な関数をサポートします。例:

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

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

Window 関数のスライディング ウィンドウを定義できます。これにより、現在の行に Window 関数を適用するときに使用される行の数が設定されます。例えば、Window を前の 3 行と後続の 3 行に設定できます。

構文:

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

戻り値のデータ型: LOAD ステートメントによって作成された結果テーブルに新しい項目が追加されました。

引数：

引数

| 引数 | 説明 |
| --- | --- |
| input\_expr | 関数によって計算され、返された入力式です。Median(Salary) など、集計に基づく任意の式である必要があります。例:<br><br>Window(Median(Salary)) as MedianSalary<br><br>入力は、集計が適用されない項目名とすることもできます。この場合、Window はその項目に Only() 関数が適用されるかのように扱います。例:<br><br>Window(Salary,Department) as WSalary<br><br>必要に応じて、入力式を使用してパーティションを定義できます。パーティションは、group by 句によるグループ化と同じですが、結果が新しい列として入力テーブルに追加される点が異なります。パーティションによって入力テーブルのレコード数が減ることはありません。複数のパーティション項目を定義できます。<br><br>例:<br><br><br>LOAD<br>Window(Max(Sales), City, 'ASC', OrderDate, Sales &gt; 300)<br>+ AddMonths(OrderDate,-6) as MAX\_Sales\_City\_Last\_6\_Mos,<br>Window(Avg(Sales), City, 'ASC', OrderDate, City = 'Portland')<br>+ AddMonths(OrderDate,-6) as Avg\_Sales\_Portland\_Last\_6\_Mos,<br>Window(Max(Sales), City, 'ASC', OrderDate, Sales &gt; 300)<br>+ AddMonths(OrderDate,-12) as MAX\_Sales\_City\_Last\_12\_Mos;<br>LOAD<br>City,<br>Sales,<br>OrderDate<br>FROM [lib://AttachedFiles/Sales Data.xlsx]<br>(ooxml, embedded labels, table is [Sales Data]); |
| partition1, partition2 | input\_expr の後は、任意の数のパーティションを定義できます。パーティションは、集計を適用する組み合わせを定義する項目です。集計は各パーティションに個別に適用されます。例:<br><br>Window(Avg(Salary), Unit, Department, Country) as AvgSalary<br><br>上記では、パーティションは Unit、Department、Country です。<br><br>パーティションは必須ではありませんが、項目を適切にウィンドウ処理するために必要です。 |
| sort\_type, [sort\_expr]] | 必要に応じて、ソート タイプとソート数式を指定します。sort\_type には、次の 2 つの値のいずれかを指定できます。<br><br><ul> <li> <p> <span>ASC</span>:&nbsp;昇順ソート。</p> </li> <li> <p> <span>DESC</span>:&nbsp;降順ソート。</p> </li> </ul><br><br>sort\_type を定義する場合は、ソート式を定義する必要があります。これは、パーティション内の行の順序を決定する数式です。<br><br>例:<br><br>Window(RecNo(), Department, 'ASC', Year)<br><br>上記の例では、パーティション内の結果が Year 項目で昇順にソートされます。<br><br>情報メモソートタイプとソート式は、主に RecNo 関数と WRank 関数でのみ必要となります。 |
| filter\_expr | 必要に応じて、フィルター式を追加します。これは、レコードを計算に含めるかどうかを決定するブール式です。<br><br>このパラメータは完全に省略できます。その結果、フィルターは存在しないはずです。<br><br>例:<br><br>Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)<br>as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
| [start\_expr,end\_expr] | 必要に応じて、スライディング ウィンドウ機能の引数を設定します。 スライディング ウィンドウには 2 つの引数が必要です。<br><br><ul> <li> <p>開始の数式:&nbsp;ウィンドウに含める現在の行より前の行数。</p> </li> <li> <p>終了の数式:&nbsp;ウィンドウに含める現在の行より後の行数。</p> </li> </ul><br><br>例えば、前の 3 行、現在の行、次の行を含める場合は、次のようになります。<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, -3, 1)<br>as WSalaryDepartment<br><br>先行するすべての行、または後続のすべての行を表示するには、Unbounded() 関数を使用できます。例えば、前の行、現在の行、次の行をすべて含める場合は、次のようになります。<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, UNBOUNDED(), 1)<br>as WSlidingSalaryDepartment<br><br>例えば、現在の行から 3 行目以降のすべての行を含める場合は、次のようになります。<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, 3, UNBOUNDED())<br>as WSlidingSalaryDepartment |

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

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

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

ロード スクリプト

データ ロード エディタで新しいタブを作成し、次のデータをインライン ロードとしてロードします。結果を確認するには、以下の Qlik Sense のテーブルを作成します。

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id) as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

結果

集計を含む項目を追加した結果

| transaction\_id | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | サイズ | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | 赤色 | 103.43 |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | オレンジ | 266.775 |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | 青 | 42.935 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | ブラック | 64.21 |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | 赤色 | 273.88 |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | 青 | 103.43 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | ブラック | 266.775 |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | 赤色 | 103.43 |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | オレンジ | 266.775 |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | 青 | 42.935 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | ブラック | 64.21 |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | 赤色 | 273.88 |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | 青 | 103.43 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | ブラック | 266.775 |

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

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

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

ロード スクリプト

データ ロード エディタで新しいタブを作成し、次のデータをインライン ロードとしてロードします。結果を確認するには、以下の Qlik Sense のテーブルを作成します。

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id, color_code = 'Blue') as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

結果

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

| transaction\_id | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | サイズ | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | 赤色 | - |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | オレンジ | - |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | 青 | 42.94 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | ブラック | - |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | 赤色 | - |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | 青 | 118.4 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | ブラック | - |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | 赤色 | - |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | オレンジ | - |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | 青 | 42.94 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | ブラック | - |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | 赤色 | - |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | 青 | 118.4 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | ブラック | - |

## 例 - スライディング ウィンドウを使用した項目の追加

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

#### 例: スライディング ウィンドウを使用した項目の追加

ロード スクリプト

データ ロード エディタで新しいタブを作成し、次のデータをインライン ロードとしてロードします。結果を確認するには、以下の Qlik Sense のテーブルを作成します。

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id, 'ASC', -1, 1, 0, 1) as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

結果

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

| transaction\_id | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | サイズ | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | 赤色 | 41.37 |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | オレンジ | 366.865 |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | 青 | 42.935 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | ブラック | 64.21 |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | 赤色 | 273.88 |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | 青 | 106.3 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | ブラック | 92.42 |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | 赤色 | 165.49 |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | オレンジ | 166.685 |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | 青 | 80.12 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | ブラック | 3.42 |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | 赤色 | 177.56 |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | 青 | 63.55 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | ブラック | 325.95 |

## 制限事項

Window には次の制限があります。

* Window はリソースを大量に消費する機能であり、特にメモリの消費量が大きくなります。

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

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

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

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

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

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