这几天,算是充分见识了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又花费了半个多小时)
至此,本报表基本开发完成。剩下的工作主要在于完成繁杂(看似内容很多,但有用的信息却很少)的报表文档了。



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

  1. openCPU-EC600简介与软件开发实例小结

    openCPU-EC600简介与软件开发实例小结 咸鱼NO FASHION EC600系列包含EC600S.EC600N.EC600U等.具体差异如下: 1.EC600S包含2G+4G,单4G模组(9 ...

  2. js获取mysql数据库数据类型_怎么利用JS将从数据库中读取出来的日期型格式化为想要的类型...

    在页面初始化时,用JavaScript将从数据库中读取出来的日期型格式化为想要的类型.格式化为yyyy年MM月dd日 HH时mm分ss秒,大家可以参考下代码,自由发挥下. 代码如下://传入从数据库中 ...

  3. 腾讯解析.php,腾讯云域名解析API开发的若干经验(PHP版本开发实例)

    在腾讯云购买域名后,可以购买他们的云解析套餐. 然后可以使用他们的云解析API对域名的解析记录进行动态的修改.这个比较实用. 他也支持一个二级域名可以解析多个A记录.然后可以设置在这几个A记录进行轮询 ...

  4. oracle应用开发实例,oracle 数据库开发应用实例,招生录取系统,oracle与plsql教程打包下载...

    院校编号 院校名称             招生人数 录取人数 男生人数 女生人数 最高分数 最低分数 平均分数 1001        清华大学     5         5        3   ...

  5. AgileEAS.NET平台开发实例-药店系统-报表开发(高级篇)

    开篇 上篇我们讲述了报表开发的独立开发与基于平台的开发二种方式,相信大家已经对报表开发有了一定的了解,那么我们本篇将会巩固大家对报表开发的知识,我们这里提供一 个我们平时在项目中应用到的一些关于报表开 ...

  6. Java Web 后台中餐饮业报表系统开发实例

    本期葡萄城公开课,我们诚邀石家庄品智技术有限公司,高级软件工程师--刘永政先生,为大家在线分享餐饮业报表系统设计模式,以及在 HTML5 报表浏览器.Java 架构中跨平台使用ActiveReport ...

  7. wincc报表日报表实例_工作系统二次开发二Python加工原膜切割日报表数据实例

    #工作系统二次开发二Python加工原膜切割日报表数据实例 #当查询一个或多个工作令后在表格展示数据前按要求对数据进行二次处理,处理要求看如下 #1.加工单号和母卷物料编号相同则把除第一行外的领料有关 ...

  8. python操作微信小程序云端数据库_微信小程序·云开发云数据库的基本使用-微信小程序云开发实例-腾讯云微信小程序...

    微信小程序·云开发云数据库的基本使用-微信小程序云开发实例-腾讯云微信小程序 浏览量:1120 时间:2020-04-06

  9. java JFreechart开发报表的实例demo下载

    原文:java JFreechart开发报表的实例demo下载 源代码下载地址:http://www.zuidaima.com/share/1550463472110592.htm 运行效果图如下: ...

最新文章

  1. 成为多编程语言人才的诀窍你想知道吗
  2. 我依然坚持建议你开始写博客 | 写给我的 2017
  3. WINDOWS SERVER 2003从入门到精通之使用证书在WEB服务器上设置SSL(下)
  4. c语言switch自动贩卖机,JAVA程式-自动贩卖机SWITCHCASE.doc
  5. java hibernate sqlserver自增_怎样在hibernate中实现oracle的主键自增策略?
  6. webstorm 主题导入方法
  7. NLP︱词向量经验总结(功能作用、高维可视化、R语言实现、大规模语料、延伸拓展)
  8. 电路设计中如何解决电压跌落
  9. Centos如何设置ip黑名单,防止被攻击
  10. 【前端微服务化】使用飞冰搭建前端微服务化框架
  11. ChatGPT账号没封的看过来,与ChatGPT玩个超级创意游戏
  12. 在Ubuntu 16.04上安装和配置VNC
  13. Java实现QQ第三方登录
  14. ASEMI整流桥MB10S参数,MB10S封装,MB10S规格书
  15. 【大疆无人机OnboardSDK(三)妙算ssh远程控制台系统搭建】
  16. (二)模仿学习-DAO数据的模仿
  17. 互联网+业务转型,云计算厂商对比
  18. 上海交大牵手淘宝成立媒体计算实验室:推动视频超分等关键技术发展
  19. 目标跟踪:相关滤波算法MOSSE理解与python实现
  20. Web前端:HTML标签——Visual Studio Code

热门文章

  1. Serializable详解
  2. 不写代码、年薪百万,带你玩赚ChatGPT提示工程-介绍
  3. 获取基站LAC CID
  4. 利用python实现Apriori关联规则算法
  5. 三种常见加密算法MD5、对称加密,非对称加密【多测师_王sir】
  6. 遗传算法-matlab
  7. 解决命令行下java编译javac不成功java和java -version可以成功的三种解决方案
  8. 最新网易云课堂Python Flask框架全栈开发
  9. 大数据理论篇--表分类及同步策略
  10. 仿慕课网视频播放界面协调布局