メイン コンテンツをスキップする 補完的コンテンツへスキップ

Window - スクリプト関数

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

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

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

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

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

Window 関数は、操作しているテーブルの LOAD ステートメント内に含めるか、Resident LOAD などでテーブルを参照する必要があります。この例は例 - 集計を含む項目の追加を参照してください。

名前は省略できますが、その場合、項目名が 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 (main_expr, [partition1, partition2, ...], [sort_type, [sort_expr],[filter_expr], [start_expr, end_expr]])

返されるデータ型: 行ごとに 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 つの値のいずれかを取ることができます。

  • ASC: 昇順ソート。

  • DESC: 降順ソート。

  • NONE

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 が指定されています。

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

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

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

例 - ソートされたスライディング ウィンドウを使用した項目の追加

制限事項

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

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

  • WindowQlik Sense Mobile には対応していません。

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

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

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

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

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

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

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

このページは役に立ちましたか?

このページまたはコンテンツにタイポ、ステップの省略、技術的エラーなどの問題が見つかった場合はお知らせください。