DrilldownLevel (MDX)
セットのメンバーを、セットに示されている最下層の 1 レベル下にドリル ダウンします。
ドリル ダウンのレベルを指定することはオプションですが、レベルを設定する場合は、level expression または index level のどちらかを使用できます。 これらの引数を両方同時に指定することはできません。 最後に、計算されたメンバーがクエリに表示されると、引数を指定して、それらを行セットに含めることができます。
構文
DrilldownLevel(Set_Expression [,[Level_Expression] ,[Index]] [,INCLUDE_CALC_MEMBERS])
引数
Set_Expression
セットを返す有効な多次元式 (MDX) 式です。Level_Expression
(省略可)。 ドリル ダウン先のレベルを明示的に識別する MDX 式。 レベル式を指定した場合、以下のインデックス引数はスキップします。Index
(省略可)。 セット内のドリル ダウン先の階層番号を指定する有効な数値式です。 Level_Expression の代わりにインデックスのレベルを使用して、ドリル ダウン先のレベルを明示的に識別できます。Include_Calc_Members
(省略可)。 計算メンバー (ある場合) をドリル ダウン レベルに含めるかどうかを示すフラグ。
説明
DrilldownLevel 関数は、指定されているセット内のメンバーに基づいて、階層の順序で子メンバーのセットを返します。 指定したセットの元のメンバーの間の順序はそのまま保持されます。ただし、この関数の結果セットに組み込まれるすべての子メンバーは、それぞれの親メンバーの直下に組み込まれます。
複数レベル階層のデータ構造では、ドリル ダウン先のレベルを明示的に選択できます。 レベルを指定するには 2 つの方法があり、それらを同時に使用することはできません。 1 つ目の方法は、レベルを戻す MDX 式を使用して level_expression 引数を設定する方法です。2 つ目は、レベルを数値で指定する数値式を使用して index 引数を指定する方法です。
レベル式が指定された場合は、指定されたレベルにあるメンバーの子メンバーだけを取得し、階層の順序でセットを構築します。 レベル式が指定されていて、そのレベルにメンバーがない場合、レベル式は無視されます。
0 を基点とするインデックスで、インデックス値が指定された場合は、指定されたセット内で参照されている階層の最下位から次に低いレベルにあるメンバーの子メンバーだけを取得し、階層の順序でセットを構築します。
レベル式もインデックス値も指定されていない場合、指定されたセット内で参照されている最初のディメンションの最下位レベルにあるメンバーの子メンバーだけを取得し、階層内の順序でセットを構築します。
XMLA プロパティの MdpropMdxDrillFunctions にクエリを実行すると、サーバーがドリル関数に提供するサポート レベルを確認できます。詳細については、「サポートされる XMLA プロパティ (XMLA)」を参照してください。
使用例
Adventure Works キューブを使用して、SSMS の MDX クエリ ウィンドウで以下の例を実行してみます。
例 1 - 最小限の構文の例
1 つ目の例は、DrilldownLevel の最小限の構文を示しています。 必要な引数は、セット式のみです。 このクエリを実行すると、親 [All Categories] と、[Accessories]、[Bikes] などの 1 つ下のレベルのメンバーが返されることに注意してください。 この例は単純ですが、DrilldownLevel 関数の基本的な目的である、次のレベルまでドリル ダウンする様子を示しています。
SELECT DRILLDOWNLEVEL({[Product].[Product Categories]} * {[Sales Territory].[Sales Territory]}}) ON COLUMNS
FROM [Adventure Works]
例 2 - 明示的なインデックス レベルを使用した代替の構文
この例は、インデックス レベルを数値式で指定する、代替の構文を示しています。 この場合、 インデックス レベルは 0 です。 0 から始まるインデックスでは、これが最下位レベルです。
SELECT
DRILLDOWNLEVEL({[Product].[Product Categories]} * {[Sales Territory].[Sales Territory]},,0) ON COLUMNS
FROM [Adventure Works]
結果セットが前のクエリと同一であることに注目してください。 特定のレベルを始点としてドリル ダウンする場合を除いて、通常はインデックス レベルを設定する必要はありません。 インデックスの値を 1、そして 2 に設定して、前のクエリを再実行します。 インデックスの値を 1 に設定すると、ドリル ダウンは階層の 2 番目のレベルから開始します。 インデックスの値を 2 に設定すると、ドリル ダウンはこの例では最上位のレベルである 3 番目のレベルから開始します。 数値式が高いほど、インデックス レベルは高くなります。
例 3 - レベル式の例
次の例では、レベル式の使い方を示します。 階層構造を表すセットでは、レベル式を使用することでドリル ダウンを開始する階層のレベルを選択できます。
この例では、ドリル ダウンのレベルは、 DrilldownLevel 関数の 2 番目の引数として [City] から開始します。 このクエリを実行すると、ドリル ダウンは Washington 州と Oregon 州の [City] レベルから開始します。 DrilldownLevel 関数では、結果には 1 つ下のレベルである [Postal codes] のメンバーも含まれます。
SELECT [Measures].[Internet Sales Amount] ON COLUMNS,
NON EMPTY (
DRILLDOWNLEVEL(
{[Customer].[Customer Geography].[Country].[United States],
DESCENDANTS(
{ [Customer].[Customer Geography].[State-Province].[Washington],
[Customer].[Customer Geography].[State-Province].[Oregon]},
[Customer].[Customer Geography].[City]) } ,
[Customer].[Customer Geography].[City] ) ) ON ROWS
FROM [Adventure Works]
例 4 - 計算メンバーを含める
最後の例では、include_calculated_members フラグを追加するときに結果セットの下部に表示される、計算メンバーを示しています。 フラグは、4 つ目のパラメーターとして指定されていることにご注意ください。
この例は、計算メンバーが非計算メンバーと同じレベルにあるため、うまくいきます。 計算メンバー [West Coast] は、[United States] のメンバーと [United States] の 1 つ下のレベルの全メンバーで構成されます。
WITH MEMBER
[Customer].[Customer Geography].[Country].&[United States].[West Coast] AS
[Customer].[Customer Geography].[State-Province].&[OR]&[US] +
[Customer].[Customer Geography].[State-Province].&[WA]&[US] +
[Customer].[Customer Geography].[State-Province].&[CA]&[US]
SELECT [Measures].[Internet Order Count] ON 0,
DRILLDOWNLEVEL([Customer].[Customer Geography].[Country].&[United States],,,INCLUDE_CALC_MEMBERS) on 1
FROM [Adventure Works]
フラグのみを削除してクエリを再実行すると、上述の結果から計算されたメンバー [West Coast] を引いた結果が返されます。