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

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

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值