
报表工具FineReport多数据源报表.pdf
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。












