设为首页收藏本站

birt家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6535|回复: 12

[birt4.2] 【原创】BI最佳实践:BIRT直方图模型分解

[复制链接]
发表于 2013-6-21 00:39:18 | 显示全部楼层 |阅读模式
本帖最后由 wurenny 于 2013-6-21 00:40 编辑

直方图是一种最普通也最易懂的报表模型,但这种模型会受页面宽度限制,比如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)查询里的排序应该和图表里系列值排序一致,这样防止分段错乱

总结:
这里用到的核心算法其实非常简单,一个简单的分页原理加上一个层级虚拟查询,但将二者在BIRT中结合便产生了一个BI的最佳实践,供大家参考。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

birt家园有你更精彩!: 5.0
birt家园有你更精彩!: 5
真是太聪明了  发表于 2013-6-21 22:40
发表于 2013-6-21 22:41:21 | 显示全部楼层

这个方法非常好,支持一个。
发表于 2013-6-21 22:42:07 | 显示全部楼层
予以推送首页挂几天,嘿嘿。
 楼主| 发表于 2013-6-21 23:08:25 | 显示全部楼层
应该多鼓励兄弟们把自己一些好的实践经验拿出来分享下,不管是实验的东西还是工作中的东西
BIRT的资料却是较少,更不用说中文资料了
发表于 2013-6-24 12:46:16 | 显示全部楼层
这个好棒啊
发表于 2013-6-24 15:18:56 | 显示全部楼层
是的呢,必须鼓励。
发表于 2013-7-4 08:46:48 | 显示全部楼层
厉害
发表于 2013-8-5 11:05:59 | 显示全部楼层
这个必须回个帖
发表于 2014-1-2 16:00:15 | 显示全部楼层
4、这时候因为数据集(1)是含参的,所以将分段起点和终点参数与数据集(2)的N1和N2对接,至此就基本完成了。

请问分段起点和终点参数如何与数据集2中的N1和N2对接??

数据集和表格、图表我都建立好了,可就是不知道怎么对接这2个参数,还请楼主赐教,多谢!
发表于 2014-5-4 11:31:20 | 显示全部楼层
不错的想法
发表于 2014-7-16 09:13:43 | 显示全部楼层
发表于 2016-11-1 15:37:43 | 显示全部楼层
好思路,必须赞
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|birt家园    

GMT+8, 2017-10-18 18:56 , Processed in 0.176456 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表