内部成员属性 (MDX)
Analysis Services 可公开维度成员的内部属性,您可在查询中包含这些属性,以返回更多可用于自定义应用程序的数据或元数据,或者帮助进行模型调查或构造。 如果您在使用 SQL Server 客户端工具,则可以在 SQL Server Management Studio (SSMS) 中查看内部属性。
内部属性包括 ID、KEY、KEYx 和 NAME,这些属性可按每一个成员以任何级别公开。 您还可以返回位置信息,如 LEVEL_NUMBER 或 PARENT_UNIQUE_NAME 等。
根据您构造查询的方式以及您要用来执行查询的客户端应用程序,成员属性可能在结果集中显示,也可能不显示。 如果您正在使用 SQL Server Management Studio 来测试或运行查询,则可以双击结果集中的成员来打开“成员属性”对话框,其中显示了每个内部成员属性的值。
要获取有关使用和查看维度成员属性的介绍,请参阅在 SSMS 中的 MDX 查询窗口中查看 SSAS 成员属性。
注意 |
---|
作为符合 1999 年 3 月发布的 OLE DB 规范 (2.6)“OLAP”一节要求的访问接口,Microsoft SQL Server Analysis Services 支持本主题中列出的内部成员属性。 SQL Server Analysis Services 以外的访问接口可能支持其他内部成员属性。 有关其他访问接口支持的内部成员属性的详细信息,请参阅这些访问接口附带的文档。 |
成员属性的类型
SQL Server Analysis Services 支持以下两种类型的内部成员属性:
上下文相关的成员属性
这些成员属性必须在特定层次或级别的上下文中使用,用于为指定维度或级别的每个成员提供值。请注意以下示例是如何包含 KEY 属性的路径的:MEMBER [Measures].[Parent Member Key] AS [Product].[Product Categories].CurrentMember.Parent.PROPERTIES("KEY")。
非上下文相关的成员属性
这些成员属性不能在特定维度或级别的上下文中使用,用于为某条轴上的所有成员返回值。上下文不相关的属性是独立的,不包括路径信息。 请注意,以下示例中没有为 PARENT_UNIQUE_NAME 指定维度或级别:DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON COLUMNS
不论内部成员属性是否是上下文相关的,都应遵循下列使用规则:
只能指定与投影在轴上的维度成员相关的那些内部成员属性。
可以在同一查询中同时包含对上下文相关成员属性和非上下文相关内部成员属性的请求。
使用 PROPERTIES 关键字查询属性。
以下各节介绍 SQL Server Analysis Services 中提供的各种上下文相关内部成员属性和非上下文相关内部成员属性,并介绍如何将 PROPERTIES 关键字与每种类型的属性一起使用。
上下文相关的成员属性
所有维度成员和级别成员都支持一列上下文相关的内部成员属性。 下表列出了这些上下文相关的属性。
属性 |
说明 |
---|---|
ID |
在内部维护的成员 ID。 |
Key |
以原始数据类型表示的成员键的值。 MEMBER_KEY 用于向后兼容。 对于非组合键,MEMBER_KEY 具有与 KEY0 相同的值;对于组合键,MEMBER_KEY 属性为 null。 |
KEYx |
成员键,其中 x 是成员键的序号,起始值为零。 KEY0 可用于组合键和非组合键,但主要用于组合键。 对于组合键,KEY0、KEY1、KEY2 等共同构成组合键。 您可以在查询中单独使用每一个键以返回组合键的该部分。 例如,指定 KEY0 返回组合键第一部分,指定 KEY1 返回组合键的下一个部分,以此类推。 如果键是非组合键,则 KEY0 等同于 Key。 请注意,KEYx 可在上下文中使用,没有上下文时也可以使用。 因此,它在两个列表中都会显示。 有关如何使用此成员属性的示例,请参阅一个简单的 MDX 花絮:Key0、Key1、Key2。 |
Name |
成员的名称。 |
上下文相关属性的 PROPERTIES 语法
在特定维度或级别的上下文中使用这些成员属性,用于为指定维度或级别的每个成员提供值。
对于维度成员属性,在属性名称的前面加上属性适用的维度的名称。 下面的示例列出了正确的语法:
DIMENSION PROPERTIES Dimension.Property_name
对于级别成员属性,可以在属性名称的前面仅加上级别名称;或者,为了更加明确具体,也可以将维度名称和级别名称都加上。 下面的示例列出了正确的语法:
DIMENSION PROPERTIES [Dimension.]Level.Property_name
为了说明这一点,假设您希望返回 [Sales] 维度中引用的每个成员的所有名称。 若要返回这些名称,需要在多维表达式 (MDX) 查询中使用以下语句:
DIMENSION PROPERTIES [Sales].Name
非上下文相关的成员属性
所有成员都支持一列内部成员属性,这些属性不因上下文而改变。 这些属性提供了一些附加信息,可供应用程序用来改善用户的体验。
下表列出了 SQL Server Analysis Services 支持的非上下文相关的内部属性。
注意 |
---|
MEMBERS 架构行集中的列支持下表中列出的内部成员属性。 有关 MEMBERS 架构行集的详细信息,请参阅 MDSCHEMA_MEMBERS 行集。 |
属性 |
说明 |
---|---|
CATALOG_NAME |
此成员所属的多维数据集的名称。 |
CHILDREN_CARDINALITY |
成员具有的子级的个数。 它可以是一个估计值,所以不应依赖它进行确切计数。 访问接口应尽可能返回最精确的估计值。 |
CUSTOM_ROLLUP |
自定义成员表达式。 |
CUSTOM_ROLLUP_PROPERTIES |
自定义成员属性。 |
DESCRIPTION |
用户可以阅读的成员说明。 |
DIMENSION_UNIQUE_NAME |
此成员所属的维度的唯一名称。 对于通过限定生成唯一名称的访问接口,此名称的各组成部分之间用分隔符分隔。 |
HIERARCHY_UNIQUE_NAME |
层次结构的唯一名称。 如果成员属于多个层次结构,则成员所属的每个层次结构都有对应的一行。 对于通过限定生成唯一名称的访问接口,此名称的各组成部分之间用分隔符分隔。 |
IS_DATAMEMBER |
一个指示成员是否为数据成员的布尔值。 |
IS_PLACEHOLDERMEMBER |
一个指示成员是否为占位符的布尔值。 |
KEYx |
成员键,其中 x 是成员键的序号,起始值为零。 KEY0 可用于复合键和非复合键。 如果键是非组合键,则 KEY0 等同于 Key。 对于组合键,KEY0、KEY1、KEY2 等共同构成组合键。 您可以在查询中单独引用每一个键以返回组合键的该部分。 例如,指定 KEY0 返回组合键第一部分,指定 KEY1 返回组合键的下一个部分,以此类推。 请注意,KEYx 可在上下文中使用,没有上下文时也可以使用。 因此,它在两个列表中都会显示。 有关如何使用此成员属性的示例,请参阅一个简单的 MDX 花絮:Key0、Key1、Key2。 |
LCIDx |
使用区域设置 ID 十六进制值表示的成员标题的翻译,其中 x 是区域设置 ID 十进制值(例如,LCID1009 表示加拿大英语)。 这仅适用于翻译具有绑定到数据源的标题列的情况。 |
LEVEL_NUMBER |
成员距层次结构的根的距离。 根级别为零。 |
LEVEL_UNIQUE_NAME |
成员所属的级别的唯一名称。 对于通过限定生成唯一名称的访问接口,此名称的各组成部分之间用分隔符分隔。 |
MEMBER_CAPTION |
与成员相关的标签或标题。 标题主要用于显示目的。 如果不存在标题,查询将返回 MEMBER_NAME。 |
MEMBER_KEY |
以原始数据类型表示的成员键的值。 MEMBER_KEY 用于向后兼容。 对于非组合键,MEMBER_KEY 具有与 KEY0 相同的值;对于组合键,MEMBER_KEY 属性为 null。 |
MEMBER_NAME |
成员的名称。 |
MEMBER_TYPE |
成员的类型。 此属性可以为下列值之一:
MDMEMBER_TYPE_FORMULA 优先于 MDMEMBER_TYPE_MEASURE。 因此,如果 Measures 维度上有一个公式(计算)成员,则计算成员的 MEMBER_TYPE 属性为 MDMEMBER_TYPE_FORMULA。 |
MEMBER_UNIQUE_NAME |
成员的唯一名称。 对于通过限定生成唯一名称的访问接口,此名称的各组成部分之间用分隔符分隔。 |
MEMBER_VALUE |
以原始类型表示的成员的值。 |
PARENT_COUNT |
此成员具有的父级的个数。 |
PARENT_LEVEL |
成员的父级距层次结构的根级别的距离。 根级别为零。 |
PARENT_UNIQUE_NAME |
成员的父成员的唯一名称。 对于根级别上的任何成员,均返回 NULL。 对于通过限定生成唯一名称的访问接口,此名称的各组成部分之间用分隔符分隔。 |
SKIPPED_LEVELS |
跳过的成员级别数。 |
UNARY_OPERATOR |
成员的一元运算符。 |
UNIQUE_NAME |
成员的完全限定名称,格式为 [dimension].[level].[key6.] |
非上下文相关属性的 PROPERTIES 语法
使用以下语法指定使用 PROPERTIES 关键字的非上下文相关内部成员属性:
DIMENSION PROPERTIES Property
请注意,此语法不允许使用维度或级别来限定属性。 因为非上下文相关的内部成员属性适用于某条轴上的所有成员,所以不能限定属性。
例如,指定 DESCRIPTION 内部成员属性的 MDX 语句具有以下语法:
DIMENSION PROPERTIES DESCRIPTION
此语句返回轴维度中各个成员的说明。 如果试图使用维度或级别限定属性,就像在 Dimension.DESCRIPTION 或 Level.DESCRIPTION 中一样,则此语句不会生效。
示例
以下示例显示返回内部属性的 MDX 查询。
示例 1:在查询中使用上下文相关的内部属性
以下示例返回每个产品类别的父项 ID、键和名称。 请注意属性是作为度量值公开的。 这样您就能够在运行查询时在单元集中查看属性,而不是在 SSMS 的“成员属性”对话框中查看。 您可以像这样运行查询,以从已部署的多维数据集检索成员元数据。
WITH
MEMBER [Measures].[Parent Member ID] AS
[Product].[Product Categories].CurrentMember.Parent.PROPERTIES("ID")
MEMBER [Measures].[Parent Member Key] AS
[Product].[Product Categories].CurrentMember.Parent.PROPERTIES("KEY")
MEMBER [Measures].[Parent Member Name] AS
[Product].[Product Categories].CurrentMember.Parent.PROPERTIES("Name")
SELECT
{[Measures].[Parent Member ID], [Measures].[Parent Member Key], [Measures].[Parent Member Name] } on COLUMNS,
[Product].[Product Categories].AllMembers on ROWS
FROM [Adventure Works]
示例 2:非上下文相关的内部属性
以下示例是非上下文相关内部属性的完整列表。 在 SSMS 中运行查询后,单击各个成员,以在“成员属性”对话框中查看属性。
SELECT [Measures].[Sales Amount Quota] on COLUMNS,
[Employee].[Employees].members
DIMENSION PROPERTIES
CATALOG_NAME ,
CHILDREN_CARDINALITY ,
CUSTOM_ROLLUP ,
CUSTOM_ROLLUP_PROPERTIES ,
DESCRIPTION ,
DIMENSION_UNIQUE_NAME ,
HIERARCHY_UNIQUE_NAME ,
IS_DATAMEMBER ,
IS_PLACEHOLDERMEMBER ,
KEY0 ,
LCID ,
LEVEL_NUMBER ,
LEVEL_UNIQUE_NAME ,
MEMBER_CAPTION ,
MEMBER_KEY ,
MEMBER_NAME ,
MEMBER_TYPE ,
MEMBER_UNIQUE_NAME ,
MEMBER_VALUE ,
PARENT_COUNT ,
PARENT_LEVEL ,
PARENT_UNIQUE_NAME ,
SKIPPED_LEVELS ,
UNARY_OPERATOR ,
UNIQUE_NAME
ON ROWS
FROM [Adventure Works]
WHERE [Employee].[Employee Department].[Department].&[Sales]
示例 3:在结果集中以数据形式返回成员属性
下面的示例为指定区域设置的 Adventure Works 多维数据集中 Product 维度的产品类别成员返回翻译后的标题。
WITH
MEMBER Measures.CategoryCaption AS Product.Category.CurrentMember.MEMBER_CAPTION
MEMBER Measures.SpanishCategoryCaption AS Product.Category.CurrentMember.Properties("LCID3082")
MEMBER Measures.FrenchCategoryCaption AS Product.Category.CurrentMember.Properties("LCID1036")
SELECT
{ Measures.CategoryCaption, Measures.SpanishCategoryCaption, Measures.FrenchCategoryCaption } ON 0
,[Product].[Category].MEMBERS ON 1
FROM [Adventure Works]