INDEX
指定されたパーティションを指定された順序で並べ替えて、絶対位置 (position パラメーターで指定) にある行を返します。 現在の位置から 1 つの位置を導けない場合は、複数の行が返される可能性があります。
構文
INDEX(<position>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
パラメーター
用語 | 定義 |
---|---|
position | データを取得する (1 から始まる) 絶対位置: - <position> が正: 1 は最初の行、2 は 2 番目の行など。 - <position> が負: -1 は最後の行、-2 は最後から 2 行目など。 <position> が境界外、0、または BLANK() の場合、INDEX は空のテーブルを返します。 スカラー値を返す任意の 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 と同等です。 |
戻り値
絶対位置の行。
注釈
<partitionBy> と <matchBy> の各列には、操作する "現在位置" を定義するための、対応する外部値が必要であり、次のような動作になります。
- 対応する外部列が 1 つだけ存在する場合は、その値が使用されます。
- 対応する外部列がない場合:
- INDEX は最初に、対応する外部列を持たないすべての <partitionBy> および <matchBy> 列を決定します。
- INDEX の親コンテキストにおけるこれらの列の既存の値の組み合わせごとに INDEX が評価されて、行が返されます。
- INDEX の最終出力は、これらの行の和集合です。
- 対応する外部列が複数ある場合は、エラーが返されます。
<matchBy> が存在する場合、INDEX は <matchBy> と <partitionBy> 列を使用して行を識別しようとします。
<matchBy> が存在せず、<orderBy> と <partitionBy> 内で指定されている列によって <relation> のすべての行を一意に識別できない場合:
- INDEX は、すべての行を一意に識別するために必要な追加列の最小数を見つけようとします。
- そのような列が見つかる場合は、INDEX によってこれらの新しい列が <orderBy> に自動的に追加され、この新しい orderBy 列のセットを使って各パーティションが並べ替えられます。
- そのような列が見つからない場合は、エラーが返されます。
次の場合、空のテーブルが返されます。
- partitionBy 列の対応する外部値が、<relation> 内に存在しません。
- <position> の値が、パーティション内に存在しない位置を参照しています。
<relation> と同じテーブルで定義されている計算列内で INDEX を使い、<orderBy> を省略すると、エラーが返されます。
<リセット>は視覚的な計算でのみ使用でき、<orderBy> または <partitionBy> と組み合わせて使用することはできません。 <reset> が存在する場合、<axis> は指定できますが、<relation> は指定できません。
例 1 - 計算列
次の DAX クエリを実行します。
EVALUATE INDEX(1, ALL(DimDate[CalendarYear]))
次の表を返します。
DimDate[CalendarYear] |
---|
2005 |
例 2 - 計算列
次の DAX クエリを実行します。
EVALUATE
SUMMARIZECOLUMNS (
FactInternetSales[ProductKey],
DimDate[MonthNumberOfYear],
FILTER (
VALUES(FactInternetSales[ProductKey]),
[ProductKey] < 222
),
"CurrentSales", SUM(FactInternetSales[SalesAmount]),
"LastMonthSales",
CALCULATE (
SUM(FactInternetSales[SalesAmount]),
INDEX(-1, ORDERBY(DimDate[MonthNumberOfYear]))
)
)
ORDER BY [ProductKey], [MonthNumberOfYear]
次の表を返します。
FactInternetSales[ProductKey] | DimDate[MonthNumberOfYear] | [CurrentSales] | [LastMonthSales] |
---|---|---|---|
214 | 1 | 5423.45 | 8047.7 |
214 | 2 | 4968.58 | 8047.7 |
214 | 3 | 5598.4 | 8047.7 |
214 | 4 | 5073.55 | 8047.7 |
214 | 5 | 5248.5 | 8047.7 |
214 | 6 | 7487.86 | 8047.7 |
214 | 7 | 7382.89 | 8047.7 |
214 | 8 | 6543.13 | 8047.7 |
214 | 9 | 6788.06 | 8047.7 |
214 | 10 | 6858.04 | 8047.7 |
214 | 11 | 8607.54 | 8047.7 |
214 | 12 | 8047.7 | 8047.7 |
217 | 1 | 5353.47 | 7767.78 |
217 | 2 | 4268.78 | 7767.78 |
217 | 3 | 5773.35 | 7767.78 |
217 | 4 | 5738.36 | 7767.78 |
217 | 5 | 6158.24 | 7767.78 |
217 | 6 | 6998 | 7767.78 |
217 | 7 | 5563.41 | 7767.78 |
217 | 8 | 5913.31 | 7767.78 |
217 | 9 | 5913.31 | 7767.78 |
217 | 10 | 6823.05 | 7767.78 |
217 | 11 | 6683.09 | 7767.78 |
217 | 12 | 7767.78 | 7767.78 |
例 3 - 視覚的な計算
次の視覚的な計算 DAX クエリ:
SalesComparedToBeginningOfYear = [SalesAmount] - CALCULATE(SUM([SalesAmount]), INDEX(1, ROWS, HIGHESTPARENT))
SalesComparedToBeginningOfQuarter = [SalesAmount] - CALCULATE(SUM([SalesAmount]), INDEX(1, , -1))
テーブルを拡張して、各月について次の内容を含むようにします:
- 売上総額、
- 各年度の最初の月との差額、
- 各四半期の最初の月との差額。
以下のスクリーンショットは、視覚的なマトリックスと最初の視覚的な計算式を示しています。