OFFSET

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

同じテーブル内で、指定されたオフセットだけ "現在の行" より前または後にある 1 行を返します。 現在の行から 1 つの行を求められない場合は、複数の行が返される可能性があります。

構文

OFFSET ( <delta>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

パラメーター

用語 定義
delta データを取得する場所を示す、現在の行より前 (負の値) または後 (正の値) の行数。 スカラー値を返す任意の DAX 式を指定できます。
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 と同等です。

戻り値

<relation> の 1 つ以上の行。

注釈

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

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

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

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

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

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

  • orderBy 列または partitionBy 列の対応する外部値が、<relation> 内に存在しません。
  • <delta> 値を指定すると、パーティション内に存在しない行にシフトします。

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

<reset> は視覚的な計算でのみ使用でき、<orderBy> や <partitionBy> と組み合わせて使用することはできません。 <reset> が存在する場合、<axis> は指定できますが、<relation> は指定できません。

例 1 - 計算列

次の DAX クエリを実行します。

DEFINE
VAR vRelation = SUMMARIZECOLUMNS ( 
                    DimProductCategory[EnglishProductCategoryName], 
                    DimDate[CalendarYear], 
                    "CurrentYearSales", SUM(FactInternetSales[SalesAmount]) 
                  )
EVALUATE
ADDCOLUMNS (
    vRelation, 
    "PreviousYearSales", 
    SELECTCOLUMNS(
        OFFSET ( 
                -1, 
                vRelation, 
                ORDERBY([CalendarYear]), 
                PARTITIONBY([EnglishProductCategoryName])
        ),
        [CurrentYearSales]
    )
)

各製品カテゴリと暦年の総売上と、前年のそのカテゴリの売上合計をまとめたテーブルを返します。

例 2 - メジャー

次の DAX クエリを実行します。

DEFINE
MEASURE DimProduct[CurrentYearSales] = SUM(FactInternetSales[SalesAmount])
MEASURE DimProduct[PreviousYearSales] = CALCULATE(SUM(FactInternetSales[SalesAmount]), OFFSET(-1, , ORDERBY(DimDate[CalendarYear])))
EVALUATE
SUMMARIZECOLUMNS (
    DimDate[CalendarYear],
    "CurrentYearSales", DimProduct[CurrentYearSales],
    "PreviousYearSales", DimProduct[PreviousYearSales]
)

メジャーで OFFSET() を使って、各暦年の売上合計と前年の総売上をまとめたテーブルを返します。

例 3 - 計算列

次の DAX クエリを実行します。

EVALUATE
ADDCOLUMNS (
    FactInternetSales,
    "Previous Sales Amount",
        SELECTCOLUMNS (
            OFFSET (
                -1,
                FactInternetSales,
                ORDERBY ( FactInternetSales[SalesAmount], DESC ),
                PARTITIONBY ( FactInternetSales[ProductKey] ),
                MATCHBY( FactInternetSales[SalesOrderNumber], FactInternetSales[SalesOrderLineNumber] )
            ),
            FactInternetSales[SalesAmount]
        )
)

FactInternetSales テーブルを返します。これには、各売上について同じ製品の前の売上金額を売上金額の降順に示す列が追加され、現在の売上は SalesOrderNumber と SalesOrderLineNumber によって識別されます。 MATCHBY がないと、FactInternetSales テーブルにキー列がないため、クエリはエラーを返します。

例 4 - 視覚的な計算

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

SalesRelativeToPreviousMonth = [SalesAmount] - CALCULATE(SUM([SalesAmount]), OFFSET(-1, ROWS, HIGHESTPARENT))

同じ年内の各月と前の月の売上合計の差を返します。

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

DAX ビジュアル計算

INDEX
ORDERBY
PARTITIONBY
MATCHBY
WINDOW
RANK
ROWNUMBER