# Window - スクリプト関数

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

Window 関数を使用して、次のような演算を実行できます。

* 行内の個別の数値と列内の平均値、最大値、最小値を比較する。

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

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

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

```
[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 は、丸めや基本的な数値演算などの一般的な関数をサポートします。例:

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

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

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

Window(avg(Salary), Department, 'NONE' -3, 3) as AvgDepSalary

構文:

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://:DataFiles/Sales Data.xlsx]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/qlikview/Subsystems/Client/Content/QV_QlikView/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 | size | 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/qlikview/Subsystems/Client/Content/QV_QlikView/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 | size | 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/qlikview/Subsystems/Client/Content/QV_QlikView/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 | size | 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 と使用できません。