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

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);

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

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

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

構文:  

Window (input_expr, [partition1, partition2, ...], [sort_type, [sort_expr]],[filter_expr], [start_expr,end_expr])

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

引数:  

引数
引数 説明
input_expr

関数によって計算され、返された入力式です。Median(Salary) など、集計に基づく任意の式である必要があります。例:

Window(Median(Salary)) as MedianSalary

入力は、集計が適用されない項目名とすることもできます。この場合、Window はその項目に Only() 関数が適用されるかのように扱います。例:

Window(Salary,Department) as WSalary

 

必要に応じて、入力式を使用してパーティションを定義できます。パーティションは、group by 句によるグループ化と同じですが、結果が新しい列として入力テーブルに追加される点が異なります。パーティションによって入力テーブルのレコード数が減ることはありません。複数のパーティション項目を定義できます。

例: 

LOAD Window(Max(Sales), City, 'ASC', OrderDate, Sales > 300)
+ AddMonths(OrderDate,-6) as MAX_Sales_City_Last_6_Mos, Window(Avg(Sales), City, 'ASC', OrderDate, City = 'Portland')
+ AddMonths(OrderDate,-6) as Avg_Sales_Portland_Last_6_Mos, Window(Max(Sales), City, 'ASC', OrderDate, Sales > 300)
+ AddMonths(OrderDate,-12) as MAX_Sales_City_Last_12_Mos; LOAD City, Sales, OrderDate FROM [lib://:DataFiles/Sales Data.xlsx] (ooxml, embedded labels, table is [Sales Data]);

partition1, partition2

input_expr の後は、任意の数のパーティションを定義できます。パーティションは、集計を適用する組み合わせを定義する項目です。集計は各パーティションに個別に適用されます。例:

Window(Avg(Salary), Unit, Department, Country) as AvgSalary

上記では、パーティションは UnitDepartmentCountry です。

パーティションは必須ではありませんが、項目を適切にウィンドウ処理するために必要です。

sort_type, [sort_expr]]

必要に応じて、ソート タイプとソート数式を指定します。sort_type には、次の 2 つの値のいずれかを指定できます。

  • ASC: 昇順ソート。

  • DESC: 降順ソート。

sort_type を定義する場合は、ソート式を定義する必要があります。これは、パーティション内の行の順序を決定する数式です。

例:

Window(RecNo(), Department, 'ASC', Year)

上記の例では、パーティション内の結果が Year 項目で昇順にソートされます。

情報メモソートタイプとソート式は、主に RecNo 関数と WRank 関数でのみ必要となります。
filter_expr

必要に応じて、フィルター式を追加します。これは、レコードを計算に含めるかどうかを決定するブール式です。

このパラメータは完全に省略できます。その結果、フィルターは存在しないはずです。

例:

Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)
as wAvgSalary) as wAvgSalaryIfEmpIs3or7
[start_expr,end_expr]

必要に応じて、スライディング ウィンドウ機能の引数を設定します。 スライディング ウィンドウには 2 つの引数が必要です。

  • 開始の数式: ウィンドウに含める現在の行より前の行数。

  • 終了の数式: ウィンドウに含める現在の行より後の行数。

例えば、前の 3 行、現在の行、次の行を含める場合は、次のようになります。

Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, -3, 1)
as WSalaryDepartment

先行するすべての行、または後続のすべての行を表示するには、Unbounded() 関数を使用できます。例えば、前の行、現在の行、次の行をすべて含める場合は、次のようになります。

Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, UNBOUNDED(), 1)
as WSlidingSalaryDepartment

例えば、現在の行から 3 行目以降のすべての行を含める場合は、次のようになります。

Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED())
as WSlidingSalaryDepartment

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

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

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

制限事項

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

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

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

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

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

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

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

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

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

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