本文主要介绍iReport的使用指南和常用功能。本文以iReport 3.5.1为例,通过实例演示非常详细的向大家介绍。有需要的朋友可以参考一下。
目录
报表结构数据源示例3.1简单示例
3.2分组示例
3.3分组子表视图
3.4图表示例
饼图
直方图
3.5交叉声明
在使用ireport的过程中,由于各种功能都需要百度,但是每个人使用的例子却千差万别,非常苦恼,所以用一个简单的例子来展示ireport的常用功能。
我用的是iReport 3.5.1,使用的样本数据表如下图所示:
销售表:(名称和大致结构来自Fansoft电子文档,如有雷同,无意冒犯)
卖家表格:
下面是简介:
报告结构
左边的视图区连接着主设计区各波段区的数据,以及参数、变量等。中间是主要的设计区域。您可以通过拖动控制面板在此区域进行设计。有三种模式:设计器、源代码(Xml)和预览。设计模式可见,源代码模式可以直接在屏幕上修改。预览是对设计好的报表样式的预览,也是一个编制过程。右侧是控制面板和属性面板,您可以在其中使用控件和设置属性。
JasperReport有三种方式保存数据:字段、参数和变量。
一般情况下,该字段用于保存从数据源提取的数据,用法是
;
参数是用来占位的——我们在设计的时候往往不知道具体的值,所以用一个参数来占位它们的位置,执行的时候从程序或者数据库中调出相应的参数,这样就实现了一个动态的过程。用法是
Variables是一个变量,可以用在TextFild表达式中,也可以设置它的属性使其具有一些功能,如求和、求平均值等。用法是
数据源
Ireport提供了许多连接数据源的方法,
可以通过点击顶部的数据库标识符来设置数据库,底部的数据标识符用来写SQL语句获取数据。
这里我们选择jdbc数据连接,mysql连接语句,数据库名为test。
测试是否连接,输入数据库密码,如果成功,会提示:
例子
3.1简单示例
首先连接数据库表sales:
单击“确定”,将在左视图窗口的字段区域获取采集的数据:
此时,在主设计区域中拖放静态文本控件:
在列标题区域中添加一个列名,然后将左侧的字段字段拖到详细信息字段中相应的列名上:
3.2分组示例
有时候我们需要分组来观察数据,然后我们需要分组。我们按地区id分组。需要注意的是,如果使用分组,需要在初始sql语句中添加order by语句,否则ireport不会自动分组。
右键单击可添加分组:
接下来,会有一个向导。我们将按照向导一步一步地进行操作:
然后下一步,完成。
3.3分组子表视图
如果不想在sql语句中添加order by语句,可以使用子表分组查看。例如,如果我想在父报表master.jasper中查看sub_report.jasper的信息,我需要使用销售情况表、员工情况表sellers、子报表控件和一个参数area_id。
首先建立子表员工信息表sub_report.jasper,创建一个新的参数作为连接两个表的桥梁:area_id。参数的属性设置如图所示。
主要目的是将参数类设置为与数据库表中的类型相同,以防止错误。
然后为sub_report绑定数据库表。此时需要注意的是,SQL语句需要包含我们设置的参数$P{area_id}。
接下来,我们来预习一下。这时候就需要给个参数测试了。如果我们给1,结果如下:
这表明分组已经成功,下一步我们需要将子表和父表连接起来。
另外,需要创建一个新的报告文件master.jasper。为了方便查看,请将区域名称拖到详细信息区域中以备后用。
拖拽子表控件,根据向导完成子表属性设置。
(1)选择已有的子表。请注意,选择的是编译文件sub_report.jasper,而不是sub_report.jrxml。如果首先创建父表,请选择Create Child Table here并按照向导创建子表。流程如上。
(2)使用内置的连接参数表达式。
(3)在此报告的现有字段中将参数值设置为$F{area_id}。
(4)存储子表表达式。其实我是把子表和父表放在同一个文件夹里,所以不需要用绝对路径的方法,只需要存储一个路径名就可以了。
完成,运行它:
3.4图表示例
饼图
对于饼图类型,我们需要输入三个表达式:键、值和标签。表达式键允许您识别饼图中的一块。如果键的值是重复的,标签和值将被关联以覆盖键的值。键值不能为空。表达式Value of value指定该键的数值。标签表达式的值允许您为联合图中的每个块指定一个标签。该表达式的值是可选的,默认值为key=value。
首先,拖动图表控件。ireport支持多种图表。因为例子的数据比较简单,就说饼状图和柱状图吧。
放置饼图后,右键单击图表数据并设置图表属性。
这里需要注意的是,value是用来表示饼状图关键词的值。在这个例子中,我们按照销售人员卖出的苹果汁来划分饼状图,所以key是销售人员,他的“价值”,也就是苹果的销量,就是价值。值通常需要是数字类型。
如果我们将标签表达式更改为$F{apple},将会产生以下效果:
个人觉得后者更直观。
直方图
像饼图一样,效果如下:
显然,更复杂的数据才能体现他的有用性。
3.5交叉声明
有时我们不仅需要纵向比较数据,还需要横向比较数据,所以我们使用交叉报告。
交叉报表需要空间交叉表。
让我们创建一个新的报表文件CrosstabTest来统计苹果汁在不同地区的销售情况。绑定数据表后,拖放交叉报表控件,根据向导进行设置:
首先选择主报告数据集:
然后,设置行参数,我们选择区域id作为分组依据,而group2暂时不用。
接下来是列参数,选择销售人员作为分组依据。
然后是主力区域数据。我们主要看不同地区不同销售人员的苹果汁销量,所以选择苹果。因为是计数,所以函数可以选择计数。
最后,布局,交叉表控件会自动带来行和列的总数,这是可以选择的。
完成:
不在销售区域的将被标记为0。
此外,iReport还有获取当前时间、页数等小工具,这些小工具是基于可由TextField更改的表达式定义的。模板文件编译完成后,就可以放入程序中使用,参数也可以传递。
这是我在这一段对ireport的探索。因为数据简单,很多问题还没有被发现。如有错误和不足之处,请讨论指正。