怎么优化查询效率

一张报表有个功能需要现在版本去和之前的版本数据做对比,如果当前版本1月份数据大于之前版本一月份数据,则变色,现在我的思路是在条件属性里面去判断,获取上个版本一月份的值和当前版本一月份的值做对比,但是一共有24个字段,权责1-12月,收付1-12月,这样写在条件属性里面,数据大的时候跑不出来,两三行还可以,有没有好的优化思路,求点拨。

image.png

FineReport yzm216333 发布于 2022-5-15 10:48
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
FryangLv3见习互助
发布于2022-5-15 11:42

写到条件格式里,会导致查询数据库次数过多,每个条件格式都会去查询,有24个单元格就至少要24次查询。不单纯是条件格式里的SQL怎么写的问题了。

建议在做表单时,将要对比的数据全部查询出来填充表格后,条件格式里只写单元格值之间进行比较,就不用再去查询了。至于有些不想显示的数据隐瞒掉。

  • yzm216333 yzm216333(提问者) 意思是在数据集中查询查来上个版本的值,然后字段也放在表单里(上个版本隐藏单元格),去比较现在的和之前版本的单元格值吗?
    2022-05-15 14:14 
  • Fryang Fryang 回复 yzm216333(提问者) 是这个意思,上个版本权责一列,这个版本权责一列,这样查询可以上个版本查一次,这个版本查一次,然后写条件公式也好写
    2022-05-15 14:48 
  • yzm216333 yzm216333(提问者) 回复 Fryang 有没啥好办法不用把上个版本拖出来然后在隐藏,在数据集或者数据库处理好,然后根据条件公式去判断,显示还是只显示这个版本的值
    2022-05-15 14:52 
  • Fryang Fryang 回复 yzm216333(提问者) 应该也可以,就是查询语句写起来相对比较复杂。上个版本的值与这个版本的值联接进行查询,可以得到是增加或是减少,如果不想结果额外个字段,你要取的数又都是正数的话,可以在查询语句中进行处理,比如这期比上期减少了,就在数前面加负数。最后显示的时候,条件格式根据数的正负判断改变颜色,显示以形状公式绝对值显示。
    2022-05-15 15:30 
  • yzm216333 yzm216333(提问者) 回复 Fryang 如果当前版本大于之前版本是正数,但是当前版本等于之前版本取出来的也是正数(录入的数据都是正数),判断颜色不太好判断
    2022-05-15 17:51 
最佳回答
0
用户6NWif5139660Lv6资深互助
发布于2022-5-15 11:10(编辑于 2022-5-15 11:10)
性能优化简介https://help.fanruan.com/finereport/doc-view-435


性能优化插件https://help.fanruan.com/finereport/doc-view-2612

最佳回答
0
fiskerLv4见习互助
发布于2022-5-15 13:42

SQL函数适合整体一次性取出数据,且每次查询一行时都会执行数据库全量遍历

还是在数据集或者数据库中做联表处理,再到FB中做展示

  • yzm216333 yzm216333(提问者) 意思是在数据集中查询查来上个版本的值,然后字段也放在表单里(上个版本隐藏单元格),去比较现在的和之前版本的单元格值吗?
    2022-05-15 14:15 
  • fisker fisker 回复 yzm216333(提问者) 需要查询的数据为一个表,现在的数据为一个表,根据需要比较的维度和细粒度设置索引或关联字段,然后形成业务宽表,然后再到FR中进行展示
    2022-05-15 14:23 
  • yzm216333 yzm216333(提问者) 回复 fisker 现在不同版本的数据都放在了同一张表里,现在的数据可以通过关联字段得到上一个版本数据,按照你这个思路是在数据库里处理好,到时候报表设计界面还是只要放置现在的24个字段,不需要把之前的也放上来隐藏比较?
    2022-05-15 14:36 
最佳回答
0
全栈数据Lv6初级互助
发布于2022-5-15 13:45

肯定不能照你这样做。你这样在条件属性里面直接用sql公式判断,相当于每行都要执行一遍sql,数据一大肯定效率很低。建议先把两个版本的数据都展示是单元格中,在条件属性中通过月份将两个版本的数据关联成一行。条件属性执行用户两列单元格大小进行比较就行,这样报表执行效率会很快。

  • yzm216333 yzm216333(提问者) 意思是在数据集中查询查来上个版本的值,然后字段也放在表单里(上个版本隐藏单元格),去比较现在的和之前版本的单元格值吗?
    2022-05-15 14:15 
  • 全栈数据 全栈数据 回复 yzm216333(提问者) 是的,这样效率才高,查询只用执行一次
    2022-05-15 15:23 
  • 4关注人数
  • 589浏览人数
  • 最后回答于:2022-5-15 13:45
    请选择关闭问题的原因
    确定 取消
    返回顶部