湘潭县司法局:高级报表设计教程之二

来源:百度文库 编辑:偶看新闻 时间: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

点击设计器中的分页预览,在参数中输入2009,可以看到只显示了2009年的数据,如下图:

分页

动态重复标题

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

从上到下扩展,其余默认

绑定好数据列后,为了完成整个模板的界面,要填上序号以及页码,在B8中填入公式:=&C8,左父格C8,从上到下扩展。在B10中填入公式="(" + &C10 + ")",左父格C10, 从上到下扩展。在G11中填入公式=$$page_number + "/" + $$totalPage_number,左父格C8,从上到下扩展,如图:

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 按组分页

右击B12单元格,选择扩展属性,其左父格设为C8。右击B12单元格,选择单元格属性,在分页区域,选中行后分页。如下图所示:

4. 效果与预览

保存模板。设计器中,点击分页预览,效果如上。

已完成的模板,可参见%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Tutorial\advanced\Pagination\GroupPagination.cpt

补足空白行

1. 效果展示

有时我们希望每页显示固定的行数,以统一美观。而不足该行数的页面,可补充空白行来显示,如下图,每页显示12行数据:

2. 示例

3. 设计模板

3.1 打开原有模板

打开报表%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Tutorial\advanced\Pagination\GroupPagination.cpt

3.2 设置补充空白行

选中C10单元格,右击选择单元格元素>数据列>高级。如下图,在补足空白数据中,在数据倍数前打勾,输入每页要显示的行数。这里输入12,如下:

注:数据倍数表示对于当前扩展单元格,需要显示的总行数。如该值写为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单元格|单元格属性,设置行前分页,使得第二组后能够自动分页。

右击A2单元格|条件属性,当前值不为0时,行前分页,使得组内按照每页6条数据分页,设置如下图:

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 修改刚模板中的页面设置

若需在填报预览(即&op=write)下,实现冻结单元格的效果。其页面的具体设置,如下:

注:选择填报冻结行时,冻结的部分:将是所选列的左边列的部分与所选行的上边行部分的内容;示例中冻结的是第E列的左边(即A、B、C、D)列,第4行的上边(即1、2、3)行。

3.2 保存与预览

保存设置后,点击设计器的填报预览,便可看到效果。

4. 冻结报表导出excel表头仍可锁定

将上述模板导出为excel时,在excel中依然可实现在报表中预览查看的表头冻结的效果。