Window スクリプト関数
最終更新日時: 2026/10/07Window() は、完全なテーブルのセクション (または「ウィンドウ」) の複数の行から計算を実行し、行ごとに 1 つの値を生成します。
Window 関数を使用して、次のような演算を実行できます。
-
行内の個々の数値を、テーブルのウィンドウ内の平均、最大値、または最小値と比較します。
-
ウィンドウ内またはテーブル全体内で個々の値のランクを計算します。
Window 関数はテーブル内のレコード数を変更しませんが、集計関数、関係関数、範囲関数と同様のタスクを実行できます。
Window 関数は、操作しているテーブルの LOAD ステートメント内に含めるか、Resident LOAD などでテーブルを参照する必要があります。この例は例 - 集計を含む項目の追加を参照してください。
名前は省略できますが、その場合、項目名が Window 関数式全体に設定されます。たとえば、AvgDepSalary は次の例のようになります。
Window 関数には項目名を付けることをお勧めします。
Window は、丸めや基本的な数値演算などの一般的な関数をサポートします。例:
Window 関数はテーブル全体をスキャンします。メモリ消費の観点から見ると、このスキャンのコストはテーブル内の項目の数に比例します。Window 関数が動作する項目以外の項目がいくつかあるテーブルは、多くの項目があるテーブルよりも常に優先されます。
通常、Window 関数は、同じ集計、Where 句 (フィルター)、Group by 句 (パーティション)、Order by 句 (ソート) を含む同様のスクリプト操作と比較すると、2 ~ 4 倍のメモリを消費し、リロード時間も 2 ~ 4 倍長くなります。
返されるデータ型: 行ごとに 1 つの値。この値は、別の式と組み合わせたり、別の式で使用したり、LOAD ステートメントによって作成された結果のテーブルに直接追加したりできます。
| 引数 | 説明 |
|---|---|
| main_expr |
関数によって計算され、返される主な入力式です。集計に基づいた数式である必要があります (Median(Salary) など)。例: Window(Median(Salary)) as MedianSalary
数式は、集計が適用されない項目名とすることもできます。この場合、Window が、Only() 関数がその項目に適用されたかのように処理します。例: Window(Salary) as WSalary
Window(Sum(Avg(Salary))) やWindow(Sum(Window(Salary))) などのネストされた集計またはネストされたウィンドウ関数を含む数式は許可されません。 |
| partition1, partition2 |
main_expr の後は、任意の数のパーティションを定義できます。パーティションは、集計を適用する組み合わせを定義する項目です。例: Window(Avg(Salary), Department) as AvgDepSalary
各部門の平均給与を計算します。 複数のパーティション パラメーターが指定されている場合、パーティション 項目の一意の組み合わせを持つ各行に集計が適用されます。例: Window(Avg(Salary), Department, Country) as AvgDepSalaryPerCountry
各国の各部門の平均給与を計算します。スウェーデンのマーケティングとカナダのマーケティングなど、異なる国での重複した部門は、異なるパーティションとして扱われます。 パーティショニングは、group by 句によるグループ化と似ています。ただし、パーティショニングによって、入力テーブルと比較したレコード数は減りません。 |
| sort_type, [sort_expr] |
オプションで、ソート タイプとソート数式を指定します。これは、集計が実行される順序を定義します。sort_type は定数文字列であり、次の 3 つの値のいずれかを取ることができます。
sort_type ASC または DESC を定義する場合は、ソート数式を定義する必要があります。sort_type NONE の場合、ソート数式を指定する必要はありません。ソート数式は、パーティション内の行の順序を決定します。 例: Window(RecNo(), Department, 'ASC', Year)
上記の例では、パーティション内の集計は Year 項目の昇順で実行されます。 ソート パラメーターは、スライディング ウィンドウがテーブルを処理する順序にも影響します。例については、「例 - ソートされたスライディング ウィンドウを使用した項目の追加」を参照してください。 |
| filter_expr |
オプションで、フィルター式を追加します。これは、レコードを計算に含めるかどうかを決定するブール式です。 filter_expr が指定されている場合は、ソート タイプを含める必要があります。ソート タイプが定義されていない場合、引数はソート数式ではなくパーティション パラメーターとして解釈されます。filter_expr パラメーターは完全に省略することも、真の値を含めることもできます。どちらもフィルターを使用しないため、除外される行はありません。 例: Window(avg(Salary), Department, 'ASC', Age, Country='US' Or Country='Canada') as AvgDepSalaryInUsOrCanada
上記の Window ステートメントは、Country項目が US または Canada でない行をフィルタリングし、それらの行を集計から除外します。フィルタリングで除外された行の出力値は残りますが、他のすべての出力行と同様に、フィルタリングによって除外されていない行の集計結果のみが含まれます。 |
| start_expr,end_expr |
必要に応じて、スライディング ウィンドウ機能の引数を設定します。これにより、集計される行数がさらに制限されます。各出力行には、現在の行の前と後のいくつかの行からの (集計された) 結果のみが含まれます。スライディング ウィンドウには 2 つの引数 (start_expr,end_expr) が必要です。これらの引数が指定されている場合は、ソート タイプをスキップしないでください。スキップすると、引数はスライディング ウィンドウではなくパーティション パラメーターとして解釈される可能性があります。パラメーター start_expr,end_expr は次のもので構成されます。
例えば、前の 3 行、現在の行、次の行を含める場合は、次のようになります。 Window(concat(Text(Salary),'-'), Department, 'NONE', 1, -3, 1) as WSlidingSalaryDepartment
先行行と後続行をすべて示すには、Unbounded() 関数を使用できます。例えば、先行行、現行行、後続行を含めたい場合: Window(concat(Text(Salary),'-'), Department, 'NONE', 1, UNBOUNDED(), 1) as WSlidingSalaryDepartment
例えば、現行行から 3 行目と、すべての後続行を含めるには: Window(concat(Text(Salary),'-'), Department, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment
上記の例では、スクリプトがパーティション引数とソート タイプの後に続くパラメータを区別できるように、ソート タイプ NONE が指定されています。 |
例 - 集計を含む項目の追加
ロード スクリプト
データ ロード エディタで新しいタブを作成し、次のデータをインライン ロードとしてロードします。結果を確認するには、以下の 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 |
例 - 特定の値でフィルタリングされた集計を含む項目の追加
ロード スクリプト
データ ロード エディタで新しいタブを作成し、次のデータをインライン ロードとしてロードします。結果を確認するには、以下の 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 |
例 - スライディング ウィンドウを使用した項目の追加
ロード スクリプト
データ ロード エディタで新しいタブを作成し、次のデータをインライン ロードとしてロードします。結果を確認するには、以下の 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 |
例 - ソートされたスライディング ウィンドウを使用した項目の追加
ロード スクリプト
データ ロード エディタで新しいタブを作成し、次のデータをインライン ロードとしてロードします。結果を確認するには、以下の 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 は、where 句を含む load ステートメントでは使用できません
-
Window は、テーブル全体をスキャンできる必要があります。
-
スライディング ウィンドウ機能を使用している場合、WRank()、RecNo()、および RowNo() は、Window と使用できません。
-
スライディング ウィンドウ機能を使用すると、ウィンドウのサイズに応じて計算時間が増加します。一般的に、大きなテーブルと大きなウィンドウ サイズの組み合わせは避けるべきです。