6.4、calculate member【计算成员】的实现原理

来源:互联网 发布:太原上知教育 编辑:程序博客网 时间:2024/05/16 12:34

Calculate member【计算成员】的实现原理

 

1          计算成员的使用与普通的层次结构成员一样,但它是基于普通层次结构成员计算得来,不保存在cube中

 

2          计算成员也必须依附于某一层次结构,也就是依附于某根轴上,如果没有指定则落在默认的度量值轴上

 

3          声明计算成员

withmember [x] as1+2+3 select         [x] on 0from         [Park]

此计算成员将1+2+3返回的结果

 

 

4          含有动态表达式的计算成员

withmember [sum] as         ([Date].[YearNum].&[2015], [Measures].[In Count])+         ([Date].[YearNum].&[2016], [Measures].[In Count]) select         [sum] on 0from         [Park]

         此计算成员返回两个tuple(元组)的cell的value的和,这两个元组是局部元组,自动补齐后可以定位cell,cell中的value相加就是返回的结果

 

5          计算成员的实现原理

计算成员如下:

withmember[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 1from         [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相加就得到了计算成员的结果

 

 

 

 

 

0 0