内部成员属性 (MDX)
作为符合 1999 年 3 月发布的 OLE DB 规范 (2.6) OLAP 一节要求的访问接口,Microsoft SQL Server Analysis Services 支持本主题中列出的内部成员属性。
注意 |
---|
SQL Server Analysis Services 以外的访问接口可能支持其他内部成员属性。有关其他访问接口支持的内部成员属性的详细信息,请参阅这些访问接口附带的文档。 |
成员属性的类型
SQL Server Analysis Services 支持以下两种类型的内部成员属性:
上下文相关的成员属性
这些成员属性必须在特定维度或级别的上下文中使用,用于为指定维度或级别的每个成员提供值。非上下文相关的成员属性
这些成员属性不能在特定维度或级别的上下文中使用,用于为某条轴上的所有成员提供值。
不论内部成员属性是否是上下文相关的,都应遵循下列使用规则:
只能指定与投影在轴上的维度成员相关的那些内部成员属性。
可以在同一查询中同时包含对上下文相关成员属性和非上下文相关内部成员属性的请求。
使用 PROPERTIES 关键字查询属性。
以下各节介绍 SQL Server Analysis Services 中提供的各种上下文相关内部成员属性和非上下文相关内部成员属性,并介绍如何将 PROPERTIES 关键字与每种类型的属性一起使用。
上下文相关的成员属性
所有维度成员和级别成员都支持一列上下文相关的内部成员属性。下表列出了这些上下文相关的属性。
属性 |
说明 |
---|---|
ID |
在内部维护的成员 ID。 |
Key |
存储在 MEMBERS 架构行集的 MEMBER_KEY 列中的成员值。 |
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 行集。 |
属性 |
说明 |
---|---|
ACTION_TYPE |
用来指明对成员执行的操作类型的位掩码。此属性可以为下列值之一:
|
CAPTION |
与 MEMBER_CAPTION 相同。 |
CHILDREN_CARDINALITY |
成员具有的子级的个数。它可以是一个估计值,所以不应依赖它进行确切计数。访问接口应尽可能返回最精确的估计值。 |
CUBE_NAME |
此成员所属的多维数据集的名称。 |
CUSTOM_ROLLUP |
自定义成员表达式。 |
CUSTOM_ROLLUP_PROPERTIES |
自定义成员属性。 |
DESCRIPTION |
用户可以阅读的成员说明。 |
DIMENSION_UNIQUE_NAME |
此成员所属的维度的唯一名称。对于通过限定生成唯一名称的访问接口,此名称的各组成部分之间用分隔符分隔。 |
HIERARCHY_UNIQUE_NAME |
层次结构的唯一名称。如果成员属于多个层次结构,则成员所属的每个层次结构都有对应的一行。对于通过限定生成唯一名称的访问接口,此名称的各组成部分之间用分隔符分隔。 |
IS_DATAMEMBER |
用来指明成员是否为数据成员的布尔值。 |
KEYx |
成员键,其中 x 是成员键的序号,起始值为零。KEY0 适用于组合键和非组合键,而 KEY1、KEY2 等仅适用于组合键。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 |
成员的一元运算符。 |
非上下文相关属性的 PROPERTIES 语法
使用以下语法指定使用 PROPERTIES 关键字的非上下文相关的内部成员属性:
DIMENSION PROPERTIES Property
请注意,此语法不允许使用维度或级别来限定属性。因为非上下文相关的内部成员属性适用于某条轴上的所有成员,所以不能限定属性。
例如,指定 DESCRIPTION 内部成员属性的 MDX 语句具有以下语法:
DIMENSION PROPERTIES DESCRIPTION
此语句返回轴维度中各个成员的说明。如果试图使用维度或级别限定属性,如在 Dimension.DESCRIPTION 或 Level.DESCRIPTION 中,此语句将不会生效。
示例
下例将根据使用 Aggregate 函数求出并由用户选择的 State-Province 成员值,返回在上一时间段内销售额下降的分销商的计数。Hierarchize (MDX) 和 DrilldownLevel (MDX) 函数用于返回 Product 维度中产品类别的销售额下降值。使用 Properties (MDX) 函数返回列轴上返回的父成员的唯一名称。
WITH MEMBER Measures.[Declining Reseller Sales] AS
Count
(Filter
(Existing
(Reseller.Reseller.Reseller)
, [Measures].[Reseller Sales Amount] <
(
[Measures].[Reseller Sales Amount]
,[Date].Calendar.PrevMember
)
)
)
MEMBER [Geography].[State-Province].x AS
Aggregate
(
{[Geography].[State-Province].&[WA]&[US]
, [Geography].[State-Province].&[OR]&[US]
}
)
SELECT NON EMPTY HIERARCHIZE
(AddCalculatedMembers
(
{DrillDownLevel
({[Product].[All Products]})
}
)
) DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON COLUMNS
FROM [Adventure Works]
WHERE
(
[Geography].[State-Province].x
, [Date].[Calendar].[Calendar Quarter].&[2003]&[4]
,[Measures].[Declining Reseller Sales]
)
下面的示例为指定区域设置的 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]