将一组成员向下钻到该集合代表的最低层级的下一级。
指定要深入的层级是可选的,但如果你设置了层级,可以使用 层级表达式 或 索引层级。 这些论点是相互排斥的。 最后,如果查询中存在计算成员,你可以指定参数将它们包含在行集中。
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]。