博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目经验总结-Eclipse图表工具Birt的使用技巧(三)
阅读量:7045 次
发布时间:2019-06-28

本文共 2486 字,大约阅读时间需要 8 分钟。

hot3.png

    因为篇幅所限,本篇承接上一篇继续介绍Birt的小技巧.

    4.  公共数据源

    项目制作中,多个报表文件可能需要使用同一个DataSet,Cube,DataSource这些东西,如果为每一个rptdesign文件都配置很麻烦,而且修改繁琐.

    可以使用一个Library文件,统一集中处理这些数据源.现在项目中新建一个Library文件,如图:

     

    创建好的rptlibrary文件盒报表文件很像,我们直接在这个文件上新建数据源和数据集还有多维数据集.这里不显示了,和正常的创建一样.

    创建完毕后,我们返回到一个正常的报表rptdesign文件,在Library Explorer窗口中找到刚才创建的那个library文件.此时可以快速的将Datasource,DataSet,Cube添加到我们的报表文件中.如图:

     

    右键你要添加到当前报表的项,然后Add to Report 即可.如果以后Liberty文件的这些数据源信息有改变,对应的各个文件中的数据源也会有变化.添加成功后,再看报表中的数据源显示如下:

     

    和正常报表自己创建的数据源会有区别.

    5.  针对排序出现错误的问题.

    这种问题通常可能会出现在类似这种情景里,比如药品,现在做一个图表,显示按季度为维度,每个季度添加的药品数量,或者按照月份为维度,显示对应药品添加数量.

    一般来讲在数据库中不会有一个单独的字段去存储月份或者季度这样的信息,而是有一个日期的字段记录所有的这些信息.这里我们可以利用SQL语句,通过SQL函数生成我们需要的月份和季度的列.也可以使用更加简单的方式,在BIRT的DataSet中,通过Computed Columns计算出我们需要的列.(推荐)

    现在通过计算出的列,得到季度和月份的列,表达式部分如图:

     

    月份表达式:

    

    如此,将计算出来的列作为维度,创建Cube,然后制作图表,看到效果如下:

     

    可以看到结果是1,3,2,4的排序,不是我们希望的1,2,3,4.同样这种问题在月份为维度的时候也存在.在使用交叉表的时候,也会遇到这个问题.

    这个原因可能是和字符串的排序有关,这里做一些处理,规避掉这种错误的顺序,首先改变DataSet中季度那一列的表达式,如下:

     

    然后将图表中,X轴绑定的表达式如下书写:

     

    再来看结果如下:

     

    这时显示是正确的了,通过对表达式的操作,可以实现很多我们需要的功能.

    6.  Birt标签在JSP中的使用.

    <birt:viewer> 会显示分页和报表头上导出等一些按钮, 此时是对应会有一个frameset.

    <birt:report> 对应一个preview的模式,不会有分页和报表头的那些导出项.

    <birt:param> 作为上面两者的子标签,可以传递参数.

    在页面上方引入tld标签库,<%@ taglib prefix="birt" uri="/birt.tld" %>

    这个很容易设置是否显示工具栏,大小的一些设定,同时省去了我们额外在JSP页面中添加iframe.

    大体上可以如下书写:

  
 

    

    7.  统一数据源连接,从properties文件中读取配置信息连接数据源

    在Birt与SSH集成后,因为数据库是同一个,要从一个配置文件读取配置信息.以一个报表文件为例,如果要从配置文件读取信息并创建数据源连接,首先要创建一个数据源连接,可以直接创建一个Birt内置的示例数据库或者是JDBC数据库,都没有关系.然后选中数据源,点击脚本页,在beforeOpen上写入以下代码:

importPackage( Packages.java.io,Packages.java.util,Packages.java.net );importPackage( Packages.javax.servlet.http );req = reportContext.getHttpServletRequest();propPath = new String("/WEB-INF/con_db.properties");if ( propPath.charAt(0) != "/" ){	propPath = "/" + propPath;}url = req.getSession().getServletContext().getResource(propPath);if ( url != null ){   	props = new java.util.Properties();   	props.load( url.openStream() );	this.setExtensionProperty("odaURL", props.getProperty("url"));	this.setExtensionProperty("odaDriverClass", props.getProperty("driver"));	this.setExtensionProperty("odaUser", props.getProperty("username"));	this.setExtensionProperty("odaPassword", props.getProperty("password"));}

    这样就可以了,但是接下来使用,在报表设计工具中会有各种错误,数据集,立方体都无法根据这个数据源创建,也就无法设计图表.原因是这里面对于properties文件的读取,只支持盘符文件夹的绝对路径,我们这里通过reportContext上下文将其定位到WebRoot的相对路径下,但是req需要运行时环境,所以在设计的时候会有一系列错误.

    解决的方法是,开发中我们创建一个库文件,存放各个数据源和数据集立方体等,所有的报表引用这个库数据源连接,直接连服务器,报表设计开发完毕后,直接将库数据源转为读取properties文件即可.

转载于:https://my.oschina.net/blogshi/blog/194708

你可能感兴趣的文章
Android 中文API (32) —— TimePicker.OnTimeChangedListener
查看>>
如何修改路由器的登录IP地址?
查看>>
外观(Facade)模式
查看>>
Building Android Apps 30条建议
查看>>
【Spring实战】—— 13 AspectJ注解切面
查看>>
Java 集合并交补
查看>>
16.4. jstat - Java Virtual Machine Statistics Monitoring Tool
查看>>
一脸懵逼学习KafKa集群的安装搭建--(一种高吞吐量的分布式发布订阅消息系统)...
查看>>
[Everyday Mathematics]20150209
查看>>
Python图片处理库之PIL
查看>>
(转)基于深度学习的物体检测
查看>>
利用java代码和web拦截器轻松实现一个app抓包工具
查看>>
数制系统
查看>>
cmd连接mysql操作命令
查看>>
“2017最受欢迎中国开源软件”奖TOP 20揭晓 阿里中间件4大项目连续霸榜!
查看>>
Log4j 配置 的webAppRootKey参数问题
查看>>
第 14 章 MyBatis
查看>>
176.6. git-svn - Bidirectional operation between a single Subversion branch and git
查看>>
linux中授予普通用户root权限
查看>>
我的架构之路 — 配置中心(二)— 在已有项目中实际应用
查看>>