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
    返回成员的有效多维表达式 (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 多维数据集中返回 Measures.[Gross Profit Margin] 度量值的日平均值,该值是根据 2003 财政年中每个月的所有日期计算出的。 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 及其占 Australia 总 Internet Sales Amount 的百分比。 此示例使用 Item 函数从 Ancestors 函数返回的集中提取第一个(也是唯一的)元组。

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]

请参阅

参考