Hyperion essbase入门(四)计算

来源:互联网 发布:手机网络被运营商劫持 编辑:程序博客网 时间:2024/06/03 22:48

转自:http://hi.baidu.com/sheenshine/item/0343cfbdf7e7f6a1ebba93d6

MOLAP的设计强于关系数据库或者ROLAP的地方就是MOLAP的设计可以按照预先指定的方式把结果欲先汇集计算出来(或者提供了很容易的实时汇总的方法)从而提高了分析的时候所需要的快速的响应速度!

如果大家熟悉Oracle的物化视图,就能够很容易理解为什么这种方式能够提供快速计算的能力。因为所有维度都是按照层次关系组织起来的:
比如对于区域维度而言,很显然全国的销售额一定是各个省的销售额的总和,而各个省的销售额一定是下面各地市销售额的总和,这种天然的汇总关系为实现这种按层次的汇总提供可能性,因为我们通过MOLAP可以很容易计算出各个层次的累计数值,这样做查询的时候就能够很快地把所需要的数值拿出来(不管你要的是哪一级的汇总)

从这种角度来说,使用Oracle关系数据库来模拟多维数据库是可能的,只要你建立足够多的物化视图,在每一个层次都提供汇总计算,当然这个是理论上的,真正这么去实现在很多应用里根本就不现实,事实上,我一直在想,物化视图的技术是不是就是受MOLAP数据库的启发产生出来的呢?

理解Essbase计算

多维数据库里的数据有些是从源数据导入的,有些则是运算出来的,比如对于一个最小时间单位为天的分析销售量的立方体,每天的销售量都是从源系统导入到Essbase里的,但是对于每个月的销售量,则是由Essbase根据更加细粒度的数据计算出来的,所以立方体里的数据在这种区别下可以分为两大类数据,一类是从源系统导入的,另一类则是Essbase运算出来的,一般而言输入数据都是level 0数据(最低端的叶子)。

由Essbase根据导入的数据再计算生成我们所需要的别的数据的过程称之为calculation,Calculation也分为两种:
第一种方式是按照outline层次预先设定的方式进行叠加(Consolidation operator)。
第二种方式是使用自己写的计算公式进行计算(member formula)。

我们通过以下的例子来说明第一种的计算方式,在outline的设计的时候,一个必须指定的属性就是所谓的指定层次间的汇总关系(Consolidation operator),缺省的汇总关系总是相加,如下图:

hyperion3-3.jpg计算按照成员出现的次序进行,上图的设计含义是Qtr1成员的值是前三个月的总和(注意成员后面括号里的+号)即:

Qtr1=Jan+Feb+Mar

请注意+号不是唯一能够使用的符号,还可以有-(减),*(乘),/(除),%(百分比)等,比较特殊的是~(排除,意即该成员不参与到运算里),这种计算的设计里最重要的是同一层次的成员出现的顺序,因为同一层次的计算顺序是按照出现的顺序来进行,而不是按照通常的运算符号本来的优先次序。
这种基于consolidation操作符进行运算的关系也是推荐的运算方式,因为这种方式可以提供更好的性能,而且对于使用者而言更加直观和容易理解。

Outline里另一种计算是使用成员公式(member formula)来进行,有时候当成员并不是按所想要的次序出现的时候,就需要使用公式去表现成员的关系去计算一个所需要的值,使用这种自定义的计算公式能够描述更加复杂的计算关系,essbase提供了逻辑测试关系符(if else),各种统计和财务函数来方便计算。

维度计算的优先次序是先计算account维度的值,其次是时间维度的值,然后是计算其他稠密维度上的值,最后再计算稀疏维度上的值。而计算two pass的值则是在其他所有计算都完成之后。

原创粉丝点击