这篇文章提供了一个Hello World式的例子,讲述如何创建一个最简单的BIEE资料库。本文使用的示例数据可以在从此链接下载:http://www.zw1840.com 。
BIEE的资料库(Repository)是一个后缀名为rpd的物理文件,其中存储了三类元数据:数据源物理模型,逻辑模型,以及展现模型。Oracle BI Server是资料库的使用者:在前端,BI Server通过ODBC将资料库中的逻辑模型及展现模型提供给Oracle BI Presentation Server;在后端,BI Server通过各种适配器访问与资料库中物理模型对应的数据源[1]。资料库rpd文件存储在 $OBIEE_HOME\server\Repository 目录里。
首先,我使用BIEE Administration Tool创建一个名为zw1840的新资料库。
点“保存”按钮后,可以看到Administration Tool打开了一个空资料库。资料库的编辑窗口分为三栏,从右至左依次为:
Physical:定义数据源的类型和连接方式,还有数据源物理表结构,字段数据类型,物理表的主外键之类的信息。[2]
Business Model and Mapping:定义逻辑模型,以及逻辑模型与物理模型间的映射关系。[3]
Presentation:定义展现模型。展现模型中的一个Catalog对应Oracle Answer中的一个Subject Area。[4]
物理模型可以手工创建,但是最简单的方法是从源数据库中直接导入。通过菜单 File\Import\from Database 开始导入。
在“Select Data Source”对话框中设置导入元数据时使用的数据源连接信息。
在“Import”对话框里可以选择需要导入的数据库对象,此对话框可以根据对象类型筛选树形列出的数据库对象。我的习惯是为所有数据库表建立视图,使用视图的好处是:如果数据库发生了变化只需要修改视图定义,BIEE中的修改工作可以减少很多。因此在“Import”对话框我只选择导入视图对象。在这个例子中,我首先导入消费记录事实表(V_FINANCE_EXPENSE)和家庭成员维表(V_COMMON_MEMBER)。
在第一次导入物理模型时,还需要设定BI Server进行数据查询时使用的连接信息
注意上面设置了两次连接信息,一次在“Select Data Source”对话框,此处的连接信息是供Administration Tool导入元数据用的;另一次在“Connection Pool”对话框,此处的连接信息是供BI Server进行数据查询时使用的。如果你的Administration Tool和BI Server装在不同的机器上则需要在两台机器上分别配置Oracle 的TNS。
现在,在“Physical”窗口可以看到刚才导入的物理模型了。
在Database节点(TNS_VZW1840_ORADB10G)上使用右键菜单“Physical Diagram\Object(s) and All Joins”可以查看数据源的物理模型图。
接下来要定义各物理表的主键。双击V_COMMON_MEMBER表,在“Physical Table”对话框的“Keys”页上点“New”按钮,选择MEMBER_ID字段作为主键。使用同样的方法将V_FINANCE_EXPENSE表的CONSUME_ID字段定义为主键。
最后定义物理表之间的外键。双击V_FINANCE_EXPENSE表,在“Physical Table”窗口的“Foreign Keys”页上点“New”按钮,设定V_COMMON_MEMBER表的MEMBER_ID字段为V_FINANCE_EXPENSE表MEMBER_ID字段的外键。
再次查看物理模型图你会发现两个表之间建立了1..N的引用关系。
将整个Physical Schema“ZW1840”拖到“Business Model and Mapping”窗口。
Administrator Tool提供了一个偷懒的工具,可以自动地修改逻辑表和逻辑字段的名称,完成去掉下划线、首字母大写之类的工作,不过这个功能对于国内项目意义不大。感兴趣的话可以试试“Tools\Utilities”中的“Rename Wizard”。我用这个工具修改了逻辑模型、逻辑表及字段的名称。
Administrator Tool 将按照物理模型的结构原样创建逻辑模型,自动将物理表的主键作为逻辑表的主键,同时创建逻辑表中的逻辑连接(Logical Join)。Server Administration Guide 文档建议在逻辑模型中不要建立逻辑外键(Logical Foreign Key),而应使用逻辑连接[5]。
在Business Model节点(Finance)上使用右键菜单“Business Model Diagram\Whole Model”可以查看逻辑模型图。
注意Administrator Tool自动创建的逻辑连接,双击可以打开“Logical Join”对话框查看逻辑连接的详细情况。
我感觉Administrator Tool自动创建的逻辑连接(Relationship_2004:3161206517091)中,连接方式“Inner”还有“Member Dim”表的Cardinality“0,1”不正确,修改为“Left Outer”和“1”。
Server Administration Guide 文档建议逻辑模型中不要设置Driving选项[6]。
对于逻辑事实表的度量字段,需要设定其默认的聚合方法。“Expense Fact”表的“Amount”字段为度量值,双击此字段,在“Logical Column”对话框的“Aggregation”页将其默认聚合方法设置为“SUM”。[7]
再看逻辑模型,“Amount”字段的图标发生了变化。
为了实现钻取功能,需要在逻辑模型内创建维度。BIEE中的维度(Dimension)与Oracle数据库中的DIMENSION对象概念类似,其中包含层级(Level)以及由各层级构成的层次结构(Hierarchy)。维度所包含的逻辑列必须来自同一个逻辑表[8]。
我对示例数据的分析需求是:要按家庭成员维度汇总消费金额,还要从家庭成员下钻到消费明细描述。由于消费明细描述位于消费事实表(V_FINANCE_EXPENSE)中,因此我需要改造逻辑表Member Dim,在其中添加消费明细字段。
将物理模型V_FINANCE_EXPENSE表的CONSUME_ID和DESCR列拖到逻辑模型的Member Dim表下。
此时逻辑表Member Dim有两个逻辑表来源(Logical Table Source),Member Id 和Member Name来自V_FINANCE_EXPENSE,Consume Id 和Descr 来自 V_COMMON_MEMBER。双击逻辑表来源可以打开“Logical Table Source”对话框,在“Column Mapping”页可以查看逻辑列与物理表的映射关系。
从物理模型向逻辑模型拖放字段时,逻辑表来源是根据物理字段所在的物理表自动地建立的。按我的理解,Member Id/Member Name以及Consume Id/Descr来自同一物理数据源的两张物理表,可以使用同一个逻辑表来源。我需要在逻辑表来源中设定物理表间的关联关系,并重新映射逻辑字段。
删除逻辑表来源V_FINANCE_EXPENS,双击V_COMMON_MEMBER开始编辑Member Dim的逻辑表来源。
首先设定Member Dim内逻辑字段所需的物理表,以及表间的关联关系。(我不确定是否一定要这样做,物理表间的关联在物理模型中已经设置了,为什么这里还要做一遍?)
之后定义逻辑字段与物理字段间的映射关系。
由于将Consume Id加入了逻辑表Member Dim,因此Member Dim的逻辑主键不再是Member Id,应改为Consume Id。删除原来的逻辑主键,使用Consume Id创建新的逻辑主键。
经过重新整理的Member Dim是酱子的:
现在可以依据逻辑表Member Dim创建维度了。
首先定义Member维度的层次结构,由上至下依次为Member Total,Member,Detail。之后将逻辑字段放入相应的层次。与维度对应的逻辑表的主键必须放在最低层(Detail)[9]; Grand Total层(Member Total)内不添加逻辑字段[10]。Member维度的结构如下:
我还需要对每个层次进行设置,包括层次的元素数,以及层次的层键。
关于元素数的规则有:Grand Total层的元素数这只能为1;其他层次的元素数先设定一个大于1的数吧(具体规则还没搞清楚)。
层键为逻辑层元素的唯一组合,层键确定了钻取时的查询路径。层键的属性中可以设定此层键是否用于下钻,选择了“Use for drilldown”后此层键在Oracle Answer中才可用于下钻。[11]
Member 层的层键设置如下:
Detail层的设置与Member层类似。
将整个Business Model“ZW1840”拖到“Presentation”窗口,Administrator Tool 将按照逻辑模型的结构原样创建展现模型。
展现模型的目录被称为Presentation Catalog,也就是在 Oracle Answer 中看到的Subject Area。在展现模型中,所有不希望业务用户看到的字段可以删掉,例如所有ID字段。经过修改后展现模型变成了这个样子:
至此大功告成,Hello BIEE 资料库设计完毕。
每次保存资料库文件时你都会看到提示
这是Administrator Tool在检查资料库的完整性,你可以根据提示检查有问题的模型设置。一个新建的简单资料库不会有太多完整性问题,但第一次保存时你一定会看到这个警告:
新创建的资料库Administrator密码为空,我们可以使用“Manage\Security”菜单打开“Security Manager”设置密码。
双击Administrator 用户设置密码。在这还可以顺便把“Logging Level”设为“2”。[12]
修改Oracle BI Server的配置文件 $OBIEE_HOME\server\Config\NQSConfig.INI,找到“[ REPOSITORY ]”部分,指定新建的资料库文件:
[ REPOSITORY ] REP_ZW1840 = zw1840.rpd, DEFAULT; |
现在启动BIEE的三个服务Oracle BI Java Host,Oracle BI Presentation Server,Oracle BI Server,并启动BIEE的OC4J。
登录BIEE,用户/密码为当前NQSConfig.INI文件所使用的资料库中包含的用户/密码。进入 Answer(BIEE的Ad Hoc 工具)就可以在Subject Area中看到刚才定义的Expense Analysis啦。
选择Subject Area打开查询界面,单击列名将列添加到查询窗格(Selection Pane),CTRL+单击列名将列添加到过滤器(Filters)。
从Member Name 可以下钻到消费明细
能下钻,怎么才能上钻呢?我还没有找到,向各位请教。
The Oracle Business Intelligence Server is a stand-alone process that maintains the logical data model which it provides to BI Presentation Services via ODBC. Metadata is maintained for the data model in a local proprietary file called the repository file (rpd). On the back-end, the BI Server connects to customer data stores via data source adaptors.
The Physical layer of the Administration Tool defines the data sources to which the Oracle BI Server submits queries and the relationships between physical databases and other data sources that are used to process multiple data source queries.
The Business Model and Mapping layer of the Administration Tool defines the business, or logical, model of the data and specifies the mapping between the business model and the physical layer schemas.
The Presentation layer provides a way to present customized views of a business model to users. Presentation Catalogs in the Presentation layer (called Subject Area in Oracle Answers) are seen as business models by Oracle BI Presentation Services users. They appear as catalogs to client tools that use the Oracle BI Server as an ODBC data source.
Logical foreign key joins might be needed if the Oracle BI Server is to be used as an ODBC data source for certain third-party query and reporting tools. Typically, you should not create logical foreign keys. This capability is in the Administration Tool to provide compatibility with previous releases.
CAUTION: Use extreme caution in deciding whether to specify a driving table. Driving tables are used for query optimization only under rare circumstances and when the driving table is extremely small (fewer than 1000 rows). Choosing a driving table incorrectly can lead to severe performance degradation.
Setting Default Levels of Aggregation for Measure Columns
In a business model, a dimension represents a hierarchical organization of logical columns (attributes) belonging to a single logical dimension table.
NOTE: The logical column(s) comprising the logical key of a dimension table must be associated with the lowest level of the dimension.
Grand total level
Level keys
Setting a Logging Level