ROWNUMBER
指定されたパーティション内の現在のコンテキストの一意のランクを、指定された順序で並べ替えて返します。 一致するものが見つからない場合、行番号は空白になります。
構文
ROWNUMBER ( [<relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
パラメーター
用語 | 定義 |
---|---|
relation | (省略可能) 返される出力行の基になるテーブル式。 指定する場合、<orderBy> と <partitionBy> のすべての列は、それから取得する必要があります。 省略した場合: - <orderBy> を明示的に指定する必要があります。 - <orderBy> と <partitionBy> のすべての列は完全に修飾されていて、1 つのテーブルのものである必要があります。 - 既定値は ALLSELECTED() で、<orderBy> と <partitionBy> のすべての列です。 |
axis | (省略可能) 視覚的な図形の軸。 視覚的な計算でのみ使用でき、<relation> を置き換えます。 |
orderBy | (省略可能) 各パーティションの並べ替え方法を定義する列を含む ORDERBY() 句。 省略した場合: - <relation> を明示的に指定する必要があります。 - 既定値は、<partitionBy> でまだ指定されていない <relation> 内のすべての列による並べ替えです。 |
blanks | (省略可能) 並べ替えでの空白値の処理方法を定義する列挙型。 サポートされる値は次のとおりです。
注。<blanks> パラメーターが指定されているとき、個々の式でも ORDERBY() 関数に blanks が指定されている場合、関連する orderBy 式については個々の orderBy 式の <blanks> が優先され、<blanks> が指定されていない orderBy 式については、親 Window 関数の <blanks> パラメーターに従います。 |
partitionBy | (省略可能) <relation> のパーティション分割方法を定義する列を含む PARTITIONBY() 句。 省略すると、<relation> は 1 つのパーティションとして扱われます。 |
matchBy | (省略可能) データの照合方法と現在の行の識別方法を定義する列を含む MATCHBY() 句。 |
reset | (省略可能) 視覚的な計算でのみ使用できます。 計算をリセットするかどうかと、視覚的な図形の列階層でのその対象レベルを示します。 指定できる値は、NONE、LOWESTPARENT、HIGHESTPARENT、または整数です。 動作は整数の符号によって次のように異なります。 - 0 または省略した場合、計算はリセットされません。 NONE と同等です。 - 正の場合、整数は、粒度とは関係なく、最も高い列から始まる列を指定します。 HIGHESTPARENT は 1 と同等です。 - 負の場合、整数は、現在の粒度を基準にして、最下位から始まる列を指定します。 LOWESTPARENT は -1 と同等です。 |
戻り値
現在のコンテキストの行番号の数字。
注釈
<orderBy>、<partitionBy>、<matchBy> の各列には、操作する現在の行を定義するための、対応する外部値が必要であり、次のような動作になります。
- 対応する外部列が 1 つだけ存在する場合は、その値が使用されます。
- 対応する外部列がない場合は、次のようになります。
- ROWNUMBER は最初に、対応する外部列を持たないすべての <orderBy>、<partitionBy>、<matchBy> 列を決定します。
- ROWNUMBER の親コンテキストにおけるこれらの列の既存の値の組み合わせごとに ROWNUMBER が評価されて、行が返されます。
- ROWNUMBER の最終出力は、これらの行の和集合です。
- 対応する外部列が複数ある場合は、エラーが返されます。
<matchBy> が存在する場合、ROWNUMBER は <matchBy> と <partitionBy> 内の列を使用して現在の行を識別しようとします。
<orderBy> と <partitionBy> 内で指定されている列によって <relation> のすべての行を一意に識別できない場合は、次のようになります。
- ROWNUMBER は、すべての行を一意に識別するために必要な追加列の最小数を見つけようとします。
- このような列が見つかった場合、ROWNUMBER は
- すべての行を一意に識別するために必要な追加列の最小数を見つけようとします。
- これらの新しい列を <orderBy> 句に自動的に追加します。
- この新しい orderBy 列のセットを使って各パーティションを並べ替えます。
- 実行時にこのような列を見つけられず、関数で同点が検出された場合は、エラーが返されます。
<reset> は視覚的な計算でのみ使用でき、<orderBy> や <partitionBy> と組み合わせて使用することはできません。 <reset> が存在する場合、<axis> は指定できますが、<relation> は指定できません。
例 1 - 計算列
次の DAX クエリを実行します。
EVALUATE
ADDCOLUMNS(
'DimGeography',
"UniqueRank",
ROWNUMBER(
'DimGeography',
ORDERBY(
'DimGeography'[StateProvinceName], desc,
'DimGeography'[City], asc),
PARTITIONBY(
'DimGeography'[EnglishCountryRegionName])))
ORDER BY [EnglishCountryRegionName] asc, [StateProvinceName] desc, [City] asc
同じ EnglishCountryRegionName を持つ各地域を、それらの StateProvinceName と City によって一意にランク付けするテーブルが返されます。
例 2 - 視覚的な計算
次のような視覚的な計算 DAX クエリの場合:
SalesRankWithinYear = ROWNUMBER(ORDERBY([SalesAmount], DESC), PARTITIONBY([CalendarYear]))
SalesRankAllHistory = ROWNUMBER(ORDERBY([SalesAmount], DESC))
各年内と履歴全体の両方で、各月の総売上高を一意にランク付けする 2 つの列を作成します。
以下のスクリーンショットは、視覚的なマトリックスと最初の視覚的な計算式を示しています。