开源报表软件FineReport多数据源报表
- 格式:pdf
- 大小:504.74 KB
- 文档页数:12
开源报表软件FineReport多数据源报表
简单多源报表
1. 描述
多数据源,就是在同一张报表当中,显示的数据来自于多个不同的表或不同的库。
如下图一张简单的多数据源报表,左侧蓝色部分来自于销量表,右侧黄色部分来自销售
总额表,即数据来自于两张不同的数据库表:
2. 示例
2.1 打开单个数据源报表
打开报
表%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Primary\CrossReport\Cross.cpt。 2.2 新增数据源
再新增一个数据集ds2,其SQL语句为SELECT * FROM [销售总额]。ds2数据集与ds1
数据集都有一个销售员字段。 2.3 绑定数据列
如下图,将ds2中销售总额数据列拖拽到单元格中,并设置父格为销售员所在单元格,
使销售总额跟随销售员而扩展:
2.4 设置过滤
此时设计器预览,效果如下:
可以看到,扩展出来的每一个销售员下,都重复显示销售总额字段的所有数据。
虽然销售总额的父格为销售员数据列,由于他们来自于不同的数据集,因此销售总额不
会将父格销售员作为条件进行筛选,即不存在附属关系。
我们需要销售总额与销售员一一对应,就需要设置过滤条件,将这两个数据集的数据通
过销售员关联起来。
选中销售总额所在单元格,设置过滤,添加过滤条件:销售员 等于 'C4',取出与C4
单元格中销售员匹配的数据,如下图:
2.5 保存并预览
保存模板,预览报表,即可看到如上的效果。模板效果在线查看请点击Multi_1.cpt
已完成的模板,可参
见%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\Multidatasource\Multi_1.
cpt 3. 多数据源报表优势
多数据源报表传统的做法,是通过拼SQL将多源整合为单源。如上例中将销量表与销售
总额表整合起来:SELECT * FROM 销量,销售总额 WHERE 销量.销售员 = 销售总额.销售员 。
若数据库表比较复杂,且使用的表个数不止2张而是更多时,可以想象,最终的SQL查询语
句将会非常复杂。
FineReport天然支持多数据源的报表,一张报表中可以添加任意多个数据集,每个数据
集使用最简单的SQL语句查询出需要的表数据,在报表中只需要使用过滤就可以将来自不同
表的数据相互关联起来。使得多数据源报表制作更加简单。
多源报表在线视频请查看【多源报表】
复杂多源报表
1. 描述
上一节中,我们介绍了简单的多数据源报表,而实际应用时,交叉表当中的行列与汇总
计算数据,均来自不同数据库也是很常见的。如下报表:
在这张报表中,项目总数,需财政安排数,单位自筹,它资金都是来自于不同的数据集。 2. 示例
2.1 准备数据集
数据库的数据表是项目ID与项目名称有一张单独的表来保存,另有项目数量,财政补
贴资金,单位自筹资金,其它资金等四张列表。每张表均通过ID字段与项目名称表建立关
系,以下是五张内置的数据集:
注:在数据集面板中点击添加按钮,选择内置数据集即可新建内置数据集,直接添加数
据,详细请查看内置数据集
项目名称(项目名称,ID)--project
项目总数(ID,项目总数)--zs
财政拨款(ID,金额)
--cz 单位自筹(ID,金额)--dz
其它资金(ID,金额)
--qt 2.2 表样设计
如下设计报表:
2.3 绑定数据列及过滤设置
将数据列依次拖拽到单元格中,设置如下: 单元
格
数据集 列名 设置
B4 project 项目
名称 数据分组并从上到下纵向扩展,其它默认
C4 zs 数量 数据汇总求和,不扩展,过滤条件为“数据列”:ID
等于project.ID,其它默认
E4 cz 金额 数据汇总求和,不扩展,过滤条件为“数据列”:ID
等于project.ID,其它默认
F4 dz 金额 数据汇总求和,不扩展,过滤条件为“数据列”:ID
等于project.ID,其它默认
G4 qt 金额 数据汇总求和,不扩展,过滤条件为“数据列”:ID
等于project.ID,其它默认
2.4 编号和公式
在需要添加编号和计算汇总的格子中写入公式: 单元格 公式 其它设置
A4 =&B4 在右键扩展属性中,定义其左左父格为B4
D4 =sum(E4:G4) null
C5 =sum(C4) null
D5 =sum(D4) null
E5 =sum(E4) null
F5 =sum(F4) null
G5 =sum(G4) null
2.5 保存并预览报表
保存模板。设计器中点击分页预览,即如上的效果图。模板效果在线查看请点击
Multi_2.cpt 已完成的模板,可参
见%FR_HOME%\WebReport\WEB-INF\reportlets\doc\advanced\Multidatasource\Multi_2.
cpt
说明:这个报表当中的数据,来自于5个不同的数据集。通过报表当中的数据列关联方
式,将不同数据集的数据关联显示到一张表中。从而避免了在传统的报表处理方式中,通过
复杂的SQL语句,将5个数据集拼成单源的情况,大大降低报表制作的难度及对报表设计人
员SQL水平的要求。
多源分片报表
1. 描述
多源就是一张报表的数据来源来自多个数据表,甚至是多个物理数据库。这里的“多个”
常常不是两个三个,而是七八个乃至十几个,无法转成单源;
分片是指一张报表的纵向或横向或双向同时被分成了多个区域,往往每个区域来自不同
的数据源;
这样的报表即多源分片报表,如下图:
2. 思路设计
多源分片报表通常有比较复杂的横表头与纵表头,在设计多源分片报表时,可以先将表
头设计好,最后设计中间部分的数据,此时只需要设置好对应的关联过滤即可,最后进行模
板数据字典等显示设置;
另外一种快速制作多源分片报表的方法是每片单独设计,如上图报表,可以先设计分片
1,确认无误后再设计分片2,如此类推,同样最后进行模板数据字典等显示设置。 3. 示例
3.1 准备数据
连接数据库FRDemo,新建四个数据集,数据集名分别为雇员、产品、订单信息和订单对
应的sql语句如下:
雇员的SQL语句: SELECT 雇员ID,职务 FROM 雇员
产品的SQL语句: SELECT 产品ID,类别ID FROM 产品 where 类别ID =1 or 类别ID =2
订单信息的SQL语句: SELECT 订单.订单ID,雇员ID,产品ID,数量,(数量*单价) AS 总
额 FROM 订单,订单明细 WHERE 订单.订单ID=订单明细.订单ID
订单的SQL语句: select * from 订单 3.2 表样设计
最终表样如下:
分片1制作
分片1按国家与雇员进行分组统计,中间数据受左表头与上表头双重控制: 单元
格 数据
集 数据
列 属性
B4 订单 货主
国家 默认
C4 订单 雇员
ID 默认
E2 产品 类别
ID 从左到右扩展,其余默认
E3 产品 产品
ID 从左到右扩展,其余默认
E4 订单
信息 总额 汇总求和,添加过滤条件 雇员ID(列序号:2) 等于
'C4' and 产品ID(列序号:3) 等于 'E3'
E5 订单
信息 数量 汇总求和,添加过滤条件 雇员ID(列序号:2) 等于
'C4' and 产品ID(列序号:3) 等于 'E3'
分片2制作
分片2直接统计总额与数量,中间数据只受上表头控制:
单元
格 数据集 数据
列 属性
E6 订单信
息 总额 汇总求和,添加过滤条件 产品ID(列序号:3)
等于 'E3'
E7 订单信
息 数量 汇总求和,添加过滤条件 产品ID(列序号:3)
等于 'E3'
分片3制作
分片3按照雇员职务与雇员进行分组统计,中间数据受左表头与上表头双重控制: 单元
格 数据
集 数据
列 属性
B8 雇员 职务 默认
C8 雇员 雇员
ID 默认
E8 订单
信息 总额 汇总求和,添加过滤条件 雇员ID(列序号:2) 等于
'C8' and 产品ID(列序号:3) 等于 'E3'
E9 订单
信息 数量 汇总求和,雇员ID(列序号:2) 等于 'C8' and 产品
ID(列序号:3) 等于 'E3'
3.3 形态设置
最后我们根据需要,设置数据的显示样式、形态、颜色等。
对C4,C6,E2和E3单元格作形态数据字典设置,都采用数据库表的方式,具体设置如
下表: 单元格 数据库 数据表 列名(实际值) 列名(显示值)
C4 FRDemo 雇员 雇员ID 姓名
C6 FRDemo 雇员 雇员ID 姓名
E2 FRDemo 产品类型 类型ID 类别名称
E3 FRDemo 产品 产品ID 产品名称
3.4 保存与预览
保存模板,设计器中点击分页预览,就可看到如上效果。模板效果在线查看请点击
Multi_3.cpt 已完成的模板,可参
见%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\Multidatasource\Multi_3.
cpt。