Oracle Essbase入门系列(四)
成员存储类型
除了大纲计算,维度成员的另一项重要属性是存储类型,存储类型决定维度成员相关单元格的物理存储方式。在维库中编辑成员的【Data Storage】属性,下拉菜单中可选的5种,再加上Shared成员,一共6种存储类型。
Store:储存数据。当一个单元格所有成员的存储类型都是Store时,单元格的数据会物理存储。前面说明输入单元格和计算单元格时,似乎存在这样的印象——非0级和带有成员公式的单元格都是不可输入的,必须由子代成员合并或公式计算得到。其实不然,决定单元格是否“可输入”是由存储类型决定的。Store类型的单元格都可输入数据,只不过在执行了计算后被输入数据会被计算结果覆盖。
DynamicCalc:动态计算。相关单元格不存储数据,仅在查询时即时计算。动态计算的成员必须定义计算方法,非0级成员可以通过子代成员合并,0级成员必须有成员公式。使用动态计算的目的,一是可以减少存储空间,二是可以阻止在单元格上输入数据。但如果查询中包含有动态计算成员时,会延长查询响应时间。
DynamicCalcAndStore:动态查询和存储。当第一次查询或数据被标识为脏时,即时计算,计算结果会保存下来,后续查询中就可以使用存储的数据。相比起DynamicCalc,DynamicCalcAndStore平衡了查询性能和存储空间。
LabelOnly:仅标签。既不计算,也不存储数据。仅在层次中作为分组或分级的标签存在。查询LabelOnly成员时,通常显示第一个子成员的数据。
Shared:共享成员。共享成员是对同维度中同名成员的引用,其数据来自于被引用成员。如果在维度中多个地方使用同一成员,可以使用共享成员。例如,Account维度中收入和支出在净收入的成员公式中被引用,可以使用共享成员来实现同样的计算。如图设计大纲,净收入下的共享成员引用了同维度中的支出与收入,按照合并计算符,可以代替成员公式的计算方法。在维库中要加入共享成员,可右击某一成员,在右键菜单中选【插入共享成员】>【作为子代】或【作为同级】。
NeverShare:不共享数据。除了使用Shared类型来显示的定义共享成员外,Essbase中还有些成员是隐式共享。参考图3-48的维度结构,Home成员值实际上等于张大明成员值。Essbase能识别这种关系,并自动将张大明作为Home的共享成员,此称为隐式共享。为了避免隐式共享,可以将Home的存储类型置为NeverShare。
例:张大明家需要制定2013年的家庭预算,在Year维度上,只需做月度收支计划,无需细化到每一日;Home维度上,全家的预算分配到个人时,保留一部分机动资金。还需要定期核对预计收支目标和实际收支间的差异,实际支出应该小于目标支出,实际收入应该大于目标收入。如表是1月的预算与实际收支数据。
此例要求数据库可在Year、Home、Account维度的非0级成员上输入数据,所以首先确保表中相关维度成员的存储类型必须是Store。
由于机动资金,Home成员的支出是要大于子成员支出的总和。而且,要求在Year维度中,就算在日级成员中误输入了数据,也不会影响到月级成员的数据。所以在计算时,非0级成员的输入数据不能被子代成员的合并计算结果覆盖。为此将Scenario维度下预算的合并计算符设为“^”,则预算相关的所有单元格都不使用合并计算符计算。
但同时又希望在Time维度上将月度预算能汇总到季度,再汇总到全年。编辑数据库的默认计算脚本,如下:
接着来看表中差异项的定义,差异是实际和预算的差值,但支出和收入有不同的计算方向。对支出来说,实际小于预算为优,差异等于预算减实际;对收入来说,实际大于预算为优,差异等于实际减预算。这种计算方式可使用费用报告计算(Expense Reporting)功能,费用报告是除了时间平衡外,Account类型维度另一个特有的计算属性。通过将Account维度的成员标注为费用或非费用类型,可控制在@VAR和@VARPER函数中的计算方向。
在维库中将支出及其子成员的【Expense Reporting】属性设置为Expense;收入及其子成员为默认的NonExpense。修改差异的存储类型设为DynamicCalc,成员公式设为:
至此,HomeFinancial数据库已基本满足了例子中提出的需求。将这两节中的修改汇总,数据库模型最终的结构如下:
维度结构:
成员公式:
默认计算脚本:
在维库中检查HomeFinancial应用程序是否都如上修改,如无问题部署到Essbase Server。EPMA目前还无法编辑Essbase计算脚本,因此部署后再修改默认计算脚本。
Oracle Essbase入门系列(四)的更多相关文章
- Oracle Essbase入门系列(二)
本篇开始会一个三口之家的家庭财务数据库为例,讲述Essbase的功能和开发.为了说明EPM应用程序的管理和开发过程,会绕一些弯路,不使用EAS,而尽量用EPMA. 创建应用程序 首先登陆到Worksp ...
- Oracle Essbase入门系列(一)
1. 开篇序 本文是几年前做Hyperion Planning项目时写的,后来陆陆续续有些补充.本来打算将整个EPM写一系列的教程,但HFM写到1/3就没动力了.不过至少Essbase这部分是完整的. ...
- Oracle Essbase入门系列(三)
数据库计算 Essbase中单元格的数据可以是外部输入或计算而得,单元格因而分为输入单元格和计算单元格.计算单元格的计算方法可以通过大纲中维度成员的合并计算符和公式脚本定义,此称为大纲计算定义. 例1 ...
- C语言高速入门系列(四)
C语言高速入门系列(四) C语言数组 ---------转载请注明出处:coder-pig 贴心小提示:假设图看不清晰可右键另存为,应该就非常清晰了; 注意上面的代码都要自己过一遍哦! 本节引言: 经 ...
- 6. oracle学习入门系列之六 模式
oracle学习入门系列之六 模式 上篇咱们学习记录了ORACLE数据库中的数据库结构.内存结构和进程等.篇幅 蛤蟆感觉偏多了.这次要休整下,每次笔记不宜太多,不然与书籍有何差别. 我们要保证的是每次 ...
- [转]C# 互操作性入门系列(四):在C# 中调用COM组件
传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...
- [转]oracle学习入门系列之五内存结构、数据库结构、进程
原文地址:http://www.2cto.com/database/201505/399285.html 1 Oracle数据库结构 关于这个话题,网上一搜绝对一大把,更别提书籍上出现的了,还有很多大 ...
- spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护
在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...
- Go语言入门系列(四)之map的使用
本系列前面的文章: Go语言入门系列(一)之Go的安装和使用 Go语言入门系列(二)之基础语法总结 Go语言入门系列(三)之数组和切片 1. 声明 map是一种映射,可以将键(key)映射到值(val ...
随机推荐
- BZOJ 4247: 挂饰 题解
Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直 ...
- span width无效
在默认情况下label.span 设置width 是无效的.一般要display属性 display:block; 但是他会自动加一个换行,如果不想换行的话,可以用 display:inline-bl ...
- 使用PPT制作交叉密文图
曾几何时,一张图火遍大江南北,互相流传. 其中的奥秘早已破解出来,但是仍乐趣无穷. 来回顾这样一张图吧! 最近,在朋友圈中,这样的一种图又流行起来,被改成不同的版本. 可是这样一种图片到底是怎样做出来 ...
- Windows Phone的简单学习
这次我主要学习了Windows Phone的开发,以及一些简单代码及用处.我了解到了windowsphone的一些功能,下面是我了解到的一些信息. Image 设置好图片的长和宽.结合了Border效 ...
- C++混合编程之idlcpp教程Python篇(3)
上一篇 C++混合编程之idlcpp教程Python篇(2) 是一个 hello world 的例子,仅仅涉及了静态函数的调用.这一篇会有新的内容. 与PythonTutorial0相似,工程Pyth ...
- orcale 匿名代码块
declare cursor readflow_cur is select * from od_readflow t where t.flowid is null; l_emp od_readflow ...
- elixir 高可用系列(二) GenServer
概述 如果我们需要管理多个进程,那么,就需要一个专门的 server 来集中监控和控制这些进程的状态,启停等. OTP 平台中的 GenServer 就是对这个 server 通用部分的抽象. 利用 ...
- 用c#开发微信 (8) 微渠道 - 推广渠道管理系统 3 UI设计及后台处理
我们可以使用微信的“生成带参数二维码接口”和 “用户管理接口”,来实现生成能标识不同推广渠道的二维码,记录分配给不同推广渠道二维码被扫描的信息.这样就可以统计和分析不同推广渠道的推广效果. 前面二篇& ...
- 使用 New Relic 监控接口服务性能
偶然看到贴子在使用[Rails API] 使用这个APM监控,今天试了下.NET IIS环境下,配置一路NEXT即可. 主要指标 服务响应时间 Segment SQL执行时间 安全问题 1.走HTTP ...
- Linux 进程间通信(一)
Linux 进程间通信 进程是一个独立的资源分配单位,不同进程之间的资源是相互独立的,没有关联,不能在一个进程中直接访问另一个进程中的资源.但是,进程不是孤立的,不同的进程之间需要信息的交换以及状态的 ...