本篇开始会一个三口之家的家庭财务数据库为例,讲述Essbase的功能和开发。为了说明EPM应用程序的管理和开发过程,会绕一些弯路,不使用EAS,而尽量用EPMA。

创建应用程序

首先登陆到Workspace,在左上角菜单中选择【导航】>【管理】>【应用程序库】。

应用程序库是EPMA的一部分,通过它可以管理EPM和Essbase应用程序。打开应用程序库后,在Workspace菜单中选【文件】>【新建】>【应用程序】,接着会出现应用程序创建向导。

在应用程序创建向导的第一步,选择应用程序类型为【Essbase (BSO)】,选中【Unicode】以支持中文,然后给应用程序和数据库命名。

创建一个名为“HomeFinancial”的应用程序,每年的家庭财务数据作为一个数据库,2013年的数据库命名为y2013。

第二步需要选择数据库中包含的维度类型,按下表创建4个维度,维度名称同时也是1代成员名称,在Essbase中,Time和Account是两个比较特殊的维度。Time维度可使用时间相关的函数和动态时间序列;Account可使用时间平衡和开支报告属性。每个数据库中仅能有一个Time和一个Account维度。

下一步是定义元数据,包括维度结构、计算方法、成员属性等。在部署后,EPMA中定义的元数据会成为Essbase的大纲。此步骤的界面分成三个部分,左面列出的是树型的维度结构,右面显示维度成员的属性,下面显示的是系统消息。

在树型维度结构部分,最顶级的节点代表数据库;其下一级是各维度的1代成员,同时也代表整个维度;1代成员下是维度的成员。选择树型结构中的节点,右方会显示相关属性,修改属性后别忘了点击上方的保存键。

在树型结构中,选择各维度的1代成员,如下表修改维度的Dimension Storage Type和Dimension Sort Order两个属性。Dimension Storage Type定义为存储类型是稀疏(Sparse)还是密集(Dense);Dimension Sort Order定义部署后维度在大纲中排序顺序。这两个属性会决定数据库的物理结构和计算顺序,后面会讨论到。

然后在树型结构中,右击维度成员显示菜单,菜单中可以进行删除、重命名、添加成员、排序等操作。

鼠标拖动某个成员可改变其在维度中的位置。

在维度模型结构中添加成员,创建如下图的维度结构。

G1. Account
G2. 支出
G3. 日用品
G3. 交通
G3. 电器
G3. 教育
G3. 饮食
G3. 公共事业费
G4. 电单价
G4. 电用量
G4. 水单价
G4. 水用量
G3. 医疗
G2. 收入
G3. 工资
G3. 其他收入
G2. 现金流
G3. 期初现金
G3. 净收入
G3. 调整
G3. 期末现金
G1. Home
G2. 张大明
G2. 王翠花
G2. 张小明
G1. Scenario
G2. 预算
G2. 实际
G2. 差异
G1. Year
G2. Q1
G3. 1月
G4. 1月1号
G4. 1月2号

在完成数据模型编辑后,点击【验证】,下方的消息框内会显示验证信息。若没有出现任何错误或警告信息,点击【完成】结束应用程序编辑。

然后在应用程序库中就可看到多出一个名为“HomeFinancial”的应用程序图标。

至此,已经介绍了EPMA应用程序库和维度库的使用。EPMA是从EPM 9.3版开始引入的模块,它包括应用程序库、维库、数据同步、库控制作业台等多个工具,以实现对EPM各产品应用程序进行集中式的管理。通过EPMA创建的应用程序称为EPMA应用程序,而使用传统方法创建的应用程序称为标准应用程序。EPMA中提供了将标准应用程序转换为EPMA应用程序的工具,在Workspace菜单中可找到,转换的过程是不可逆的。EPMA应用程序的部署过程中用的的工具如下图。

加载元数据

现在,我们已经通过EPMA的应用程序库创建了一个Essbase应用程序。不同于EAS Console直接在Essbase Server中创建标准应用程序,EPMA应用程序仅仅是保存在EPMA中的元数据而已,它还没有部署到Essbase Server中。下面会通过完善并部署此应用程序,来介绍EPMA的几个重要工具。

