WINDOW

適用対象:計算列計算テーブルメジャービジュアル計算

指定された間隔内に配置されている複数の行を返します。

構文

WINDOW ( from[, from_type], to[, to_type][, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

パラメーター

用語 定義
from ウィンドウの開始位置を示します。 スカラー値を返す任意の DAX 式を指定できます。
動作は、<from_type> パラメーターによって異なります。
- <from_type>が REL の場合は、ウィンドウの最初の行を取得するために、現在の行から戻る (負の値) または進む (正の値) 行数。
- <from_type> が ABS で、<from> が正の場合は、パーティションの先頭からのウィンドウの開始位置です。 値は 1 から始まります。 たとえば、1 はウィンドウがパーティションの先頭から始まることを意味します。 <from> が負の場合は、パーティションの末尾からのウィンドウの開始位置になります。 -1 は、パーティションの最後の行を意味します。
from_type <from> パラメーターの動作を変更します。 使用できる値は、ABS (絶対) と REL (相対) です。 既定値は REL です。
to <from> と同じですが、ウィンドウの末尾を示します。 最後の行はウィンドウに含まれます。
to_type <from_type> と同じですが、<to> の動作を変更します。
relation (省略可能) 返される出力行の基になるテーブル式。
指定した場合、<partitionBy> 内のすべての列はそこから、または関連テーブルから取得する必要があります。
省略した場合:
- <orderBy> を明示的に指定する必要があります。
- <orderBy> と <partitionBy> のすべての式は完全修飾の列名で、1 つのテーブルのものである必要があります。
- 既定値は ALLSELECTED() で、<orderBy> と <partitionBy> のすべての列です。
axis (省略可能) 視覚的な図形の軸。 視覚的な計算でのみ使用でき、<relation> を置き換えます。
orderBy (省略可能) 各パーティションの並べ替え方法を定義する式を含む ORDERBY() 句。
省略した場合:
- <relation> を明示的に指定する必要があります。
- 既定値は、<partitionBy> でまだ指定されていない <relation> 内のすべての列による並べ替えです。
blanks (省略可能) 並べ替えでの空白値の処理方法を定義する列挙型。
このパラメーターは将来使用するために予約されています。
現在サポートされている値は DEFAULT のみです。数値が空白の場合、値の順番は 0 と負の値の間になります。 文字列が空白の場合は、空の文字列を含めてすべての文字列の前に並べ替えられます。
partitionBy (省略可能) <relation> のパーティション分割方法を定義する列を含む PARTITIONBY() 句。 省略すると、<relation> は 1 つのパーティションとして扱われます。
matchBy (省略可能) データの照合方法と現在の行の識別方法を定義する列を含む MATCHBY() 句。
reset (省略可能) 視覚的な計算でのみ使用できます。 計算をリセットするかどうかと、視覚的な図形の列階層でのその対象レベルを示します。 指定できる値は、NONE、LOWESTPARENT、HIGHESTPARENT、または整数です。 動作は整数の符号によって次のように異なります。
- 0 または省略した場合、計算はリセットされません。 NONE と同等です。
- 正の場合、整数は、粒度とは関係なく、最も高い列から始まる列を指定します。 HIGHESTPARENT は 1 と同等です。
- 負の場合、整数は、現在の粒度を基準にして、最下位から始まる列を指定します。 LOWESTPARENT は -1 と同等です。

戻り値

ウィンドウのすべての行。

注釈

DAX テーブル関数によって追加される列を除き、<relation> 内の各列 (<matchBy> が存在しない場合) または <matchBy> と <partitionBy> 内の各列 (<matchBy> が存在しない場合) には、操作する現在の行を定義するための、対応する外部値が必要です。 <from_type> と <to_type> の両方の値が ABS である場合は、次のことが <partitionBy> 列にのみ適用されます。

  • 対応する外部列が 1 つだけ存在する場合は、その値が使用されます。
  • 対応する外部列がない場合:
    • WINDOW は最初に、対応する外部列を持たないすべての列を決定します。
    • WINDOW の親コンテキストにおけるこれらの列の既存の値の組み合わせごとに WINDOW が評価されて、対応する行が返されます。
    • WINDOW の最終出力は、これらの行の和集合です。
  • 対応する外部列が複数ある場合は、エラーが返されます。

すべての <relation> の列が DAX テーブル関数によって追加されている場合は、エラーが返されます。

<matchBy> が存在する場合、WINDOW は <matchBy> と <partitionBy> 列を使用して行を識別しようとします。
<matchBy> が存在せず、<orderBy> と <partitionBy> 内で指定されている列によって <relation> のすべての行を一意に識別できない場合は、次のようになります。

  • WINDOW は、すべての行を一意に識別するために必要な追加列の最小数を見つけようとします。
  • そのような列が見つかる場合は、WINDOW によってこれらの新しい列が <orderBy> に自動的に追加され、この新しい orderBy 列のセットを使って各パーティションが並べ替えられます。
  • そのような列が見つからない場合は、エラーが返されます。

次の場合、空のテーブルが返されます。

  • <orderBy> 列または <partitionBy> 列の対応する外部値が、<relation> 内に存在しません。
  • ウィンドウ全体がパーティションの外側にあるか、ウィンドウの先頭がその末尾より後にあります。

<relation> と同じテーブルで定義されている計算列内で WINDOW を使い、<orderBy> を省略すると、エラーが返されます。

ウィンドウの先頭が最初の行より前になる場合は、最初の行に設定されます。 同様に、ウィンドウの末尾がパーティションの最後の行より後になる場合は、最後の行に設定されます。

<リセット>は視覚的な計算でのみ使用でき、<orderBy> または <partitionBy> と組み合わせて使用することはできません。 <リセット>が存在する場合、<軸>を指定できますが、<リレーションシップ>を指定することはできません。

例 1 - メジャー

次のようなメジャーの場合:

3-day Average Price = 
AVERAGEX(
    WINDOW(
        -2,REL,0,REL,
        SUMMARIZE(ALLSELECTED('Sales'), 'Date'[Date], 'Product'[Product]),
        ORDERBY('Date'[Date]),
        KEEP,
        PARTITIONBY('Product'[Product])
    ), 
    CALCULATE(AVERAGE(Sales[Unit Price]))
)

各製品の単価の 3 日間の平均が返されます。 3 日のウィンドウは、製品が売れた 3 日で構成されることに注意してください。必ずしもカレンダーで連続した 3 日ではありません。

例 2 - メジャー

次のようなメジャーの場合:

RunningSum =
SUMX (
    WINDOW (
        1, ABS, 0, REL,
        ALLSELECTED (
            'Date'[Fiscal Year],
            'Date'[Month Number Of Year]
        ),
        PARTITIONBY ( 'Date'[Fiscal Year] )
    ),
    [Total Sales]
)

年度月別の総売上の累計を返し、会計年度ごとに再起動します。

Year 年度月 Sales Amount 集計実行
FY2018 1 $1,327,675 $1,327,675
FY2018 2 $3,936,463 $5,264,138
FY2018 3 $700,873 $5,965,011
FY2018 4 $1,519,275 $7,484,286
FY2018 5 $2,960,378 $10,444,664
FY2018 6 $1,487,671 $11,932,336
FY2018 7 $1,423,357 $13,355,693
FY2018 8 $2,057,902 $15,413,595
FY2018 9 $2,523,948 $17,937,543
FY2018 10 $561,681 $18,499,224
FY2018 11 $4,764,920 $23,264,145
FY2018 12 $596,747 $23,860,891
FY2019 1 $1,847,692 $1,847,692
FY2019 2 $2,829,362 $4,677,054
FY2019 3 $2,092,434 $6,769,488
FY2019 4 $2,405,971 $9,175,459
FY2019 5 $3,459,444 $12,634,903
FY2019 6 $2,850,649 $15,485,552
FY2019 7 $2,939,691 $18,425,243
FY2019 8 $3,964,801 $22,390,045
FY2019 9 $3,287,606 $25,677,650
FY2019 10 $2,157,287 $27,834,938
FY2019 11 $3,611,092 $31,446,030
FY2019 12 $2,624,078 $34,070,109
FY2020 1 $3,235,187 $3,235,187
FY2020 2 $4,070,046 $7,305,233
FY2020 3 $4,429,833 $11,735,066
FY2020 4 $4,002,614 $15,737,680
FY2020 5 $5,265,797 $21,003,477
FY2020 6 $3,465,241 $24,468,717
FY2020 7 $3,513,064 $27,981,781
FY2020 8 $5,247,165 $33,228,947
FY2020 9 $5,104,088 $38,333,035
FY2020 10 $3,542,150 $41,875,184
FY2020 11 $5,151,897 $47,027,081
FY2020 12 $4,851,194 $51,878,275

例 3 - 視覚的な計算

次の視覚的な計算 DAX クエリ:

TotalSalesRunningSumByYear = SUMX(WINDOW(0, ABS, 0, REL, ROWS, HIGHESTPARENT), [SalesAmount])

各年度に計算された月別の累積売上合計を返します。 同じ結果で、HIGHESTPARENT の代わりに 1 や -2 の値を使用できます。

以下のスクリーンショットは、ビジュアル マトリックスとビジュアル計算式を示しています。

DAX ビジュアル計算

例 4 - 視覚的な計算

次の視覚的な計算 DAX クエリ:

TotalSalesRunningSumByQuarter = SUMX(WINDOW(0, ABS, 0, REL, , -1), [SalesAmount])

各四半期に計算された月別の累積売上合計を返します。

INDEX
MOVINGAVERAGE
OFFSET
ORDERBY
PARTITIONBY
RANGE
RANK
ROWNUMBERRUNNINGSUM