1. 概述
1.1 背景
某集团长期使用 Finereport 制作报表看板,开发人员小A 在使用过程中发现一些问题:
由于使用 FineReport 直连业务库,通过复杂sql实现报表取数,导致前端报表展示速度较慢;
不支持直接跨数据库取数,需要通过单元格关联,开发成本高、取数也比较缓慢;
报表数据集无法被引用和关联,无法进行数据集的复用。
本文主要介绍业务系统数据经过FDL处理落库后,FineReport调用该数据进行报表开发的全流程,通过FDL+FR的组合方案解决以上三个问题。
1.2 思路
通过 FineDataLink 对需要复杂 SQL、跨数据库关联等的数据进行处理并输出到应用数据库;
然后直接使用处理好的数据进行 FineReport 报表开发;
使用 FineDataLink 可视化的操作界面和便捷的功能,简化 FineReport 数据加工和处理步骤,提升看板的前端展示速度,同时数据集可以进行复用,提高报表开发速度。
2. 实现方法
2.1 场景说明
FRDemo 数据库中存放着「S订单」、「S订单明细」、「销售明细」、「FD_年度资产分类表」四张表。
现在希望对这些数据进行处理并用处理好的数据进行报表展示。
数据表 | 处理要求 | 问题 |
---|---|---|
「S订单」、「S订单明细」 | 跨数据库关联 | 原先只能通过复杂的程序代码实现 |
「销售明细」 | 列转行处理 | SQL 较复杂,开发时间较长 |
「FD_年度资产分类表」 | 复杂的SQL | SQL 较复杂,开发时间较长,且报表数据集前端展示加载时间较长 |
2.2 方案说明
1)将复杂sql处理、跨库关联等步骤放在 FineDataLink 中进行,对数据库 FRDemo 中存在数据表进行如下操作:
将 FRDemo 数据库中的「S订单」和FDLDemo数据库中的「S订单明细」数据通过「订单ID」主键关联后,输出到FDLDemo应用库;
将 FRDemo 数据库中的 「销售明细」进行列转行后,根据业务要求按照不同维度进行统计,并输出到FDLDemo应用库;
将 FRDemo 数据库中的「FD_年度资产分类表」进行复杂 SQL 处理后输出到 FDLDemo 应用库;
2)在 FineDataLink 中,通过将三个任务设置统一的调度周期进行管理,保证该数据定时更新到 FDLDemo 应用库;
3)使用 Finereport 设计器连接 FDLDemo 应用库,使用简单SQL语句进行取数后,制作报表。
3. 操作步骤
3.1 跨数据库关联
将 FRDemo 业务库中的「S订单」和 FDLDemo 数据库中的「S订单明细」数据通过「订单ID」主键关联后,落库到 FDLDemo 应用库中。
1)新建 ETL 任务命名为「跨库关联」,使用数据转换,将FRDemo 业务库中的「S订单」和 FDLDemo 数据库中的「S订单明细」数据取出,便于后续进行数据关联,如下图所示:
2)新增「数据关联」算子,将两个数据表输入算子连接至数据关联,进行跨库关联制作新的数据表,设置连接方式和连接字段,如下图所示:
点击预览即可查看跨数据库关联后的数据表,如下图所示:
3)对关联好的数据表进行字段设置,比如去掉重复的合并依据「订单ID1」等等,如下图所示:
4)将制作好的跨数据库取数数据表命名为「dingdanxiangxi」并输出到「FDLDemo」数据库中,如下图所示:
3.2 数据列转行
将 FRDemo 数据库中的 「销售明细」进列转行后,根据业务要求按照不同维度进行统计,并输出到 FDLDemo 数据库。
列转行希望实现的效果对比如下图所示:
1)新建 ETL 任务命名为「数据列转行」,使用数据转换,将FRDemo 业务库中的「销售明细」取出,便于后续进行行转列处理,如下图所示:
2)对「销售明细」数据进行行列转换,将二维表地区销售数据转为一维表,如下图所示:
3)此时希望对已经列转行的数据继续进行处理,计算每个城市的总销售金额,可以使用Spark SQL,编写 SQL 语句,如下图所示:
得到每个城市的总销售金额,点击「数据预览」,如下图所示:
4)将处理好的数据命名为「sum_xs」并输出到 FDLDemo 数据库中,如下图所示:
3.3 复杂 sql 查询
将 FRDemo 数据库中的「FD_年度资产分类表」进行复杂 SQL 处理后输出到 FDLDemo 应用库,以此减轻设计器直接取数造成的加载缓慢问题。
1)新建 ETL 任务,添加数据同步,在数据来源中新增较复杂的 SQL 语句进行取数,如下图所示:
2)将查询好的数据命名为「zichanbiao」,输出至 FDLDemo 数据库中,如下图所示:
3.4 设置调度周期管理任务
三个任务均设计完成,此时希望能定时进行数据更新,就需要设计调度周期,对任务进行管理。
设计思路:
1)新建 ETL 任务命名为「FDL&FR组合应用」,添加调用任务,命名为跨库关联,即调用了操作步骤中跨数据库关联的任务,如下图所示:
同理,对数据列转行和复杂查询同样设置调佣任务,如下图所示:
2)新增消息通知,设置若三个任务执行失败,则通知某个任务执行失败,如下图所示:
${prepose.failedInfo} 为内置参数,详情参见:内置参数
3)使用连线将三个任务与失败执行的消息通知相连,设置在任务执行失败时,执行「消息通知-失败执行」,如下图所示:
3)同理,设置任务执行成功时的消息通知,如下图所示:
${prepose.successInfo}为内置参数,详情参见:内置参数
4)设置任务的执行频率,如下图所示:
3.5 执行任务
设置完成后,即可保存并运行任务,如下图所示:
3.6 FineReport 直接取数制作报表
使用 FineReport 设计器连接 FDLDemo 数据库,取出跨库关联数据表「dingdanxiangxi」、列转行数据表「sum_xs」、复杂查询数据表「zichanbiao」,如下图所示:
截图为dingdanxiangxi,其他数据表同理。
制作报表,如下图所示:
4. 效果查看
FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 「FineDataLink&FineBI组合方案」。
报表模板参见:销售库存周转.frm