调试经验——OBIEE报表开发实例小结(数据库直连DDR模式、日期型Prompt的设置...)

这几天,算是充分见识了OBIEE开发之“低效”,虽然这个报表的业务逻辑并不复杂,但开发过程简直是困难重重。

简单回顾一下这个艰辛的过程:

1. 直接使用拖放字段的方式,需要在列公式(column formula)中做各种设置,耗时不说,关键是不靠谱。LISTAGG()函数并不能正常工作。

2. 所以,只能由Ad-hoc模式(即,从subject area将报表字段逐个拖放至analysis文件的方式)切换为DDR(Direct Database Retrieve,数据库直连)的方式。这里难在需要明确各字段来自哪张表(对应SQL语句中的SELECT、子查询部分)、各表之间的连接关系(对应WHERE部分)。这部分有个技巧:使用Ad-hoc方式(即,拖放字段)创建一个草稿版报表,运行该报表,可在OBIEE后台(需要使用独立于developer权限的账号才能访问该模块)查看实际执行的query(即系统根据拖放的字段即其关系自动生成的SQL脚本)。以此query为基础,进行“大刀阔斧”的修改(机器生成的query真的有点反人类,可以说是“圆环套圆环”,好像压根没打算让人读懂似的)。

3. DDR脚本的开发心得:
    1)选取一个具体case(如,一个protocol)缩小数据集(这个看似简单的步骤,实际上非常有用,可以节省大量调试时间)
    2)一边开发一边进行单元测试(一个字段即可看作一个小功能,甚至一个字段的一个小bug也可看作一个小功能,不断进行开发 —》测试 —》开发的迭代),直至数据准确、完整(这个过程有如战场上开坦克碾压一切敌人的感觉)
   3)使用好子查询(with as, 子查询嵌套),优化SQL脚本(query)结构
   4)活用LISTAGG()函数,实现行转列,有效减少数据行数(提高数据致密化程度)(期间出现了LISTAGG()查询结果的去重问题,参见本人的另一篇拙作: 调试经验——Oracle列转行函数 Listagg() 查询结果的去重(去除重复值)方法,http://blog.csdn.net/hpdlzu80100/article/details/79503702

4. DDR脚本开发并测试完成后,需要完成显示层了(prompt,applied filter等)。这个过程可以说是最为艰辛的(耗用了两天时间)。
要点:
1)对于普通的prompt(相当于筛选器、filter,即用户用于指定查询条件的控件,基本上为下拉列表),可在prompt view中新建column prompt,然后在query中添加Decode语句判断用户是否在该prompt中指定了内容(用DECODE函数)

例:
AND DECODE( '@{PV_MPC}{}',NULL,'NA',MPC.PERSON_NAME ) IN (@{PV_MPC}['@']{'NA'})

2)对于日期型prompt,就不能使用column prompt了(因为用户需要指定一个时间范围,需要开始日期和截止日期两个变量),这时可创建variable value(同一字段,可创建多个variable value)(问题解决过程中,参照了这篇文章 obieeil.blogspot.com/2014/01/obiee-prompts-2-prompts-on-same-column_27.html,不胜感激!

例:
AND DECODE( '@{PV_RBD_P_F}{}',NULL,TO_DATE('01/01/1900','MM/DD/YYYY'),RBD.CALENDAR_DATE ) >= (@{PV_RBD_P_F}{TO_DATE('01/01/1900','MM/DD/YYYY')})  --指定要查询的日期范围的起始日期
 AND DECODE( '@{PV_RBD_P_T}{}',NULL,TO_DATE('01/01/1900','MM/DD/YYYY'),RBD.CALENDAR_DATE ) <= (@{PV_RBD_P_T}{TO_DATE('01/01/1900','MM/DD/YYYY')})  --指定要查询的日期范围的截至日期

3)注意Prompt view中,Presentation Value的值不能重复,否则就会出现用户指定的结果在页面上一闪而过,不能保存的怪现象(排查此bug又花费了半个多小时)

至此,本报表基本开发完成。剩下的工作主要在于完成繁杂(看似内容很多,但有用的信息却很少)的报表文档了。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值