反馈已提交

网络繁忙

FDL和FineReport组合应用示例

  • 文档创建者:Roxy
  • 历史版本:12
  • 最近更新:Roxy 于 2023-09-15
  • 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/ 「FineDataLink&FineBI组合方案」。

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


    附件列表


    主题: 最佳实践
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持