Oracle Essbase入门系列(三)
数据库计算
Essbase中单元格的数据可以是外部输入或计算而得,单元格因而分为输入单元格和计算单元格。计算单元格的计算方法可以通过大纲中维度成员的合并计算符和公式脚本定义,此称为大纲计算定义。
例1:张大明家在上海市区和浦东各有一套房,1月5日时张大明收到市区房子的水费和电费账单,然后缴付;张大明的妻子王翠花同时也收到并缴付了浦东房子的账单。两地的水电单价和用量均不一样。
在HomeFinancial应用程序中,对应的单元格录入数据如下表的数据。表中,灰底的单元格是输入单元格,其中的数据是手工录入;而公共事业费,作为父级成员应由其子代成员作合并计算,所以对应表中黑底的单元格就是计算单元格。
Essbase中子代成员合并到父级成员的计算可以通过合并计算符设置。在维库编辑HomeFinancial应用程序。选中维度结构中任何非1代成员,都有一项【Consolidation】属性,这就是合并计算符。双击此属性进行编辑,如下图,在下拉列表中有7种合并计算符供选择,下表列出了这些计算符的含义。创建成员时,默认的合并计算符是加法“+”。
在例1中,公共事业费需要按如下公式进行合并:
公共事业费 = 电单价 × 电用量 + 水单价 × 水用量
那么是否将公共事业费子成员的合并计算符改成下图设置就够了呢?图中成员名称后是合并计算符。
此思路是对的,但做法在Essbase中行不通。原因是Essbase中同级成员并非按数学中先乘除后加减的顺序计算,而是单纯按照成员排序顺序计算。如果按图中那样,公共事业费的计算就变成了:
公共事业费 = (电单价 × 电用量 + 水单价) × 水用量
要纠正这个错误有两种方法。其一是在维度结构上做文章,按下图重新设计维度结构,得到正确的计算顺序如下:
第二种方法是使用成员公式。通过成员公式可以编写脚本定义计算,成员公式会覆盖子代成员的合并计算。而且Essbase提供了丰富的计算函数和完善的脚本语法,在成员公式中能实现各种复杂的计算。
在维度结构中选择公共事业费成员,修改它的【Member Formula(BSO)】属性,在公式编辑器中输入脚本:
= "水单价" * "水用量" + "电单价" * "电用量";
相关文章