回顾上一节创建的HomeFinancial数据模型,Time维度并没有包含所有的日期项,一年365天都需要手工添加会是很大的工作量,我们需要通过关系型数据库中批量的导入维度成员。现实应用中从外部系统导入维度和数据是常有的情况,例如从会计系统导入会计科目。为此,EPMA提供了接口表,配合ETL工具可方便的将外部数据导入。

接口表是由EPMA在关系型数据库中自动创建的一组数据表,支持Oracle Database、Microsoft SQL Server、IBM DB2等主流数据库。首先,连接到安装EPM是用到的Oracle数据库,执行下面语句创建一个新帐户,用于存储接口表。

CREATE USER EPMA_INTFC IDENTIFIED BY password;
GRANT "RESOURCE" TO EPMA_INTFC;
GRANT "CONNECT" TO EPMA_INTFC;
GRANT UNLIMITED TABLESPACE TO EPMA_INTFC;

然后在Workspace菜单中选择【导航】>【管理】>【配置接口数据源】。打开接口数据源后,在菜单中选【文件】>【新建】>【接口数据源】,在接口数据源创建对话框中,输入接口表帐户连接信息。

在下一步中,给接口数据源命名,并选中【Create Tables】,点击【完成】。EPMA会在给定的数据库帐户中建立接口表。

连接到数据库,会发现EPMA_INTFC账户下创建了若干的数据表。仔细观察这些表的命名规则,以HS开头的表分为4类,这些数据表都是需要写入维度信息,然后导入到EPMA维库里;而以IM开头的数据表是系统表。数据表的用途如下表,具体表结构和每个字段的定义,参考EPMA文档。

表名 用途
HS_Dimension_Member 维度成员和成员属性
HS_Dimension_Hierarchy 维度父子层次结构
HS_Dimension_PropertyArray 维度成员属性
HS_Dimension_Property 维度属性
IM_Dimension 登记接口表,自建的接口表需在此表中登记
IM_Load_Info 通过Load ID可筛选导入的数据批次
IM_Dimension_Association 定义维度表间的关联关系
 
 
 
 
 
 
 
接口表中,并非每个表和每个字段都是必须,例如可用HS_Dimension_Hierarchy和HS_Dimension_PropertyArray取代HS_Dimension_Member定义维度成员和属性。而大部分使用默认值的属性,对应字段可为空值。所以,在HomeFinancial应用中,要导入Time维度成员,只需将成员写入到HS_TIME_HIERARCHY表中即可。

在数据库中执行以下SQL语句,将维度成员数据写入到接口表HS_TIME_HIERARCHY中。

declare
v_date date := to_date('','RRMMDD');
v_order number := 0;
v_month_str varchar(3 char);
v_date_str varchar(6 char);
begin
delete from EPMA_INTFC.HS_TIME_HIERARCHY; for indx in 1..4 loop
v_order := v_order + 1;
insert into EPMA_INTFC.HS_TIME_HIERARCHY(parent,child,isprimary,sortorder)
values('Year','Q' || to_char(indx),1,v_order);
end loop; for indx in 1..12 loop
v_order := v_order + 1;
insert into EPMA_INTFC.HS_TIME_HIERARCHY(parent,child,isprimary,sortorder)
values('Q' || to_char(ceil(indx / 3)),to_char(indx) || '月',1,v_order);
end loop; for indx in 1..365 loop
v_order := v_order + 1;
v_month_str := ltrim(to_char(v_date,'MM'),'') || '月';
v_date_str := v_month_str || ltrim(to_char(v_date,'DD'),'') || '日';
insert into EPMA_INTFC.HS_TIME_HIERARCHY(parent,child,isprimary,sortorder)
values(v_month_str, v_date_str, 1,v_order);
v_date := v_date + 1;
end loop;
commit;
end;

执行PL/SQL后,HS_TIME_HIERARCHY表里应该有如下数据。

接口表数据准备好后,打开EPMA维库。打开的方法有两种,一种是在应用程序库中双击应用程序图标;另一种方法是通过Workspace菜单【导航】>【管理】>【维库】,然后在菜单【文件】>【编辑应用程序】中选择应用程序。维库从左到右分成三栏,最左边是共享维度库,中间是应用程序维度结构,右边是所选成员的属性。

