钻入层级(MDX)

将一组成员向下钻到该集合代表的最低层级的下一级。

指定要深入的层级是可选的,但如果你设置了层级,可以使用 层级表达式索引层级。 这些论点是相互排斥的。 最后,如果查询中存在计算成员,你可以指定参数将它们包含在行集中。

Syntax

DrilldownLevel(Set_Expression [,[Level_Expression] ,[Index]] [,INCLUDE_CALC_MEMBERS])  

Arguments

Set_Expression
一个有效的多维表达式(MDX)表达式,返回集合。

Level_Expression
(可选) 。 一个明确指出要深入的MDX表达式。 如果你指定了一个级别表达式,可以跳过下面的索引参数。

索引
(可选) 。 一个有效的数值表达式,指定在集合内要钻探的层级数。 你可以用指数层级代替Level_Expression来明确识别需要深入的层级。

Include_Calc_Members
(可选) 。 一个旗标,指示是否在钻探层面包含计算过的成员(如果存在)。

Remarks

DrilldownLevel 函数基于指定集合中包含的成员,按层级顺序返回一组子成员。 在指定集合中,原始成员之间的顺序保持不变,但函数结果集中包含的所有子成员都直接包含在其父成员之下。

给定一个多层级的层级数据结构,你可以明确选择一个层级进行深入挖掘。 有两种互斥的方式来指定电平。 第一种方法是使用返回水平的MDX表达式设置 level_expression 参数。另一种方法是用数字表示式来指定 索引 参数。

如果指定了一个级别表达式,函数通过只获取处于指定级别成员的子节点,按层次顺序构造集合。 如果指定了一个级别表达式,但该级别没有成员,则忽略该级别表达式。

如果指定了索引值,函数通过只检索该集合中层级中下一个最低层的成员的子节点,按层级顺序构造集合,给定基于零的索引。

如果既不指定层级表达式也未指定索引值,函数通过只检索指定集合中第一维度最低层成员的子节点,按层次顺序构造集合。

查询 XMLA 属性 MdpropMdxDrillFunctions 可以验证服务器对钻探函数的支持水平;详情请参见支持的XMLA属性(XMLA)。

示例

你可以在SSMS的MDX查询窗口中,使用Adventure Works的立方体尝试以下示例。

示例1 - 展示最小语法

第一个示例展示了 DrilldownLevel 的最小语法。 唯一需要的参数是一个集合表达式。 注意,当你运行这个查询时,你会得到父类别[所有类别]和下一层的成员:[配件]、[自行车]等。 虽然这个例子很简单,但它展示了 DrilldownLevel 函数的基本目的,即向下钻到下一层。

SELECT DRILLDOWNLEVEL({[Product].[Product Categories]} * {[Sales Territory].[Sales Territory]}}) ON COLUMNS  
FROM [Adventure Works]  

示例2 - 使用显式索引层级的替代语法

本示例展示了另一种语法,其中索引层通过数字表达式指定。 在这种情况下,指数电平为0。 对于基于零的指数,这是最低水平。

SELECT  
DRILLDOWNLEVEL({[Product].[Product Categories]} * {[Sales Territory].[Sales Territory]},,0) ON COLUMNS  
FROM [Adventure Works]  

注意结果集与前一查询相同。 一般来说,除非你想让钻孔从某个特定水平开始,否则设置索引水平其实没必要。 重新运行之前的查询,将索引值设为1,然后再设为2。 当索引值设为1时,你会看到深入钻孔从层级的第二层开始。 当索引值设为2时,钻探从第三层开始,即本例中的最高层级。 数值表达式越高,指数水平越高。

示例3 - 演示一个水平表达式

下一个例子展示了如何使用水平表达式。 给定一组代表层级结构的集合,使用层级表达式可以让你在层级中选择一个层级开始深入钻探。

在这个例子中,钻探层级从[City]开始,作为 DrilldownLevel 函数的第二个参数。 运行此查询时,钻探从[城市]层面开始,针对华盛顿州和俄勒冈州。 根据 DrilldownLevel 函数,结果集还包括下一层的成员 [邮政编码]。

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 标志后它会出现在结果集底部。 注意旗标被指定为第四个参数。

这个例子之所以成立,是因为计算出来的成员与未计算的成员处于同一级别。 计算成员[西海岸]由[美国]的成员组成,加上所有低于[美国]一级的成员。

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]。