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

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

ウィンドウは、丸めや基本的な数値演算などの一般的な機能をサポートしています。例:

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

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]FROM [lib://AttachedFiles/Sales Data.xlsx] (ooxml, embedded labels, table is [Sales Data]);

partition1, partition2

input_expr の後、パーティションはいくつでも定義できます。パーティションは、集計を適用する組み合わせを定義する項目です。集計は、パーティションごとに個別に適用されます。例:

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

上記の場合、パーティションは UnitDepartment、および Country です。

パーティションは必須ではありませんが、項目の適切なウィンドウ作成に必要です。

sort_type, [sort_expr]]

オプションで、ソート タイプとソート数式を指定します。sort_type には、2 つの値のうち 1 つを使用できます。

  • ASC: 昇順。

  • DESC: 降順。

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

例:

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

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

情報メモソート タイプとソート数式は、主に RecNoWRank 関数にのみ必要となります。
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 はリソースを大量に消費する関数です (特にメモリ)。

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

  • Window 関数は、他の Window 関数の内側にネストできません。

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

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

  • スライディング ウィンドウ機能を使用している場合、WRank()RecNo()、および RowNo() は、Window と使用できません。

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

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

分析の近代化プログラムに参加する

Remove banner from view

分析最新化プログラムにより、重要な QlikView app を危険にさらすことなく最新化しましょう。 ここをクリック して詳細を表示するか、次にお問い合わせください。 ampquestions@qlik.com