维库界面类似于在应用程序创建向导中维度编辑界面,唯一不同的是多出了共享维度库。共享维度顾名思义是可以由多个应用程序共享使用的,企业中一些常用维度,如组织架构、会计科目等会被多个应用程序使用,使用共享维首先避免了重复创建维度的工作量,其次避免应用程序间出现的数据不一致问题。这一概念与主数据管理系统相似,事实上Hyperion在2005年通过收购Razza获得了一套主数据管理系统Hyperion Data Relationship Management(简称DRM),现在已成为Oracle主数据管理解决方案的一部分。EPMA也支持从DRM导入维度。

与共享为对应的是本地维,本地维是只属于某个应用程序的维度。应用程序的本地维可以复制到共享维度库,也可以将共享维复制到应用程序。共享维度库是EPMA应用程序相对标准应用程序的主要优势之一。

在维库中,点击Workspace菜单【文件】>【导入】>【创建配置文件】,选择由本地接口库导入到HomeFinancial应用程序,并给配置文件命名。从导入类型选项可知,除了接口表外,还支持从平面文件和DRM导入。EPMA还提供了生成平面文件的桌面客户端工具File Generator,安装EPM后可以在开始菜单中找到。

在维度映射配置中,选择只导入Time维度,处理类型选择【合并为主要成员】,重新排列类型选择【合并至底层】,选上重新排列现有成员选择框。

将导入配置文件保存后,在菜单中选【文件】>【导入】>【导入维】,选中刚创建的导入配置文件。此处,若在IM_Load_Info接口表中定义了Load ID,可选择若干接口加载ID,以筛选导入的维度成员,不选择Load ID则导入接口表中所有的成员。

点击【导入】按键后,EPMA会创建作业在后台执行导入工作,界面上会显示对话框提示作业已提交。

对话框上给出了作业链接,点击可打开作业控制台显示作业执行状态。作业控制台是EPMA的工具之一,使用它可查看EPMA各种作业的历史记录。作业控制台可通过Workspace菜单【导航】>【管理】>【作业控制台】打开。

作业执行成功后,在维库中刷新应用程序结构,查看Time维度成员是否正确导入。顺便说一句,除了通过EPMA接口表,Oracle Data Integrator、Essbase Studio、Essbase SQL Interface都可以直接向Essbase加载数据。

部署应用程序

在部署HomeFinancial应用程序前,打开Essbase Administration Services Console(EAS Console),确认Essbase Sever是否开启对Unicode的支持。EAS Console可通过链接http://<epm_server>:9000/easconsole打开,或从下载的EPM客户端压缩包中安装。打开EAS Console首先显示登陆信息,输入EAS地址和账号后登陆。

登陆后在左侧的企业视图中,右击【Essbase服务器】,在菜单中选【添加Essbase服务器】。在对话框中,添加EAS本地Essbase Server加入。

在企业视图中,展开添加的Essbase Server节点,可以看到其中已有几个安装时自带的样例应用程序。每个应用程序下都含有一个或多个多维数据库,数据库下是大纲、规则文件、分区、报表脚本等。在EAS Console中可以进行应用程序管理、大纲编辑、维度和数据导入、计算脚本编写等操作,可以说EAS Console是功能最全、最经典的Essbase管理和开发工具。使用EPMA创建的数据库部署到Essbase Server后,也可以用EAS Console编辑。但EAS Console是直接修改Essbase Server中的数据库,所有的修改都不会同步到EPMA中,所以EAS Console适用于编辑标准应用程序,最好不要修改EPMA应用程序。

鼠标右键点击Essbase Server,菜单中选择【编辑】>【属性】,在安全性属性里,确保【创建Unicode模式的应用程序所需的权限】被选中,然后点击【应用】。

回到EPMA中,打开应用程序库。右击HomeFinancial应用程序图标,菜单中选【验证】,然后在作业控制台中查看验证作业执行状态。若验证无问题,右击应用程序选择【部署】。部署过程同样可通过作业控制台监控。

部署结束后,在EAS Console中可看到HomeFinancial已加入到Essbase Server中。

