湘潭县司法局:高级报表设计教程之二
来源:百度文库 编辑:偶看新闻 时间:2024/05/03 04:05:56
概述:在使用报表软件过程中,往往会需要设计一些复杂的高级报表,本文以报表软件FineReport为例,向大家介绍,如何制作各类型多源报表、主子报表、以及如何进行动态隔间计算。
目录
累计………………………………………………………………………………… 3
条件汇总………………………………………………………………………… 3
循环引用………………………………………………………………………… 5
同期比实例……………………………………………………………………… 7
分页………………………………………………………………………………… 8
动态重复标题…………………………………………………………………… 8
按组分页………………………………………………………………………… 12
补足空白行……………………………………………………………………… 15
分组分页合计…………………………………………………………………… 16
冻结行列………………………………………………………………………… 20
累计
条件汇总
1. 效果展示
通过层次坐标,我们还可以进行条件汇总,即汇总满足条件的数据信息。如下图所示,是对订单总额的条件汇总。
2. 示例
3. 连接数据库FRDemo
4. 设计报表
4.1 新建报表
4.2 表样设计
4.3 新建数据集
新建一数据集名为ds1,SQL语句:SELECT YEAR(SIGNDATE) AS YEAR,MONTH(SIGNDATE) AS MONTH,ORDERID,AMOUNT FROM ORDERS
4.4 绑定数据列
其各单元格的设置,如下:
单元格
数据集
数据列
属性
B3
ds1
YEAR
从上到下扩展,居中,其余默认
C3
ds1
MONTH
从上到下扩展,居中,其余默认
D3
ds2
ORDERID
数据设置:汇总|个数,居中,其余默认
E3
ds1
AMOUNT
数据设置:汇总|个数,居中,其余默认
5. 条件汇总
,。
在单元格E4中,写入公式:=count(E3[!0]{B3==$B3&&E3>=150000}),设置其左父格为B3。公式意义:一年当中,订单总额大于或等于150000的月份的个数。
6. 保存与预览
保存模板,预览效果如上。
已完成的模板,可参见%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Tutorial\advanced\Caculate_Between_Cells\antisum.cpt
循环引用
1. 效果展示
2. 示例
3. 新建报表
4. 定义数据集
5. 模板设计
其各单元格的设置,如下:
单元格
数据集
列名
属性
A4
ds1
日期
默认
C4
ds1
本日进账
汇总求和,其余默认
D4
ds1
本日出账
汇总求和,其余默认
6. 循环引用设置
设10月份前留下的余额为0,则A4单元格中,输入公式:=if(&A4==1,0,B4[A4:-1]+C4[A4:-1]-D4[A4:-1]);E4单元格中,输入公式:=B4+C4-D4。
说明:A4单元格的公式,表示若日期为扩展后的第一条记录,此时上日余额为0;否则上日余额用B4[A4:-1]+C4[A4:-1]-D4[A4:-1]。层次坐标公式,计算出上一天的余额作为当前格的值。E4单元格就是计算本日的余额数。
7. 保存与预览
保存模板。预览效果如上。
已完成的模板,可参见%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Tutorial\advanced\Caculate_Between_Cells\Loop.cpt
同期比实例
在制作同期比模板时,如果只想显示对应的数据,不想显示对应同期的数据,如今年每个月的数据和去年对应的数据进行同期比,模板中只显示今年的数据,那么怎么进行同期比呢?
1. 实现思路
通过设置列宽为0的条件属性,然后判断一下年份所在列的数据是否为不要显示的数据。
2. 实现步骤
下面以一个具体实例说明一下。
打开模板:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Tutorial\advanced\Caculate_Between_Cells\compare.cpt。
点击报表|报表参数,增加一个报表参数year,点击参数设计,使用默认的参数界面。
给A4单元格增加一个过滤条件,可选列YEAR,操作符“等于”,选择公式,然后输入$year-1,点击增加,点击或(or),继续增加一个过滤条件,可选列YEAR,操作符“等于”,然后选择参数$year。
右击A4单元格,选择条件属性,选择行高,设置行高为0,选择普通,操作符“等于”,选择公式,在公式中输入$year-1。
分页
动态重复标题
1. 效果展示
动态重复标题行,是指在报表数据分多页显示时,通过重复标题的设置,将左表头或上表头重复显示在每一页当中。如下:
2. 示例
3. 连接数据库FRDemo
4. 设计模板
4.1 打开报表
打开一张已有数据的空白报表%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Tutorial\advanced\Pagination\blank.cp
4.2 表样设计
today()公式,表示返回当前日期。
4.3 绑定数据列
其单元格设置,如下:
单元格
数据集
数据列
属性
G3
ds1
City
从上到下扩展,其余默认
C8
ds1
Region
从上到下扩展,左父格:G3,其余默认
C10
ds1
Name
从上到下扩展,左父格:C8,其余默认
D10
ds1
Address
从上到下扩展,其余默认
E10
ds1
ZipCode
从上到下扩展,其余默认
F10
ds1
Phone
从上到下扩展,其余默认
G10
ds1
OfficeHours
从上到下扩展,其余默认
4.4 动态重复标题行设置
5. 保存与预览
保存模板。设计器中,点击分页预览,效果如上。
已完成的模板,可参见%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Tutorial\advanced\Pagination\HeadPagination.cpt
按组分页
1. 效果展示
按组分页,就是让数据按组来进行分页显示。如下所示,模板按照区进行分页:
下面以动态重复标题行内容的基础上实现其上按组分页的效果。
2. 示例
3. 设计模板
3.1 打开原有模板
打开上一章节报表%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Tutorial\advanced\Pagination\HeadPagination.cpt
报表原本的样式,是按照设定的纸张大小进行分页的,现在希望能够按照区进行分页,一个城市一个区的数据显示在同一个页面当中。
3.2 按组分页
4. 效果与预览
保存模板。设计器中,点击分页预览,效果如上。
已完成的模板,可参见%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Tutorial\advanced\Pagination\GroupPagination.cpt
补足空白行
1. 效果展示
2. 示例
3. 设计模板
3.1 打开原有模板
打开报表%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Tutorial\advanced\Pagination\GroupPagination.cpt
3.2 设置补充空白行
注:数据倍数表示对于当前扩展单元格,需要显示的总行数。如该值写为12,则若当前单元格扩展后数据为8行,则会自动补充4行空白数据。
4. 保存与预览
保存模板。设计器中,预分页览,效果如上。
已完成的模板,可参见%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Tutorial\advanced\Pagination\BlankPagination.cpt
分组分页合计
1. 效果展示
之前通过条件属性与层次坐标,实现页内合计的需求,可看到虽然逻辑明确,但实现过程比较复杂。对于更加复杂的应用需求,上述方法就不适用。比如不仅需每页显示固定的行数,且需先分组,组内每页显示固定的行数后分页,需要进行页内合计、组内合计、总合计。对于这种需求,我们有简单的方法可以实现,其效果如下:
2. 示例
3. 新建工作薄
4. 新建数据库查询ds1
SQL语句:SELECT * FROM SALES_BASIC
5. 表样设计
数据列设置,如下:
单元格
数据集
数据列
属性
A1
ds1
地区
默认
B2
ds1
销售员
默认
C2
ds1
产品
默认
D2
ds1
销量
默认
A2单元格中,输入公式:=ds1.group(int(($$group_result_sequence-1)/6)),从上到下扩展,左父格设置为A1。其中$$group_result_sequence表示数据集(这里是ds1)在父格A1该组内,所含扩展数据的序号,序号从1开始。如在此表示以A3为父格,数据集ds1在此A1格内,所含扩展数据的序号,每条记录的序号减去1,使得序号从0开始,再除以6之后取整,表示0-5这6个序号都显示为0,6-11这6个序号显示为1。依次类推,这里使得扩展出来的数据序号,以6个分为一组。当然这边除以的数是您想要多少个数据为一组就除以几。最后再用ds1.group(),表示对括号中的内容进行分组。
单元格
值与属性
A3
输入“页合计”,左父格设置为A2
D3
输入公式sum(D2),其余默认
A4
输入“组合计”,左父格设置为A1
D4
输入公式sum(D2),其余默认
A5
输入“总计”,默认
D5
输入公式sum(D2),其余默认
6. 分页设置
从以上结果可看出,组合计与总计都已完成,需要设置每组每页固定显示6条数据,我们还需设置分页。右击A1单元格|单元格属性,设置行前分页,使得第二组后能够自动分页。
7. 保存与预览
保存模板。分页预览,其效果如上。
已完成的模板,可参见%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Tutorial\advanced\Pagination\GroupInPageAmount.cpt
冻结行列
1. 效果展示
冻结行列功能,与Excel类似,拖动滚动条查阅其他相关信息时,希望一些重要提示信息不随滚动条拖动。例如:查看学生的分数时,希望学生的信息和相应课程始终在我们的视野中,就可以使用冻结行列的方法,冻结相应的行列。如下图:
报表分为:普通查询的报表和填报的报表,这两种情况下都可以设置冻结,但设置方式不同。其下介绍其各冻结设置的方法,且已设置冻结的报表导出为excel后,表头仍然是冻结的效果。
2. 普通查询报表冻结
2.1 设计模板
新建报表,连接数据库FRDemo,新建数据集ds1,SQL语句:SELECT * FROM STSCORE
如上将数据集的各字段,拖入相应的单元格内并作相应的设置。
2.2 冻结设置
注:需实现冻结效果,如:需显示冻结重复标题行的效果,要勾选冻结重复标题结束行,同时设置重复标题起始行和重复标题结束行;其需设置冻结重复标题列也是如此操作。
若只勾选冻结重复标题结束行或只勾选重复标题结束列,是实现不了冻结行或冻结列效果的。
2.3 保存与预览
保存设置后,点击设计器中的分页预览即可。
若需要显示如上效果中的横向滚动条的话,还需在分页预览的地址栏后加上&__bypagesize__=false,意义是让其分页预览按强制分页效果进行分页。其具体意义有需要了解的,可参见分页预览按强制分页进行分页文档。
注:分页预览方式查看的报表,设置为冻结效果后,预览报表时就不会以报表居中的样式展现,而是报表整体偏左的样式。
若预览的报表是在&op=sheet下的,且要实现冻结效果,得要通过设置填报冻结方式才能实现冻结的效果。
3. 填报表冻结
3.1 修改刚模板中的页面设置
注:选择填报冻结行时,冻结的部分:将是所选列的左边列的部分与所选行的上边行部分的内容;示例中冻结的是第E列的左边(即A、B、C、D)列,第4行的上边(即1、2、3)行。
3.2 保存与预览
保存设置后,点击设计器的填报预览,便可看到效果。
4. 冻结报表导出excel表头仍可锁定
将上述模板导出为excel时,在excel中依然可实现在报表中预览查看的表头冻结的效果。