BI最佳实践:BIRT直方图模型分解
来源:互联网 发布:js判断display属性 编辑:程序博客网 时间:2024/04/29 16:47
直方图是一种最普通也最易懂的报表模型,但这种模型会受页面宽度限制,比如X轴的系列值过多,无法在一排完全显示出来,有人会想到将X、Y轴做翻转,但这又太难看了,另外也有可能翻转后在一页里仍然显示不完,这时客户一般会想到,将一个图表放不下的数据折行显示,这样一直纵向地连续铺展下去,笔者当初只是有这样一个想解决这类问题的想法,晚上跳舞回来没事动手就实现了,我先把效果图贴上(注意我只设计一个直方图,并不是三个):
实现步骤如下(实验的业务模型是ORACLE里SCOTT模式的EMP员工表):
1、先把业务数据做一个分页数据集(1),即把已分组的数据进行分段,因为做过WEB或数据库开发的人都知道分页算法的原理,我就不赘述了(不了解的直接谷歌或SO.COM吧),将分段起点和终点设置成参数
附代码:
select rn, deptname, total_emps
from (select t.*, rownum rn
from (select deptno, deptname, count(*) total_emps
from SCOTT.S_EMP
group by deptno, deptname
order by deptno) t
order by rn)
where rn between ? and ?
2、虚拟一个层级查询的数据集(2),这个查询的最大值是:最终你要折几次行完全显示的行数,比如每行放10个系列值,总共是100个系列组,那这个层级数据集的内容将是1,2,3……10;通过这个数据集你可能计算出(1)中的数据集分段起点和终点值,可做为另外两列假设为:N1和N2,比如第一段的起点、终点为1和10,第二段为11和20……,第10段为99和100
附代码:
select level n, 10 * (level - 1) + 1 n1, 10 * level n2
from dual
connect by level <= (select ceil(count(distinct deptno) / 10) from s_emp)
3、插入一个表格,和数据集(2)绑定,再在明细里插入直方图,数据来源为数据集(1)
4、这时候因为数据集(1)是含参的,所以将分段起点和终点参数与数据集(2)的N1和N2对接,至此就基本完成了。
注意事项:
1、因为用到虚拟的层级查询数据集,所以数据库一定要支持层级查询,我很熟悉的ORACLE和POSTGRESQL均支持
2、数据集(1)查询里的排序应该和图表里系列值排序一致,这样防止分段错乱
总结:
实现步骤如下(实验的业务模型是ORACLE里SCOTT模式的EMP员工表):
1、先把业务数据做一个分页数据集(1),即把已分组的数据进行分段,因为做过WEB或数据库开发的人都知道分页算法的原理,我就不赘述了(不了解的直接谷歌或SO.COM吧),将分段起点和终点设置成参数
附代码:
select rn, deptname, total_emps
from (select t.*, rownum rn
from (select deptno, deptname, count(*) total_emps
from SCOTT.S_EMP
group by deptno, deptname
order by deptno) t
order by rn)
where rn between ? and ?
2、虚拟一个层级查询的数据集(2),这个查询的最大值是:最终你要折几次行完全显示的行数,比如每行放10个系列值,总共是100个系列组,那这个层级数据集的内容将是1,2,3……10;通过这个数据集你可能计算出(1)中的数据集分段起点和终点值,可做为另外两列假设为:N1和N2,比如第一段的起点、终点为1和10,第二段为11和20……,第10段为99和100
附代码:
select level n, 10 * (level - 1) + 1 n1, 10 * level n2
from dual
connect by level <= (select ceil(count(distinct deptno) / 10) from s_emp)
3、插入一个表格,和数据集(2)绑定,再在明细里插入直方图,数据来源为数据集(1)
4、这时候因为数据集(1)是含参的,所以将分段起点和终点参数与数据集(2)的N1和N2对接,至此就基本完成了。
注意事项:
1、因为用到虚拟的层级查询数据集,所以数据库一定要支持层级查询,我很熟悉的ORACLE和POSTGRESQL均支持
2、数据集(1)查询里的排序应该和图表里系列值排序一致,这样防止分段错乱
总结:
这里用到的核心算法其实非常简单,一个简单的分页原理加上一个层级虚拟查询,但将二者在BIRT中结合便产生了一个BI的最佳实践,供大家参考。
birt用脚本javascript创建数据源,并从配置文件中读数据库信息
可以用script往解决第一个题目。
可以定义一个参数往指定properties文件的路径,然后创建datasource。
在datasource的script中编辑beforeOpen事件,参考下面的代码:
=======================================
importPackage( Packages.java.io );
importPackage( Packages.java.util );
fin = new java.io.FileInputStream( new String(params["propFile"]) );
props = new java.util.Properties( );
props.load(fin);
extensionProperties.odaURL = new String(props.getProperty("url"));
extensionProperties.odaDriverClass = new String(props.getProperty("driver"));
extensionProperties.odaUser = new String(props.getProperty("userid"));
extensionProperties.odaPassword = new String(props.getProperty("password"));
fin.close();
这样就可以从properties文件中动态读取数据源配置信息。
可以定义一个参数往指定properties文件的路径,然后创建datasource。
在datasource的script中编辑beforeOpen事件,参考下面的代码:
=======================================
importPackage( Packages.java.io );
importPackage( Packages.java.util );
fin = new java.io.FileInputStream( new String(params["propFile"]) );
props = new java.util.Properties( );
props.load(fin);
extensionProperties.odaURL = new String(props.getProperty("url"));
extensionProperties.odaDriverClass = new String(props.getProperty("driver"));
extensionProperties.odaUser = new String(props.getProperty("userid"));
extensionProperties.odaPassword = new String(props.getProperty("password"));
fin.close();
这样就可以从properties文件中动态读取数据源配置信息。
- BI最佳实践:BIRT直方图模型分解
- IBM Cognos 最佳实践: 面向使用 IBM Cognos BI 的 OEM 的持久模型最佳实践
- BI报表BIRT开发
- Git分支模型 最佳实践
- IBM Cognos BI 最佳实践: 定制 IBM Cognos 8 UI
- IBM Cognos BI 最佳实践: Cognos 8.3 中的动态仪表板
- IBM Cognos BI 最佳实践: IBM Cognos 8 性能调优速查表
- IBM Cognos 最佳实践: 保护 IBM Cognos 10 BI 环境
- IBM Cognos BI 最佳实践: 高级提示 — IBM Cognos BI 8.3 和 8.4
- Birt + SSH2 完整实践
- IBM Cognos BI 最佳实践: 报表设计高级提示和提示性能调优
- IBM Cognos BI 最佳实践: IBM Cognos 8.3 中的报表批量分发功能
- IBM Cognos BI 最佳实践: IBM Cognos 8 维度函数参考指南
- IBM Cognos BI 最佳实践: IBM Cognos 8 性能调优设置
- IBM Cognos 最佳实践: IBM Cognos 10 BI 中的 Enhanced Search 选项
- IBM Cognos 最佳实践: 自动化 IBM Cognos 8 BI 的部署
- 实施IT治理:方法论、模型、全球最佳实践
- TensorFlow下构建高性能神经网络模型的最佳实践
- java HashMap的原代码
- LogCat挂掉如何启动
- ckeditor
- Android Hierarchy Viewer
- 我的Win32开发抉择,Delphi老将复出
- BI最佳实践:BIRT直方图模型分解
- WCF RIA 服务 (二十八)-- Silverlight 客户端 9
- mysql 数据类型转化
- 事务的使用示例及WinForm实现中的若干问题
- Linux下安装、配置ACE
- bat常用
- flex4 默认指定按照某列排序
- 生产者与消费者
- AIDL的一点理解