Calculate member【计算成员】的实现原理
1 计算成员的使用与普通的层次结构成员一样,但它是基于普通层次结构成员计算得来,不保存在cube中
2 计算成员也必须依附于某一层次结构,也就是依附于某根轴上,如果没有指定则落在默认的度量值轴上
3 声明计算成员
with
member [x] as1+2+3
select
[x] on 0
from
[Park]
此计算成员将1+2+3返回的结果
4 含有动态表达式的计算成员
with
member [sum] as
([Date].[YearNum].&[2015], [Measures].[In Count])+
([Date].[YearNum].&[2016], [Measures].[In Count])
select
[sum] on 0
from
[Park]
此计算成员返回两个tuple(元组)的cell的value的和,这两个元组是局部元组,自动补齐后可以定位cell,cell中的value相加就是返回的结果
5 计算成员的实现原理
计算成员如下:
with
member[Date].[Year Num].[2015+2016] as
([Date].[YearNum].&[2015])+([Date].[Year Num].&[2016])
select
{
[Measures].[In Count]
}on 0
,non empty{
[Date].[Year Num].allmembers
}on 1
from
[Park]
返回的结果包含了计算成员[Date].[YearNum].[2015+2016],也就是2015与2016年的和。这是如何实现的呢?
首先,通过allmembers访问到了计算成员[Date].[YearNum].[2015+2016],于是与select形成局部元组,如下:
(
[Date].[Year Num].[2015+2016],
[Measures].[In Count],
………
)
计算成员由于包含两个局部元组([Date].[Year Num].&[2015])与([Date].[Year Num].&[2016]),以上的局部元组将拆分为两个局部元组。
为了补充计算成员的这两个局部元组,SSAS不再像从前一样按规则补充。【有一点非常重要就是,这两个局部元组只会引用自己所没有的层次结构的其它成员】
因此,因为[Date].[YearNum]层次结构【轴】与[Measures]层次结构【轴】已经存在,那么这两个轴将不会再被补充,而自动补充其他缺省的轴,结果如下:
(
[Date].[Year Num].[2015],
[Measures].[In Count] ,
………
)
+
(
[Date].[Year Num].[2016],
[Measures].[In Count] ,
………
)
这样,根据不全的元组,ssas能够找到相应的点,也就是单元格,再将单元格的value相加就得到了计算成员的结果