Oracle Essbase入门系列(四)

成员存储类型

除了大纲计算,维度成员的另外一项重要属性是存储类型,存储类型决定维度成员相关单元格的物理存储方式。在维库中编辑成员的【Data Storage】属性,下拉菜单中可选的5种,再加上Shared成员,一共6种存储类型。数据库

Store储存数据。当一个单元格全部成员的存储类型都是Store时,单元格的数据会物理存储。前面说明输入单元格和计算单元格时,彷佛存在这样的印象——非0级和带有成员公式的单元格都是不可输入的,必须由子代成员合并或公式计算获得。其实否则,决定单元格是否“可输入”是由存储类型决定的。Store类型的单元格均可输入数据,只不过在执行了计算后被输入数据会被计算结果覆盖。函数

DynamicCalc动态计算。相关单元格不存储数据,仅在查询时即时计算。动态计算的成员必须定义计算方法,非0级成员能够经过子代成员合并,0级成员必须有成员公式。使用动态计算的目的,一是能够减小存储空间,二是能够阻止在单元格上输入数据。但若是查询中包含有动态计算成员时,会延长查询响应时间。性能

DynamicCalcAndStore动态查询和存储。当第一次查询或数据被标识为脏时,即时计算,计算结果会保存下来,后续查询中就可使用存储的数据。相比起DynamicCalc,DynamicCalcAndStore平衡了查询性能和存储空间。设计

LabelOnly仅标签。既不计算,也不存储数据。仅在层次中做为分组或分级的标签存在。查询LabelOnly成员时,一般显示第一个子成员的数据。blog

Shared共享成员。共享成员是对同维度中同名成员的引用,其数据来自于被引用成员。若是在维度中多个地方使用同一成员,可使用共享成员。例如,Account维度中收入和支出在净收入的成员公式中被引用,可使用共享成员来实现一样的计算。如图设计大纲,净收入下的共享成员引用了同维度中的支出与收入,按照合并计算符,能够代替成员公式的计算方法。在维库中要加入共享成员,可右击某一成员,在右键菜单中选【插入共享成员】>【做为子代】或【做为同级】。ci

NeverShare不共享数据。除了使用Shared类型来显示的定义共享成员外,Essbase中还有些成员是隐式共享。参考图3-48的维度结构,Home成员值实际上等于张大明成员值。Essbase能识别这种关系,并自动将张大明做为Home的共享成员,此称为隐式共享。为了不隐式共享,能够将Home的存储类型置为NeverShare。部署

张大明家须要制定2013年的家庭预算,在Year维度上,只需作月度收支计划,无需细化到每一日;Home维度上,全家的预算分配到我的时,保留一部分机动资金。还须要按期核对预计收支目标和实际收支间的差别,实际支出应该小于目标支出,实际收入应该大于目标收入。如表是1月的预算与实际收支数据。io

此例要求数据库可在Year、Home、Account维度的非0级成员上输入数据,因此首先确保表中相关维度成员的存储类型必须是Store。class

因为机动资金,Home成员的支出是要大于子成员支出的总和。并且,要求在Year维度中,就算在日级成员中误输入了数据,也不会影响到月级成员的数据。因此在计算时,非0级成员的输入数据不能被子代成员的合并计算结果覆盖。为此将Scenario维度下预算的合并计算符设为“^”,则预算相关的全部单元格都不使用合并计算符计算。引用

但同时又但愿在Time维度上将月度预算能汇总到季度,再汇总到整年。编辑数据库的默认计算脚本,以下:

接着来看表中差别项的定义,差别是实际和预算的差值,但支出和收入有不一样的计算方向。对支出来讲,实际小于预算为优,差别等于预算减实际;对收入来讲,实际大于预算为优,差别等于实际减预算。这种计算方式可以使用费用报告计算(Expense Reporting)功能,费用报告是除了时间平衡外,Account类型维度另外一个特有的计算属性。经过将Account维度的成员标注为费用或非费用类型,可控制在@VAR和@VARPER函数中的计算方向。

在维库中将支出及其子成员的【Expense Reporting】属性设置为Expense;收入及其子成员为默认的NonExpense。修改差别的存储类型设为DynamicCalc,成员公式设为:

至此,HomeFinancial数据库已基本知足了例子中提出的需求。将这两节中的修改汇总,数据库模型最终的结构以下:

维度结构:

成员公式:

默认计算脚本:

在维库中检查HomeFinancial应用程序是否都如上修改,如无问题部署到Essbase Server。EPMA目前还没法编辑Essbase计算脚本,所以部署后再修改默认计算脚本。

相关文章
相关标签/搜索