本文为自己许久之前开发报表记录的文档,转载此处主要防止丢失,如果能给哪位朋友解决一丝问题那就更有价值了。
简介
报表介绍
BIRT――商业智能和报表工具。
BIRT是一个Eclipse-based开放源代码的报表系统,它主要是用在基于Java和J2ee的web应用程序上。BIRT主要由两部分组成:一个是基于Eclipse的报表设计器和一个可以添加到应用服务器的运行组建。BIRT同时提供一个图形报表制作引擎。
BIRT拥有和Dreamweaver一般的操作界面,可以像画table一样画报表,也可以生成图片、导出Excel、html、pdf、ppt等分页,样式比script设置简单,另外BIRT还有OLAP导航功能。
基本概念
数据源:数据的来源,或提供者。如xml数据源、jdbc数据源等。
数据集:数据集合,它必须与数据源关联,可以理解为查询的结果。
报表以及报表项,报表可视为是针对一组数据集的表现形式,而报表项这是这个表现形式的某个具体的单元。它们之间的关系,与窗体和控件的关系非常类似。报表、数据集、数据源三者间的关系:数据源 --- 数据集 --- 报表。
报表参数:查询参数的表现形式,使用它可以构建更灵活的报表。
模板和库:主要用于复用报表设计,提高报表开发的效率
丰富的报表
列表-列表是最简单的报表。当列表变长时,你可以把相关数据增加到同一分组(基于客户的订单分组,基于供应商的产品分组)。如果数据是数字类型的,你可以轻松的添加到“总数”、“平均”、或其他汇总中。
图表-当需要图表表现时,数字型数据比较好理解。BIRT 也提供饼状、线状以及柱状图标等。
交叉表-交叉表(也叫做十字表格或矩阵)用两种维度展示数据:sales per quarter or hits per web page。(交叉表在 1.0.1 中没有提供,但计划在将来提供。)
信函和文档-通知、信件、以及其他文本文档都很容易通过BIRT 方便建立。文档包括正文、格式、列表、图表等。
混合报表-很多报表需要联合以上所有的报表构成单一文档。例如,一份客户声明会列出客户所需要的信息,为当前促进(promotions)提供文本,以及提供并行的出帐和入帐列表。一份财政报表将包括声明、图表、表格,所有这些都将进行全方位的格式化,来匹配共有的配色方案。
安装使用
官方网站
安装程序
可自行去官网下载,也可联系开发团队。
软件使用
新建一个报表
打开eclipse 在菜单栏点击选择文件----新建项目-----点开业务智能和报告工具-----报表项目, 点击下一步,输入一个项目名称,可以使用默认位置也可以换新的位置,点击完成,(如下图新建完成)
鼠标移到项目上右键选择新建-------报告(如下图)
新建报告后会出现新建报表窗口(如下图)
这里有三个需要注意的地方:
-
输入后选择父文件夹的地方一定要选当前所使用的项目
-
文件夹名一定要定义好
-
下一步和完成
(1) 点击完成直接创建,创建的是空白模板
(2) 点击下一步后可以选择模板,然后点击完成根据选择的模板生成(如下图)
为报表添加数据源
首先要添加一个数据源,在数据资源管理器中找到数据源右键-----新建数据源(与数据库关联)
选择数据源类型(我们选择JDBC数据源)
创建新的数据源
我们需要安装jdbc的驱动类,点击管理驱动程序,打开如下界面
点击添加选择文件,打开一开始解压eclipse软件的路径找到mysql-connector-java-5.1.35.jar选择,点击确定
回到创建新的数据源窗口,在驱动程序类下拉中找到com.mysql.jdbc.Driver (v5.1)
DAtabaseURL:这个地方输入的是连接数据库的URL(如本地我的是:jdbc:mysql://localhost:3306/jbsp?useUnicode=true&characterEncoding=utf-8&createDatabaseIfNotExist=true) 用户名:这里填写登录数据库的用户名(如:root) 密码:这里填写登录数据库的密码(如:root)
点击测试连接,提示连接成功,点击完成,数据源就添加好了
为报表添加数据集
在数据资源管理器中找到数据集右键-----新建数据集
弹出新建数据集窗口,直接点击下一步,弹出查询窗口
Query Text 这里面是写sql语句(例子:拿到act_id_user表中的所有数据)如果拿取的数据多表关联 用sql语句join拿取 可用数据项:这里面是查询出来的数据库中的表和字段,可以双击选择也可以拖拉到右侧进行使用 点击完成
这里面显示的是输出的列看一下对不对
左侧的查询就是刚才可以写sql语句的窗口,预览结果就是查看获取的数据,如果sql写的有错误它会报错
点击确定数据集添加成功(如下图)
参数
url中增加参数链接后面直接添加参数。frameset?__report=tender.rptdesign&organizeName=${organizeName}&name=1&age=20
报表文件中增加参数
报表文件添加参数脚本,选中左侧数据集,在中央区域点击脚本,下拉选中beforeOpen,对sql根据参数增加查询条件。 如果原sql没有where语句,需要添加where 1=1,保证sql拼接后不错误。
测试参数查询
将报表加入到项目 找到编写好的文件 后缀名为.rptdesign 将它放到项目指定的文件下 在新建新的jsp 引入报表
-
名字与编写的文件名相同
-
拼凑搜索的链接 连接的名与报表的参数名相同
-
拿取搜索框里的值
快速入门
项目中使用报表,要在选择eclipse中绘制报表并编写SQL语句,然后再系统中新增页面,并引入报表文件实现。
搜索原理:
-
- 页面通过输入或者下拉,拼接搜索参数。
- 将搜索参数拼接到url,进行报表渲染。
注意事项:
- 报表的参数不能包含下划线
_。 - 报表参数的日期可以试用字符串。
使用技巧
自动撑满宽度
- 点击空白处。
- 属性选项卡-“常规”-“
Layout Preference”-选择“Auto Layout”(注意:宽度要为空白 不能定义)。
调整表格宽度
-
选中表格鼠标滑过表格,表格左下方出现表格全选图表,选择整个表格。
-
属性选项卡-“常规”-“
Width”,根据需要设置即可。
设置A4页面
打开报表项目,点击分页栏中的主页,常规中选择类型为A4,即可设置。
怎么设置页面宽度、文字居中加粗和垂直居中
一般宽度设置都是设置百分比;首先打开报表,将鼠标移动到你要修改宽度的控件上面(标签不能设置宽度),会在左下角出现控件的名称,点击名称在下方的属性编辑器常规中找到‘width’,输入并修改后面的单位(%、像素、点等)。
文字居中加粗同样的也是选中左下角控件名称,然后在属性编辑器中找到常规,在右下角就能找到文字居中按钮和加粗按钮,这样是设置全局文字居中和加粗,如果想让单个文字或者控件居中加粗,直接选中文件或者控件然后点击按钮即可。
选中左下角的控件名称,实行编辑器中的常规,找到垂直对齐,下拉选择'中间名' (此处为汉化问题)。
使用聚合
点击左侧的画板,找到聚合,点击聚合拖到需要聚合的一列,弹出聚合生成器。
生成器:显示名称是用来显示在创作报表的页面,给制作人提供方便的;数据类型是选择返回的数据格式的,一般都是字符串格式(特别是聚合金额的时候使用字符串格式);函数是选择聚合方式,一般我们用到的是SUM(求和);
表达式中是聚合使用的表达式,一般使用的是特定的表达式。
可以直接下拉选择列表中的列进行聚合
也可以点击右侧按钮,弹出表达式生成器窗口,输入表达式。
筛选条件需要添加表达式进行删选,满足条件的才能聚合。
聚合条件是选择聚合的范围,可以是全表数据,也可以只是表中的一个分组中的数据。
获取当前时间
拖一个文本框,到显示时间位置松开,会弹出编辑文本项窗口,在窗口中输入'<value-of>new Date().getFullYear() + "年" + (new Date().getMonth() + 1) + "月" + new Date().getDate() + "日"</value-of>',点击确定。
点击选中文本框,在下方属性编辑器点击常规,在右侧找到内容类型,下拉选择HTML即可。
添加序号并且实现列表数据循环自动加一
一般只有在列表显示数据的时候才用到需要,首先在表控件的'表-页眉'处拖一个标签,内容为序号。
在需要下方正对的'表-详细资料'中拖入一个文本框,不用输入任何文字。
选中页眉处序号所在的单元格,点击下方分页栏中的脚本。
在上方脚本选项中,选择onCreate,在下方输入文本的地方输入i=0;
回到布局,选中刚才添加的文本输入框,继续点击下方的脚本分页栏,在脚本中选择onCreate,输入i++;this.text = i; 即可。
使用分组
分组是以数据中的某一列作为主体进行循环显示。
首先将表控件拖到页面上,右键'表-详细资料',选择插入组。
弹出新建组窗口(主要注意三个地方)
- 名称:是显示用的
- 分组依据:选择数据中的那一列作为主体循环(可以下拉选择,也可以点击右侧按钮)
- 排序方向:选择升序还是降序排列
- 点击确定,添加分组成功,然后将其余的列拖到'表-详细资料'位置即可。
设置小数位数
选择要设置位数的数据集字段
双击并选择表达式按钮。
在要设置小数的数据集后面加.toFixed(6)。
调试
birt拼接SQL的地方使用JS语言,但是不能使用alert()及console.log()进行打印,如果想要调试SQL,可以采用以下方式输出。
创建一个变量:debugsql。
点击DataSet,然后选择beforeopen开始编写SQL拼接脚本。
channel_name = reportContext.getParameterValue("channel_name");
if(channel_name != '' || channel_type != '' || brand_code != '')
{
queryString = this.queryText;
if(channel_name != '' && channel_name != "请选择"){
queryString = queryString +" and order_from_name = '" +channel_name +"'";
}
}
this.queryText = queryString;
//上部为报表业务代码,下面为调试所需代码
vars["debugsql"] = this.queryText;
把变量debugsql,拖放到布局上,然后点击preview,就可以看到打印的sql。