SSAS MDX: [Dimension].[Attrubute].[Member]和 [Dimension].[Attrubute].&[Member]的区别

浏览: 2370

最近有人问我说,在MDX Query里面member的引用 “.” 和“.&”有什么区别, 因为他用到的一些维度用"."和".&"都能返回结果集,但是有些维度缺只能用".&"。在这里,和大家聊聊我所知道的东西,如果不全或者不对,请补充和指正:

 

在MDX query语法中,我们可以引用一个member name 或者 member key. ".&"语法是引用member key, 而"." 引用是的member name. 但是针对有些维度可以用"."和".&"都能返回结果集,有些不可以,请参考以下例子:

 

我拿SSAS Cube AdventureWorks数据库举个例子:

select [Measures].[Internet Sales Amount] on 0,

[Geography].[Country].&[Canada] on 1

from [Adventure Works]

GO

select [Measures].[Internet Sales Amount] on 0,

[Geography].[Country].[Canada] on 1

from [Adventure Works]

 

以上两个代码都能返回结果集,如图:

1.PNG

 

select [Measures].[Internet Sales Amount] on 0,

[Product].[Category].&[Bikes] on 1

from [Adventure Works]

GO

select [Measures].[Internet Sales Amount] on 0,

[Product].[Category].[Bikes] on 1

from [Adventure Works]

2.PNG

 

我们可以看到上图,只有第二段MDX Query返回了正确的结果集。这是为什么呢?

 

原因在于,我们在维度design的时候,你的member name和member key 设置的问题。Geography维度design的时候,member name和member key都是同样的设计,但是Product维度在design的时候,member key用的是ProductCategoryKey. 前面我们讲到,“.”的用法是引用维度的member name, ".&"的用法是引用维度的member key. 我们来看看以下结果:

 

[Geography]维度信息:

WITH

MEMBER [Measures].[Member ID] AS

 [Geography].[Country].CurrentMember.PROPERTIES("ID")

MEMBER [Measures].[Member Key] AS

 [Geography].[Country].CurrentMember.PROPERTIES("KEY")

MEMBER [Measures].[Member Name] AS

 [Geography].[Country].CurrentMember.PROPERTIES("Name")

SELECT

 {[Measures].[Member ID], [Measures].[Member Key], [Measures].[Member Name] } on COLUMNS,

 [Geography].[Country].allmembers on ROWS

FROM [Adventure Works]

3.PNG

 

[Product]维度信息:

WITH

MEMBER [Measures].[Member ID] AS

 [Product].[Product Categories].CurrentMember.PROPERTIES("ID")

MEMBER [Measures].[Member Key] AS

 [Product].[Product Categories].CurrentMember.PROPERTIES("KEY")

MEMBER [Measures].[Member Name] AS

 [Product].[Product Categories].CurrentMember.PROPERTIES("Name")

SELECT

 {[Measures].[Member ID], [Measures].[Member Key], [Measures].[Member Name] } on COLUMNS,

 [Product].[Category].allmembers on ROWS

FROM [Adventure Works]

4.PNG

 

从以上结果来看知晓:Geography维度的Member Key和Member Name信息是一致的,所以我们用"."和".&"都能返回正确的结果集。但是Product维度的信息Member Key和Member信息不一致,所以我们用“.”引用member name才能返回正确的结果集,如果需要用".&"返回正确的结果集,代码如下:

select [Measures].[Internet Sales Amount] on 0,

[Product].[Category].&[1] on 1

from [Adventure Works]

5.PNG

 

有关member key和member name相关信息,参考微软官方文档:

内部成员属性 (MDX): https://msdn.microsoft.com/zh-cn/library/ms145528.aspx

推荐 5
本文由 天善_小龙 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

3 个评论

我初学时也曾有过这样的困惑,推荐。

有个问题:PROPERTIES("ID") 这个就是按照Key排序的序号吗?
PROPERTIES("ID") 是SSAS 在内部维护的成员 ID。个人觉得不是按什么排序,这个就相当于你在建一张表有一个自增列ID,每次插入数据内部生成一个ID序列,也不能说是按什么排序吧。
好的,多谢,以前没太关注过。

一般关注Key, Name。

KeyColumns:The KeyColumns property specifies one or more source fields that uniquely identify each instance of the attribute.
NameColumn:The NameColumn property specifies the source field that will be displayed to end users. If you do not specify a value for the NameColumn property, it is automatically set to the value of the KeyColumns property.

要回复文章请先登录注册