FineReport-leanning
第一张报表
效果展示图
操作步骤
新建数据连接
新建数据连接的目的是让 FineReport 设计器连接数据库,这样报表就可以在数据库中读取、写入或修改数据。
数据连接的方式有两种,分别是连接内置数据库和连接外置数据库。
新建报表类型
新建数据集
数据集通过 SQL 查询语句从已经建立连接的数据库中取数,将数据以二维表的形式保存并显示在数据集管理面板处。简单而言数据集是报表设计时的直接数据来源。
数据集按照作用范围分为两种:服务器数据集 和 模板数据集。
我们制作的这张普通报表将新建两个模板数据集 ds1 和 ds2。
报表设计
基本页面设计
属性设置
选中 C3 单元格,让产品字段的数据在表格中横向扩展,右边属性面板选择
选中C4单元格,由于A4,B4,C3单元格的扩展已经确定额唯一的销量集,所以C4单元格无需扩展
多数据集关联
当报表中存在不同数据集的数据时,需要通过添加数据过滤条件,建立器不同数据集之家的联系。
选中并双击 D4 单元格,弹出数据列对话框,选择过滤。给单元格添加一个普通条件,将 ds2 的销售员字段与 ds1 的销售员字段进行绑定,实现两个数据集之间的关联。
图表设计
我们要在这张报表中插入柱形图直观化的展示各销售员每个产品的销售总量。
- 合并A7-D18单元格,选择菜单栏
插入>单元格元素>插入图表
- 选择柱形图
- 选中图表,在右边属性面板选择
单元格元素>数据
,设置柱形图的数据。
注:分类名、系列名、值在设置的时候必须要有等号,否则单元格会被作为字符串处理。
-
展示的图表信息,不需要对图表所在的单元格进行扩展。,左父格和上父格均设
无
。 -
自定义柱形颜色,选中柱形图,点击属性面板
单元格元素>特效>条件显示>添加条件
参数设计
参数的作用在于通过设置参数,可以在参数面板中给参数添加控件,再将控件与报表数据进行绑定,进而实现根据用户输入的参数查询指定的数据。
菜单栏选中模板->模板参数
,添加相应的查询条件信息。点击编辑按钮,右上角会显示没有使用的控件信息,点击添加。
选中下拉框控件,在右边的控件设置面板选择属性,点击数据字典编辑按钮,类型设置为「数据库表」
,数据库为「FRDemo」
,选择数据库表为「销量」
,列名的实际值和显示值为「地区」
。
这样就给下拉框控件绑定了数据库销量表中的地区这个字段,这个字段下有两个地区信息,分别为华东和华北,用户可下拉选择华东或者华北来查询对应地区下的销售概况信息。
设置好控件之后,需要对相应的地区单元格,设置条件过滤。
报表设计基础
单元格扩展
引出:数据集中的字段拖入到单元格后,如果不进行单元格扩展,字段下的数据会在一个单元格中集中展示。
通过单元格扩展功能,可以让一个字段下的不同数据在多个单元格中展示
Comment
FineReport提供了三种单元格扩展方向。
- 纵向扩展:单元格中字段的数据纵向扩展,在不同单元格中展示。
- 横向扩展:单元格中字段的数据横向扩展,在不同单元格中展示
- 不扩展:单元格中字段的数据不扩展,所有数据在一个单元格中展示。
实例-行式报表
准备数据SELECT * FROM 订单
,取出所有数据。
A1~G1 单元格写入表格标题信息,选中 A1~G1 单元格,右边属性面板选择单元格属性>样式,样式下拉框选择预定义样式,给标题设置一个Head类型的样式。
选中单元格,进行样式格式化。
父子格设置
引出:父子格是跟单元格扩展息息相关的概念,单元格的扩展是针对具体的某一个单元格,当报表主体中绑定了多个单元格时,这些单元格在扩展是否存在联系,
Comment
FineReport 支持两种类型的父子格设置。
- 左父格:单元格之间存在纵向扩展的关系时,设置左父格。
- 上父格:单元格之间存在横向扩展的关系时,设置上父格。
实例-分组报表
因为销量中对应的分组数据,可以直接在设计器中选中汇总,求和,展示出数据。
效果图:
实例-自由报表类型
当数据表中包含多个字段,这些字段的数据都要显示在报表中,如果将所有数据显示在报表的一行上,看起来会很拥挤。这个时候就可以做成自由报表,提高报表展示的美观度和可读性。
自由报表不像网格式报表或者分组报表那样规则,其特点是数据库表中的一条记录不是分布在一行上,而是散放在多行上,记录分块或者分页显示。
数据准备
新建数据集ds1,数据库中查询对话框中写入sql查询SELECT * FROM 订单
。
设置报表样式如下
并且将数据拖入相应的单元格中,格式化数据。
父子格设置
选中订单ID(B3)周围的单元格,选择单元格属性>扩展
,自定义这些单元格的父格为B3,并且纵向扩展。
效果展示:
层次坐标
概念
扩展单元格运算时需要使用层次坐标来表示单元格扩展后的表格位置。
相对层次坐标
相对位移坐标是用来描述目标单元格和当前单元格之间的位置关系的表达式。
注1:Cellx表示需要返回结果的单元格,Celly表示位移时参考的单元格。Cellx[Celly:-z]的运算逻辑:记录位移前Celly和Cellx的对应关系,记为关系1,当Celly完成-z个位置的位移后,按照‘关系1’返回对应的Cellx。
注2:相对后移需要使用“-”符号,相对前移需要使用“+”符号。
注3:z 代表相对位移的位置。
实例练习
绝对层次坐标
在进行报表设计时,单元格尚未扩展,但是其它单元格的计算表达式可能需要此单元格扩展后某个数据的精确位置,这时就需要使用绝对层次坐标精确表达该数据的位置。
C1[A1:2,B1:3]表示:取C1中与A1第2个单元格对应的所有B1单元格中的第3个相对应的那个单元格
层次坐标公式
注:A1 单元格纵向扩展,B1 单元格跟随 A1 单元格纵向扩展。
动态格间运算
概念:使用层次坐标进行跨行计算,跨组运算,集合运算等。
实例-
数据准备:新建数据集ds1,数据库查询对话框中写入sql查询语句。
SELECT STRFTIME('%m',订购日期) AS 月份,应付金额
FROM 订单
WHERE STRFTIME('%Y',订购日期)='2011'
单元格 | 操作 |
---|---|
A1~E1 | 单元格依次写入字段标题名:月份,应付金额,比较,占比,环比。选中 A1~E1 单元格,设置标题预定义样式为Head类型 |
A2 | 数据集中的数据列「月份」拖入到单元格中 |
B2 | 数据集中的数据列「应付金额」拖入到单元格中,并在单元格元素>数据设置中对单元格数据进行汇总>求和 |
C2 | 写入公式B2 - B2[A2:1] ,计算 B2 单元格扩展出来的数据,每一行与第一行的差值 |
D2 | 写入公式B2 / SUM(B2[!0]) ,计算 B2 单元格扩展出来的数据,每一行在总值中的占比 |
E2 | 写入公式IF(&A2 > 1, B2 / B2[A2:-1], 0) ,计算 B2 单元格扩展出来的数据,每一行与上一行的比率 |
实例-逐行
数据准备:新建数据集ds2,数据库查询对话框中写入sql查询语句。
SELECT STRFTIME('%Y',订购日期) AS 年份,STRFTIME('%m',订购日期) AS 月份,应付金额
FROM 订单
WHERE STRFTIME('%Y',订购日期) IN ('2010','2011')
主子报表
数据钻取
展示效果:
解决方案,可以使用超级链接功能,便捷的实现了数据钻取。
主子报表
**示例:**我们接着自定义报表的类型文件,进行进一步的学习,
并且双击A12的创建过滤条件,将订单id进行绑定。
为了不会出现不统一在一页的现象,右边属性面板选中``单元格属性>其他>分页,勾选
行后分页`。
效果图
(todo)嵌入式主子表
条件属性
**概念:**当单元格满足一定的条件时,对报表的样式做一些改变。
超级链接
**概念:**单元格设置超级链接指向另一个目标,报表预览时,点击单元格跳向指定的目标或实现某种效果,这个目标可以是另一种报表,一个网页,一张图片,一个电子邮件地址,一个文件甚至是一个应用程序等等。
commont超级链接的类型有八种,分别是:
- 网络报表
- 邮件
- 网页链接
- 动态参数
- JavaScript 脚本
- 图表超链-悬浮框图表
- 图表超链-联动单元格
- 图表超链-联动悬浮元素
报表设计进阶
分栏
分栏限制
- 冻结后分页失效
- 隐藏行列出现问题
- 不支持填报和数据分析预览
- 不支持自适应
图表
柱形图
🔴出现的问题?
-
分类与系列为同一字段会发生什么?
如果使用一般的柱形图的话,会出现偏移现象。可以选中为空的解决,但是会出现展示样式不好。
我们可以选择
堆积柱形图
来解决这个问题。 -
分类系列为空?
分类为空不显示该分类必须是该分类下的值全部为空。
系列为空与分类为空的一致
-
动态自定义最大值
-
当y轴数值相差较大时如何显示?
可以考虑使用对数
-
轴逆序
-
自定义标签格式
-
系列颜色
饼图
需求一:需要展示环形
折线图
如果系列名与分类名相同的话,分类名必须存在,系列名可以没有。
地图
性能优化
优化中避免的问题
分页预览
- sql取数慢,数据量过大
- 空白单元格不合理,父格导致的笛卡尔积
- Excel制作的模板
- 过多的条件属性和表格过滤
- 过多的公式计算,特别是sql函数
- 插入的图表和图片过多。
填报预览
- 控件数据字典sql过慢
- 大量控件设置为直接显示
- 一次性导入或填报大量数据
- 展示数据量太大,元素过多。
决策报表
-
过大的背景图片
可以采用
外置图片插件
,但是不支持远程控制 -
sql数据集过多,重复加载,数据量过大
-
元素过多,扩展图表使用过于频繁
优化建议
- 数据源
- 合理分析下控制需求
- 利用数据库或ETL工具清洗数据
- 优化数据集sql取数速度
- 开启共享数据集
- 安装性能插件并行取数
- 行式引擎
- 模板制作
- 同一父格和条件属性
- 过滤尽量放sql中处理
- 合理规划模板结构和元素
- 使用插件设置背景图片
- 分页sql
- 模板使用
- 通过参数控制数据量
- 合理控制模板并发
- 设置智能运维
- 考虑集群
致谢:
本文仅为了学习记录,方便以后复习所用。
内容借鉴https://help.fanruan.com/finereport/,
感谢帆软官方
。
大屏应用
大屏上手
基础
决策报表采用了画布式操作界面,专为大屏而生,通过简单的拖拽操作可帮助用户构建强大、全面的管理驾驶舱,在同一个页面整合不同的企业数据,完美的展示企业的各类业务指标,实现数据的多维度分析。
大屏制作准备
扩展图表
外置图片背景
表单内报表快刷新
大屏制作流程
可视化图表
图文组件
动态效果
实例-排版布局
效果图:
步骤,先创建一个决策报表,定义好数据集。
依次拖入各图表,绑定数据。根据每个图标的像素位置,去确定页面的排版
实例-配色
添加背景色,可以选择body,选择样式中的背景,然后选中刚才下载的好的外置图片。
发现,字体显示不清晰。
接下来去修改各个图表样式。
完毕后:
实例-动态效果
Springboot集成
https://bbs.fanruan.com/thread-133700-1-1.html
行式报表
修改颜色,背景
筛选过滤
行式报表排序
结果集筛选
分组报表
相邻连续
问题:如何在第二列相等的情况下也保持连续
汇总分组
动态分组
if(inarray($KaTeX parse error: Can't use function '$' in math mode at position 20: ….select(销售员))<=$̲TOPN,$,“其他”)
获取当前单元格中销售员再销售员列中的位置,将位置大于N的销售员更名为其他。
多数据源报表
简单数据源表
复杂数据源表
效果:
自定义各数据集的关联关系。