在维度(Dimension)的每个特性(Attribute)中,都有一个IsAggregatable的属性。默认是设置为True的。该属性指示分析服务,该特性是可以聚合的。如果该属性为True,那么当该特性在被查询的时候,如果没有指定某个具体的成员(Member),那么会怎么办呢?分析服务会用一个所谓的"All Member"的特殊成员来显示。这个成员就是包含了所有该特殊叶级成员的聚合值。如果说没有这个特殊的成员,那么会尝试用该特性下面的第一个成员显示。

举个例子来说,Customer维度的Gender特性有两个成员,Female和Male。假设我们查询的时候,特别指定了Famale或者Male,当然没有啥问题,可以正确的计算出来。但如果是说我们没有明确指定呢?我们一般会希望它显示所有性别的总和值。是不是这样呢?

下面几个图比较了该属性设置为True或者False时的一些差别

IsAggregatable属性的影响_属性设置

Gender的IsAggregatable设置为false的情况,Gender已经展开(相当于是指定了具体的Gender查询),这个情况没有什么问题

IsAggregatable属性的影响_属性设置_02

Gender的IsAggregatable设置为false的情况,这时候Gender并没有明确指定。那么因为该特性没有聚合值,分析服务怎么办呢?我们发现它把第一个成员(Female)的值拿过来了。这可能会造成误会,不是么?

 

IsAggregatable属性的影响_技术_03 

IsAggregatable属性的影响_技术_04

这是IsAggregatable设置为True的情况,很显然现在这样的结果才是我们需要的。

但是,到底什么时候会需要将该属性设置为False呢?

如果一个维度,具有两个或以上不做聚合的特性,那么可能会导致一些莫名其妙的情况

IsAggregatable属性的影响_技术_05

这个例子里面,我们把Education和Gender的IsAggregatable都设置为False,然后查询下来居然出现这样的情况。(很多单元都没有结果,但是再去展开的时候,又能看到)

IsAggregatable属性的影响_属性设置_06 

为什呢?你觉得呢?:)