一张填报报表用了多个sql函数,这个报表既可以填报,也可以填报完查看,导致加载很慢

一张填报报表用了多个sql函数,这个报表既可以填报,也可以填报完查看,导致加载很慢,有没有别的函数或者别的方法,可以比这种sql函数速度快一些,我想过查看就是查看,填报就是填报,业务那边就想要这种方式

image.png

FineReport 罗罗诺亚索隆 发布于 2025-6-30 15:29
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
snrtuemcLv8专家互助
发布于2025-6-30 15:35

可以的话,直接用数据集数据啊

或者用value()函数也会比sql()快很多

  • 罗罗诺亚索隆 罗罗诺亚索隆(提问者) 他是判断cg3为空,如果为空查一个sql,不为空查另一个sql,
    2025-06-30 15:59 
  • snrtuemc snrtuemc 回复 罗罗诺亚索隆(提问者) 可以同样两个数据集,判断后,取不同数据集数据就可以啊
    2025-06-30 16:00 
  • 罗罗诺亚索隆 罗罗诺亚索隆(提问者) 回复 snrtuemc value这种改变了参数会重新查数据吗
    2025-06-30 16:12 
  • snrtuemc snrtuemc 回复 罗罗诺亚索隆(提问者) 这个不会,是加载结束后就不变了,你有这个需求,只能sql()函数,那就没办法优化了,建议填报查询分开两个模板吧
    2025-06-30 16:14 
  • 罗罗诺亚索隆 罗罗诺亚索隆(提问者) 回复 snrtuemc map 这个函数可以吗,主要业务不想分开
    2025-06-30 16:33 
最佳回答
0
ID1208Lv6高级互助
发布于2025-6-30 15:41

都到CG3之后了,这个表应该很宽...

想办法将结构拆开吧,根据CG3的值,将后面的内容做成两部分,条件展示,然后自定义保存,数据展示用数据集,这样速度会快一些

  • 罗罗诺亚索隆 罗罗诺亚索隆(提问者) 他是判断cg3为空,如果为空查一个sql,不为空查另一个sql,
    2025-06-30 15:59 
  • 罗罗诺亚索隆 罗罗诺亚索隆(提问者) 您的意思是做成3个单元格,第一个单元格取根据条件取后面两个单元格数据吗,后面两个单元格从数据集取数
    2025-06-30 16:01 
  • ID1208 ID1208 回复 罗罗诺亚索隆(提问者) 拆成两个数据集,一个是为空对应的sql,一个是不为空的,相当于是两套数据
    2025-06-30 16:02 
  • 罗罗诺亚索隆 罗罗诺亚索隆(提问者) 回复 ID1208 数据集这种,就是他改变了某个值,还会重新查吗,因为他还要填报
    2025-06-30 16:12 
  • ID1208 ID1208 回复 罗罗诺亚索隆(提问者) 是有控件联动?单纯的显示数据,数据集是ok的
    2025-06-30 16:16 
最佳回答
0
技术支持--哈哈Lv4初级互助
发布于2025-6-30 15:41

SQL函数的性能较差,当数据量大时会导致加载缓慢。您的报表同时支持填报和查看功能,使用多个SQL函数会加剧性能问题。

优化方案
  1. 替换SQL函数

    • 优先使用value()函数替代sql()和ds1.select()函数,因为value()的性能最好

    • 示例:将sql("ds1","select name from table")改为value("ds1","name")

  2. 分离查看和填报功能

    • 虽然业务希望保持现有方式,但可以考虑:

    • 为查看功能单独创建一个模板,使用优化的查询方式

    • 填报模板专注于数据录入功能,减少复杂查询

  3. 使用抽数缓存

    • 建议可以使用抽数缓存功能优化取数速度

    • 对频繁查询但变化不大的数据启用缓存

  4. 优化SQL查询

    • 确保SQL语句本身高效,添加适当的索引

    • 通过查询条件限制每次查询的数据量

  5. 条件控制

    • 根据当前是查看还是填报模式,动态控制哪些SQL函数需要执行

    • 可以使用参数来控制是否执行某些耗时的查询

性能对比
函数类型性能排名适用场景
value()最优简单数据查询
ds1.select()中等中等复杂度查询
sql()最差复杂查询(尽量避免)

建议优先尝试用value()函数替换现有的sql()函数,这通常能带来最明显的性能提升。如果必须使用复杂查询,再考虑其他优化方案。

  • 4关注人数
  • 48浏览人数
  • 最后回答于:2025-6-30 15:41
    请选择关闭问题的原因
    确定 取消
    返回顶部