Oracle Essbase入门系列(二)的更多相关文章

  1. Oracle Essbase入门系列(四)

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

  2. Oracle Essbase入门系列(三)

    数据库计算 Essbase中单元格的数据可以是外部输入或计算而得,单元格因而分为输入单元格和计算单元格.计算单元格的计算方法可以通过大纲中维度成员的合并计算符和公式脚本定义,此称为大纲计算定义. 例1 ...

  3. Oracle Essbase入门系列(一)

    1. 开篇序 本文是几年前做Hyperion Planning项目时写的,后来陆陆续续有些补充.本来打算将整个EPM写一系列的教程,但HFM写到1/3就没动力了.不过至少Essbase这部分是完整的. ...

  4. Maven入门系列(二)--设置中央仓库的方法

    原文地址:http://www.codeweblog.com/maven入门系列-二-设置中央仓库的方法/ Maven仓库放在我的文档里好吗?当然不好,重装一次电脑,意味着一切jar都要重新下载和发布 ...

  5. mybatis入门系列二之输入与输出参数

    mybatis入门系列二之详解输入与输出参数   基础知识   mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...

  6. C语言高速入门系列(二)

    C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...

  7. 6. oracle学习入门系列之六 模式

    oracle学习入门系列之六 模式 上篇咱们学习记录了ORACLE数据库中的数据库结构.内存结构和进程等.篇幅 蛤蟆感觉偏多了.这次要休整下,每次笔记不宜太多,不然与书籍有何差别. 我们要保证的是每次 ...

  8. C# 互操作性入门系列(二):使用平台调用调用Win32 函数

    好文章搬用工模式启动ing ..... { 文章中已经包含了原文链接 就不再次粘贴了 言明 改文章是一个系列,但只收录了2篇,原因是 够用了 } --------------------------- ...

  9. [转]C# 互操作性入门系列(二):使用平台调用调用Win32 函数

    传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...

随机推荐

  1. 传值 属性 block 单例 协议

    界面传值 四种传值的方式 1.属性传值(从前往后) 步骤: 1.属性传值用于第一个界面向第二个界面传值 2.明确二者联系的桥梁,也就是触发跳转的地方 3.明确传输的值,类型是什么 4.在第二个视图控制 ...

  2. TreeView树形控件递归绑定数据库里的数据

    TreeView树形控件递归绑定数据库里的数据. 第一种:性能不好 第一步:数据库中查出来的表,字段名分别为UNAME(显示名称),DID(关联数据),UTYPE(类型) 第二步:前台代码 <% ...

  3. python基础语法(3)

    七.面向对象编程 python支持面向对象编程:类和对象是面向对象编程的两个主要方面,类创建一个新的类型,对象是这个类的实例. 对象可以使用普通的属于对象的变量存储数据,属于对象或类的变量被称为域:对 ...

  4. MyBatis框架——mybatis插入数据返回主键(mysql、oracle)

    向数据库中插入数据时,大多数情况都会使用自增列或者UUID做为主键.主键的值都是插入之前无法知道的,但很多情况下我们在插入数据后需要使用刚刚插入数据的主键,比如向两张关联表A.B中插入数据(A的主键是 ...

  5. 从0开始学Swift笔记整理(二)

    这是跟在上一篇博文后续内容: --函数中参数的传递引用 类是引用类型,其他的数据类型如整型.浮点型.布尔型.字符.字符串.元组.集合.枚举和结构体全部是值类型. 有的时候就是要将一个值类型参数以引用方 ...

  6. PhoneJS - HTML5 JavaScript 移动开发框架

    大伙儿都知道有很多基于HTML5的移动应用框架.下一代开发工具将帮助开发者远离那些难学和让人费劲的原生SDK语言,如Objective-C,Java等.大家都知道,HTML5代表着交叉平台如移动应用程 ...

  7. Chrome RenderText分析(2)

      接Chrome RenderText分析(1) 继续分析以下步骤   一.TextRun结构 struct TextRun { TextRun(); ~TextRun(); ui::Range r ...

  8. [游戏模版14] Win32 键盘控制

    >_<:compared with the previous article,this one only adds key-message listener. >_<:up d ...

  9. 投票系统开发总结struts2,jfreechart,cookie应用,以及前端技术

    struts2配置web.xml+struts.xml: <?xml version="1.0" encoding="UTF-8"?> <we ...

  10. 减小Chrome的内存占用的参数

    步骤: 1.右击chrome浏览器快捷方式 属性  目标 后面添加 --purge-memory-button 2. 按 shift+esc 查看进程