嵌套 select 和子多维数据集中的计算成员

适用于: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

计算成员是在运行时从表达式计算其值的维度成员,可用在嵌套 select 语句和子多维数据集中,以便更精确地定义查询的 cubespace。

启用子空间中的计算成员

中的 ConnectionStringSubQueries 连接字符串 属性或支持的 XMLA 属性中的 DBPROPMSMDSUBQUERIES 属性 (XMLA) 定义子选择或子多维数据集上计算成员或计算集的行为或允许。 在本文档的上下文中,如果没有特别指明,则嵌套 select 表示嵌套 select 和子多维数据集。

SubQueries 属性允许以下值。

说明
0 计算成员不允许在嵌套 select 或子多维数据集中使用。

如果引用计算成员,则在对嵌套 select 或子多维数据集进行计算时,将引发错误。
1 计算成员允许在嵌套 select 或子多维数据集中使用,但在返回子空间中不引入祖先成员。
2 计算成员允许在嵌套 select 或子多维数据集中使用,并且在返回子空间中引入祖先成员。 此外,在选择计算成员时允许使用混合粒度。

在 SubQueries 属性中使用值 1 或 2 允许计算成员用于筛选嵌套 select 的返回子空间。

将通过一个例子帮助阐明这个概念;首先,必须创建一个计算成员,然后发出一个嵌套 select 查询以便说明上述行为。

下面的示例创建一个计算成员,该计算成员将 [Seattle Metro] 作为城市添加到 Washington 州下的 [Geography].[Geography] 层次结构中。

为了运行该示例,连接字符串必须包含具有值 1 的 SubQueries 属性,并且所有 MDX 语句必须在同一会话中运行。

重要

如果正使用 Management Studio 来测试查询,请单击连接管理器上的“选项”按钮访问其他连接字符串属性窗格,你可以在其中输入 subqueries = 1 或 2,以允许子空间中的计算成员。

首先发出以下 MDX 表达式:

  
CREATE MEMBER [Adventure Works].[Geography].[Geography].[State-Province].&[WA]&[US].[Seattle Metro Agg]   
   AS  AGGREGATE(   
                 {   
                   [Geography].[Geography].[City].&[Bellevue]&[WA]  
                 , [Geography].[Geography].[City].&[Issaquah]&[WA]  
                 , [Geography].[Geography].[City].&[Redmond]&[WA]  
                 , [Geography].[Geography].[City].&[Seattle]&[WA]  
                 }  
                )    

然后发出以下 MDX 查询以便查看在嵌套 select 中允许的计算成员。

Select [Date].[Calendar Year].members on 0,  
       [Geography].[Geography].allmembers on 1  
from (Select {[Geography].[Geography].[State-Province].&[WA]&[US].[Seattle Metro Agg]} on 0 from [Adventure Works])  
Where [Measures].[Reseller Sales Amount]  

获得的结果如下:

All Periods CY 2011 CY 2012 CY 2013 CY 2014
Seattle Metro Agg $2,383,545.69 1$291,248.93 $763,557.02 $915,832.36 $412,907.37

如前所述,在 SubQueries=1 时,[Seattle Metro] 的祖先在返回的子空间中不存在,因此,[Geography].[Geography].allmembers 仅包含计算成员。

如果使用 SubQueries=2 运行该示例,则在连接字符串中,获得的结果如下:

All Periods CY 2001 CY 2002 CY 2003 CY 2004
All Geographies (null) (null) (null) (null) (null)
美国 (null) (null) (null) (null) (null)
Washington (null) (null) (null) (null) (null)
Seattle Metro Agg $2,383,545.69 $291,248.93 $763,557.02 $915,832.36 $412,907.37

如前所述,在使用 SubQueries=2 时,[Seattle Metro] 的祖先存在于返回的子空间中,但对于这些成员不存在任何值,因为没有要为聚合提供的常规成员。 因此,在此示例中,为计算成员的所有祖先成员提供 NULL 值。

为了理解上述行为,您需要了解的是:与常规成员不同,计算成员并不影响其父级的聚合;这意味着单独按计算成员进行筛选将导致空的祖先,因为没有常规成员影响最终生成的子空间的聚合值。 如果您将常规成员添加到筛选表达式,则聚合值将来自这些常规成员。 继续以上面的示例为例,如果 Oregon 州的 Portland 市以及 Washington 州的 Spokane 市添加到计算成员出现的同一轴中;如下一个 MDX 表达式所示:

Select [Date].[Calendar Year].members on 0,  
       [Geography].[Geography].allmembers on 1  
from (Select {  
               [Seattle Metro Agg]  
             , [Geography].[Geography].[City].&[Portland]&[OR]  
             , [Geography].[Geography].[City].&[Spokane]&[WA]  
             } on 0 from [Adventure Works]  
     )  
Where [Measures].[Reseller Sales Amount]  

将获得以下结果。

All Periods CY 2001 CY 2002 CY 2003 CY 2004
All Geographies $235,171.62 $419.46 $4,996.25 $131,788.82 $97,967.09
美国 $235,171.62 $419.46 $4,996.25 $131,788.82 $97,967.09
俄勒冈州 $30,968.25 $419.46 $4,996.25 $17,442.97 $8,109.56
Portland $30,968.25 $419.46 $4,996.25 $17,442.97 $8,109.56
97205 $30,968.25 $419.46 $4,996.25 $17,442.97 $8,109.56
Washington $204,203.37 (null) (null) $114,345.85 $89,857.52
Spokane $204,203.37 (null) (null) $114,345.85 $89,857.52
99202 $204,203.37 (null) (null) $114,345.85 $89,857.52
Seattle Metro Agg $2,383,545.69 $291,248.93 $763,557.02 $915,832.36 $412,907.37

在上面的结果中,[All Geographies]、[United States]、[Oregon] 和 [Washington] 的聚合值来自对 &[Portland]&[OR] 和 &[Spokane]&[WA] 的后代执行的聚合。 没有任何内容来自计算成员。

注解

在嵌套 select 或子多维数据集表达式中只允许全局或会话计算成员。 在对嵌套 select 或子多维数据集表达式执行计算时,如果在 MDX 表达式中具有查询计算成员,将引发错误。

另请参阅

ConnectionString
查询中的嵌套 select 语句
支持的 XMLA 属性 (XMLA)