次の方法で共有


Descendants (MDX)

メンバの子孫のうち、指定されたレベルまたは距離にある子孫のセットを返します。他のレベルの子孫を含めたり除外したりすることも可能です。

構文

Member expression syntax using a level expression
Descendants(Member_Expression [ , Level_Expression [ ,Desc_Flag ] ] )

Member expression syntax using a numeric expression
Descendants(Member_Expression [ , Distance [ ,Desc_Flag ] ] )

Set expression syntax using a level expression
Descendants(Set_Expression [ , Level_Expression [ ,Desc_Flag ] ] )

Member expression syntax using a numeric expression
Descendants(Set_Expression [ , Distance [ ,Desc_Flag ] ] )

引数

  • Member_Expression
    メンバを 1 つ返す有効な多次元式 (MDX) 式です。

  • Set_Expression
    セットを返す有効な多次元式 (MDX) 式です。

  • Level_Expression
    レベルを返す有効な多次元式 (MDX) 式です。

  • Distance
    指定されたメンバからの距離を指定する有効な数値式です。

  • Desc_Flag
    子孫のセットを区別するための説明フラグを指定する有効な文字列式です。

説明

レベルが指定されている場合、Descendants 関数は、指定されたセットのメンバ (複数も可) の子孫のうち、指定されたレベルにある子孫のセットを返します。返すセットの定義は、Desc_Flag で指定されているフラグによって調整されます。

Distance が指定されている場合、Descendants 関数は、指定されたメンバの子孫または指定されたセットのメンバの子孫のうち、指定されたメンバの階層内で指定されたレベル数だけ離れている子孫のセットを返します。返すセットの定義は、Desc_Flag で指定されているフラグによって調整されます。この関数は、不規則階層を対象とする場合に Distance 引数と共に使用されるのが一般的です。距離に 0 が指定された場合は、指定されたメンバのみで構成されるセットまたは指定されたセットを返します。

セット式が指定されている場合、Descendants 関数は、そのセットの個々のメンバごとに解決を行い、セットを再作成します。つまり、Descendants で使用する構文は、MDX の Generate 関数と機能的に等価です。

レベルも距離も指定されなかった場合、この関数が使用するレベルの既定値は、(メンバが指定されている場合は) 指定されたメンバに対して Level 関数 (<<Member>>.Level) を呼び出すか、(セットが指定されている場合は) 指定されたセットのメンバごとに Level 関数を呼び出すことによって決まります。レベル式、距離、フラグがいずれも指定されていない場合は、次の構文の動作になります。

Descendants

(

Member_Expression ,

Member_Expression.Level ,

SELF_BEFORE_AFTER

)

レベルが指定されており、説明フラグが指定されていない場合は、次の構文の動作になります。

Descendants

(

Member_Expression ,

Level_Expression,

SELF

)

説明フラグの値を変更することで、指定したレベルまたは距離にある子孫、指定したレベルまたは距離の前後の子 (リーフ ノードまで)、あるいは指定したレベルまたは距離に関係なくリーフ メンバすべてについて、含めるか除外するかを制御できます。次の表に、Desc_Flag 引数に指定できるフラグを示します。

フラグ

説明

SELF

指定されたレベルまたは指定された距離にある子孫メンバのみを返します。指定されたレベルが、指定されたメンバのレベルである場合は、指定されたメンバを含めます。

AFTER

指定されたレベルまたは距離のすべての下位レベルにある子孫メンバを返します。

BEFORE

指定されたメンバと指定されたレベルの間、または指定された距離のすべてのレベルにある子孫メンバを返します。指定されたメンバは含めますが、指定されたレベルまたは距離にあるメンバは含めません。

BEFORE_AND_AFTER

指定されたメンバのレベルのすべての下位レベルにある子孫メンバを返します。指定されたメンバは含めますが、指定されたレベルまたは指定された距離にあるメンバは含めません。

SELF_AND_AFTER

指定されたレベルまたは指定された距離にある子孫メンバと、指定されたレベルまたは指定された距離のすべての下位レベルにある子孫メンバを返します。

SELF_AND_BEFORE

指定されたレベルまたは指定された距離にある子孫メンバと、指定されたメンバと指定されたレベルの間または指定された距離にあるすべてのレベルの子孫メンバを返します (指定されたメンバを含みます)。

SELF_BEFORE_AFTER

指定されたメンバのレベルのすべての下位レベルにある子孫メンバを返します (指定メンバを含みます)。

LEAVES

指定されたメンバと指定されたレベルの間、または指定された距離にある、リーフ子孫メンバを返します。

次の例では、指定されたメンバ (United States)、および指定されたメンバ (United States) と指定されたレベル (City) の前のレベルのメンバ間にあるメンバを返しています。この例では、指定されたメンバ自体 (United States)、および State-Province レベル (City レベルの前のレベル) のメンバが返されます。この例には、この関数の他の引数を容易にテストできるように、コメント アウトした引数も含まれています。

SELECT Descendants
   ([Geography].[Geography].[Country].&[United States]
      //, [Geography].[Geography].[Country]
   , [Geography].[Geography].[City]
      //, [Geography].[Geography].Levels (3)
      //, SELF 
      //, AFTER
      , BEFORE
      // BEFORE_AND_AFTER
      //, SELF_AND_AFTER
      //, SELF_AND_BEFORE
      //,SELF_BEFORE_AFTER
      //,LEAVES 
   ) ON 0
FROM [Adventure Works] 

Adventure Works キューブから、2003 年度 (会計) の各月に関して、Measures.[Gross Profit Margin] メジャーの日次平均を計算する例を以下に示します。Descendants 関数は、[Date].[Fiscal] 階層の現在のメンバから判別される日のセットを返します。

WITH MEMBER Measures.[Avg Gross Profit Margin] AS Avg
   (
      Descendants( [Date].[Fiscal].CurrentMember, 
           [Date].[Fiscal].[Date]
          ), 
        Measures.[Gross Profit Margin]
   )
SELECT
   Measures.[Avg Gross Profit Margin] ON COLUMNS,
   [Date].[Fiscal].[Month].Members ON ROWS
FROM [Adventure Works]
WHERE ([Date].[Fiscal Year].&[2003])

次の例では、レベル式を使用して、Australia の State-Province ごとに Internet Sales Amount を返し、State-Province ごとに Australia の Internet Sales Amount の合計に対する割合を返しています。この例では、Item 関数を使用して、Ancestors 関数によって返されるセットから最初の (1 つしかない) 組を抽出します。

WITH MEMBER Measures.x AS 
   [Measures].[Internet Sales Amount] / 
   ( [Measures].[Internet Sales Amount],
      Ancestors 
         ( [Customer].[Customer Geography].CurrentMember, 
           [Customer].[Customer Geography].[Country]
         ).Item (0)
   ), FORMAT_STRING = '0%'
SELECT {[Measures].[Internet Sales Amount], Measures.x} ON 0,
{Descendants 
   ( [Customer].[Customer Geography].[Country].&[Australia], 
     [Customer].[Customer Geography].[State-Province], SELF 
   )  
} ON 1
FROM [Adventure Works]