历史版本11 :FDL和FineReport组合应用示例 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

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_年度资产分类表」复杂的SQLSQL 较复杂,开发时间较长,且报表数据集前端展示加载时间较长

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/ 「场景案例>帆软产品组合应用」下「FDL&FR组合应用」。

报表模板参见:销售库存周转.frm