本篇开始会一个三口之家的家庭财务数据库为例,讲述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(‘130101‘,‘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‘),‘0‘) || ‘月‘; v_date_str := v_month_str || ltrim(to_char(v_date,‘DD‘),‘0‘) || ‘日‘; 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中。