BI最佳实践:BIRT直方图模型分解
发布时间:2020-12-14 04:05:53 所属栏目:大数据 来源:网络整理
导读:直方图是一种最普通也最易懂的报表模型,但这种模型会受页面宽度限制,比如X轴的系列值过多,无法在一排完全显示出来,有人会想到将X、Y轴做翻转,但这又太难看了,另外也有可能翻转后在一页里仍然显示不完,这时客户一般会想到,将一个图表放不下的数据折行
直方图是一种最普通也最易懂的报表模型,但这种模型会受页面宽度限制,比如X轴的系列值过多,无法在一排完全显示出来,有人会想到将X、Y轴做翻转,但这又太难看了,另外也有可能翻转后在一页里仍然显示不完,这时客户一般会想到,将一个图表放不下的数据折行显示,这样一直纵向地连续铺展下去,笔者当初只是有这样一个想解决这类问题的想法,晚上跳舞回来没事动手就实现了,我先把效果图贴上(注意我只设计一个直方图,并不是三个):
实现步骤如下(实验的业务模型是ORACLE里SCOTT模式的EMP员工表): 1、先把业务数据做一个分页数据集(1),即把已分组的数据进行分段,因为做过WEB或数据库开发的人都知道分页算法的原理,我就不赘述了(不了解的直接谷歌或SO.COM吧),将分段起点和终点设置成参数 附代码: select rn,deptname,total_emps ??from (select t.*,rownum rn ? ?? ?? ? from (select deptno,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创建数据源,并从配置文件中读数据库信息
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |