CREATE MEMBER 语句 (MDX)

更新日期: 2006 年 12 月 12 日

创建计算成员。

语法

CREATE [ SESSION ] [HIDDDEN] [ CALCULATED ] MEMBER CURRENTCUBE | Cube_Name.Member_Name 
      AS MDX_Expression
      [,Property_Name = Property_Value, ...n]
......[,SCOPE_ISOLATION = CUBE]

参数

  • Member_Name
    提供成员名称的有效字符串表达式。指定完全限定名称以在 Measures 维度之外的维度中创建成员。如果不提供完全限定成员名称,将在 Measures 维度中创建成员。
  • MDX_Expression
    有效的多维表达式 (MDX)。
  • Property_Name
    提供计算成员属性名称的有效字符串。
  • Property_Value
    定义计算成员属性值的有效标量表达式。

备注

CREATE MEMBER 语句定义的计算成员在整个会话期间均可用,因此可在会话期间用于多个查询。有关详细信息,请参阅创建会话作用域的计算成员 (MDX)

还可以定义供一个查询使用的计算成员。若要定义只供一个查询使用的计算成员,请在 SELECT 语句中使用 WITH 子句。有关详细信息,请参阅创建查询作用域的计算成员 (MDX)

Property_Name 可引用标准计算成员属性或可选计算成员属性。标准成员属性在本主题后面列出。使用不带 SESSION 值的 CREATE MEMBER 语句创建的计算成员具有会话作用域。另外,计算成员定义中的字符串用双引号分隔。这不同于 OLE DB 定义的方法,后者指定字符串应由单引号分隔。

指定除当前连接的多维数据集以外的多维数据集将产生错误。因此,应使用 CURRENTCUBE 代替多维数据集名称,以此表示当前的多维数据集。

有关 OLE DB 定义的成员属性的详细信息,请参阅 OLE DB 文档。

标准属性

每个计算成员都有一个默认属性集。当客户端应用程序连接到 Microsoft SQL Server 2005 Analysis Services (SSAS) 时,根据管理员的选择,将支持或可以支持默认属性。

其他成员属性是否可用取决于多维数据集定义。下列属性表示与多维数据集中的维度级别有关的信息。

属性标识符 含义

SOLVE_ORDER

指定在一个计算成员引用另一个计算成员(即计算成员相交)的情况下,计算成员的求解次序。

FORMAT_STRING

指定显示单元值时客户端应用程序可以使用的 Microsoft Office 样式格式的字符串。

VISIBLE

确定计算成员在架构行集中是否可见。可见的计算成员可以通过 AddCalculatedMembers 函数添加到集中。非零值表示计算成员可见。此属性的默认值为 Visible

不可见(此值设置为零时)的计算成员通常用作更复杂的计算成员中的中间步骤。这些计算成员也可以由其他类型的成员(如度量值)引用。

NON_EMPTY_BEHAVIOR

指定解析空单元时用来确定计算成员的行为的度量值或集。

作用域

计算成员可出现在下表列出的一个作用域中。

  • 查询作用域
    计算成员的可见性和生存期限制在查询中。计算成员在单独的查询中定义。查询作用域将覆盖会话作用域。有关详细信息,请参阅创建查询作用域的计算成员 (MDX)
  • 会话作用域
    计算成员的可见性和生存期限制在创建计算成员时所在的会话中。(如果对计算成员发出 DROP MEMBER 语句,则生存期小于会话持续时间。)CREATE MEMBER 语句可创建会话作用域的计算成员。

作用域隔离

在 SQL Server 2005 Analysis Services 中,当多维数据集多维表达式 (MDX) 脚本包含计算成员时,默认情况下会在解析任何会话作用域的计算和解析任何查询定义的计算之前对计算成员进行解析。这不同于 SQL Server 2000 Analysis Services 的行为(求解次序可以明确地用于在两个多维数据集级别的计算间插入会话作用域的计算或查询定义的计算。)这种行为差异可能导致在 SQL Server 2005 Analysis Services 中查询作用域或会话作用域的计算成员无法返回所需结果。

ms144787.note(zh-cn,SQL.90).gif注意:
在某些情况下,Aggregate (MDX) 函数和 VisualTotals (MDX) 函数不会表现出这种行为。

SQL Server 2005 Analysis Services 中的这种行为允许通用客户端应用程序处理包含复杂计算的多维数据集,而不必考虑这些计算的特定实现。然而,在某些情况下,最好在多维数据集中的某些计算之前执行会话作用域或查询作用域的计算成员,并且 Aggregate 函数和 VisualTotals 函数均不适用。SQL Server 2000 Analysis Services 通过对多维数据集以及会话或查询作用域的计算成员慎重设置 SOLVE_ORDER 属性来实现该行为。若要在 SQL Server 2005 Analysis Services 中实现相同的行为,请使用 SCOPE_ISOLATION 计算属性。

ms144787.note(zh-cn,SQL.90).gif注意:
SCOPE_ISOLATION 计算属性是 SQL Server 2005 Analysis Services Service Pack 2 (SP2) 中的新增属性。

示例

在下面脚本示例所示的情况下,需要 SCOPE_ISOLATION 计算属性来生成正确的结果。

多维数据集的 MDX 脚本:

CREATE MEMBER CURRENTCUBE.Measures.ProfitRatio AS 'Measures.[Store Sales]/Measures.[Store Cost]', SOLVE_ORDER = 10

MDX 查询:

WITH MEMBER [Customer].[Customers].[USA]. USAWithoutWA AS
[Customer].[Customers].[Country].&[USA] - [Customer].[Customers].[State Province.&[WA], SOLVE_ORDER=5
SELECT {USAWithoutWA} ON 0 FROM SALES
WHERE ProfitRatio

上一个查询的所需结果为 USA(不包括 WA)销售额与 USA(不包括 WA)商店成本的比率。尽管上一个查询在 SQL Server 2000 Analysis Services 中会返回所需结果,但它不会在 SQL Server 2005 Analysis Services 中返回所需结果。在 SQL Server 2005 Analysis Services 中,它将返回 USA 比率减去 WA 比率,而这是毫无意义的结果。若要获得所需的结果,可以使用 SCOPE_ISOLATION 计算属性。

使用 SCOPE_ISOLATION 计算属性的 MDX 查询:

WITH MEMBER [Customer].[Customers].[USA]. USAWithoutWA AS
[Customer].[Customers].[Country].&[USA] - [Customer].[Customers].[State Province.&[WA], SOLVE_ORDER=5
,SCOPE_ISOLATION=CUBE
SELECT {USAWithoutWA} ON 0 FROM SALES
WHERE ProfitRatio

请参阅

其他资源

MDX 数据定义语句 (MDX)

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 7 月 17 日

更改的内容:
  • 更新了内容以反映 SQL Server 2005 Analysis Services 的功能和操作。

2006 年 12 月 12 日

更改的内容:
  • 更新了内容以反映 Service Pack 2 新增的作用域隔离属性。