MDX children与members的误区

在ssas中利用mdx进行查询时,children、members到底是不是一样的呢?
可能有时你会看到它们查询出来的结果是一致的,或者是members查询出来的结果只比children查询的结

果多一个all成员。它们到底是不是一样的呢?
答案肯定是:不一样的。


那么为什么会产生上面的情况呢?
我们得来看一下这两者的语法描述,语法上可以大致总结如下:
children作用于member上。
members作用于hierarchy、level上。

 

那为什么children也可以作用在hierarchy上进行查询呢?
例如:
select [Measures].[Money] on 0,
[Zone 1].[层次结构].children on 1
from [Sales 2]

 

首先,在这里要说一下ssas中的元模型结构,在查询元模型中,ssas的hierarchy有一种叫做AttributeHierarchy(属性层次结构),一般情况下,维度的每一个维度属性都将创建一个这样的属性层次结构,当然也可以设置它不创建(修改AttributeHierarchyEnable为false),如果创建了这样的层级结构,那么在这个层次结构中就会有两个level,一个是和维度属性同名的level(一般就是我们查询的level),另一个是“(ALL)” level.(All)level是另一个level的父级,在“(ALL)” level中只有一个成员,那就是我们经常看到的[All]。
在知道了这些以后,还得知道的一个重要的信息就是对于每一个hierarchy都有一个默认的Member,而一般情况下,属性层次结构的默认成员就是“(All)” level下的[All]成员。而AS在查询数据时有这样一个特点:在一个层次结构上没有指定任何成员或者是取成员的操作时,AS将查询该hierarchy的默认成员。也就是说,如果上述例子中的[层次结构]的默认成员是[All],那么如下的三个查询查询到的结果集是一样的。

1:
 select [Measures].[Money] on 0,
[Zone 1].[层次结构] on 1
from [Sales 2]

2:
select [Measures].[Money] on 0,
[Zone 1].[层次结构].&[All] on 1
from [Sales 2]

3:
select [Measures].[Money] on 0,
[Zone 1].[层次结构].defaultMember on 1
from [Sales 2]


在了解了这些以后我们就不难明白了其实在hierarchy上进行children操作,其实是对该hierarchy的defalutMember进行children操作。所以这样查出来的结果就和利用与维度属性同名的level上取members的结果相同,而如果对hierarchy进行members操作取得的结果就会包含[All]member。所以就会多出一个All。

 

注:hierarchy的默认成员是可以修改的,可以通过修改默认成员来验证对hierarchy的查询。

 

 

作者:slob

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值