OBIEE利用全局临时表开发复杂报表

本文探讨了如何将HFM原型迁移到BIEE中,通过创建会话级全局临时表、存储过程预处理数据并避免复杂的聚合计算,作者分享了如何用简单方法解决报表需求不匹配问题及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求描述

最近开发了一个BIEE分析报表,报表需求原型来自HFM,和BIEE的维度和度量的方式匹配不上。

解决方法

想了很多办法也无法用数据仓库的思维解决,最后只好采取比较极端的方式解决,即在后台将所有数据先计算好,BIEE的分析仅仅是作为展现使用。计算好的数据存放在Global Temporary 表中。

方法描述

创建会话级别的全局临时表

Global Temporary Table有两种类型,一种是会话级别,一种是事务级别,具体应用场景这里不多说了,在这里我们是创建会话级别的全局临时表,例如:

CREATE GLOBAL TEMPORARY TABLE test
(column1 varchar2(10),
....
column10 varchar2(10))
ON COMMIT PRESERVE ROWS; 

创建准备报表数据的存储过程

在数据库里创建存储过程,存储过程的功能是将报表数据准备好,插入上一步创建的临时表中。利用这个存储过程,无论报表逻辑有多复杂都可以实现了。

设置资料库调用存储过程

设置步骤如下:
1 右键点击连接池,点击属性,进入连接脚本页签, 点击查询前执行部分的新建按钮
在这里插入图片描述

2 在物理sql处填写调用上一步准备好的存储过程
在这里插入图片描述
例如:

begin
 cux_test(p_user => 'VALUEOF(NQ_SESSION.USER)');
  fhfm_icp_prepare_data(p_entity_code => 'VALUEOF(NQ_SESSION.HFMENTITY)',
                        p_icp_code =>'VALUEOF(NQ_SESSION.HFMPARTNER)',
                        p_year =>'VALUEOF(NQ_SESSION.HFMYEAR)',
                        p_period =>'VALUEOF(NQ_SESSION.HFMPERIOD)',
                       p_user => 'VALUEOF(NQ_SESSION.USER)'

);

end;

创建资料库模型

以全局临时表为事实表,再加上其他相关维表,创建物理模型,业务模型和表示层模型,这一步是OBIEE资料库的基本开发方法,不多说了。
注意:全局临时表在物理层需要设置为不可高速缓存,否则查询报表时数据不刷新的问题。
在这里插入图片描述

创建分析展示数据

这一步根据报表展示内容正常创建分析即可,本文中的报表因为连合计都是事先计算好的(主要是因为合计计算公式很奇葩,无法使用聚合规则),所以做了‘假’的合计行展示。
1 合计行的颜色字体等均和数据行不同,采用条件格式实现,例如
在这里插入图片描述

2 全局临时表需要增加一个分组字段,准备数据时计算好的合计行要和组内数据的这个分组字段要填入同样值,创建的分析要把这个分组字段放在第一列

3 有这种‘假’的合计行的分析用户不能按列排序,所以要把分析属性相关列排序等属性去掉
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值