资讯详情

效率低?响应慢?报表工具痛点及其解决方案

文章目录

    • 一、痛点在哪里?
      • 无尽的报告加剧了头痛
    • 二、怎么办
      • 准备写数据的集算器快速计算
      • 完全工具化的应对是无穷无尽的
      • 直接使用润乾报表更方便
        • 报表直接使用集算器结果作为数据集,无缝对接
        • 集算器函数也可用于报告,以提高开发效率
        • 大报表功能,提高报表性能
    • 三、结语

一、疼点在哪里?

许多朋友向我抱怨:使用报告工具不是为了解决手工开发报告效率低、困难多等令人头痛的问题吗?如何使用大型工具会头痛,因为功能不能解决这些问题?

好的报表工具确实能很好地解决制表的困难,,在应用程序中,80%的数据源和计算相对简单,许多简单SQL陈述已经完成,但在20%的情况下,数据准备工作并不那么容易。一些过程多步复杂的计算往往需要写长的多层嵌套SQL或者只有在存储过程中才能完成。如果数据源更复杂,则应混算各种数据源,不支持一些非关系数据库或文本数据源SQL那还得用JAVA等语言写,SQL 能写十几行的,JAVA迫不及待地,编码的难度和效率就更差了

无尽的报告加剧了头痛

报告随需而动的业务属性决定了其不稳定的特性。随时会出现新的查询统计需求,要么做新的,要么修改旧的。

:如果你遇到复杂的计算,你必须硬写存储过程和JAVA如果没有好的办法,继续头痛

:因为以前复杂的数据准备是存储过程或JAVA编写,导致报告模块、数据库和应用程序高度耦合,开发人员不能随意移动终端数据库,权限和安全是问题,更改存储过程将非常困难,JAVA代码可以随意更改,但更改后必须重新编译。应用程序必须反复停止。修改和维护也很头疼

这些无尽的报告使项目永远无法完成,高成本一直在增加。这是许多软件开发公司头疼的问题

二、怎么办

准备写数据的集算器快速计算

集算器,流行的数据计算工具

imagepng

我们来看两个小例

1 报告需要持续上升超过 5 日股及上涨天数

制表时,这样的报表只需要设计几个网格,非常简单,但数据准备并不简单。这些数据的计算必须花费大部分工作量

用SQL如果算,要写三层查询。

select code,max(risenum)-1 maxRiseDays from  (  select code,count(1) risenum from   (     select code,changeSign,sum(changeSign) over(partition by code order by ddate) unRiseDays from     (         select                code,               ddate,               case when price>=lag(price) over(partition by code order by ddate)               then 0 else 1 end changeSign         from stock_record      )   )   group by code
       
        ,unRiseDays 
        ) 
        group 
        by code 
        having 
        max
        (risenum
        ) 
        > 
        5 
       

用开源的集算器去写则简单很多

A
1 =connect@l(“orcl”).query@x(“select * from stock_record order by ddate”)
2 =A1.group(code)
3 =A2.new(code,~.group@i(price < price[-1]).max(~.len())-1:maxrisedays) 计算每只股票的连续上涨天数
4 =A3.select(maxrisedays>=5) 选出符合条件的记录

2 列出每一个用户最近一次登录间隔

SQL的大致写法

WITH TT AS
	(SELECT RANK() OVER(PARTITION BY uid ORDER BY logtime DESC) rk, T.*  FROM t_loginT)
SELECT uid,(SELECT TT.logtime FROM TT where TT.uid=TTT.uid and TT.rk=1)
		-(SELET TT.logtim FROM TT WHERE TT.uid=TTT.uid and TT.rk=2) interval
FROM t_loginTTTT GROUP BY uid

开源集算器的写法

A
1 =t_login.groups(uid;top(2,-logtime)) 最后2个登录记录
2 =A1.new(uid,#2(1).logtime-#2(2).logtime:interval) 计算间隔

一两个难的可能省不了多少时间,常年累月做项目,那么多复杂的计算场景如果都用开源的集算器,能省下多少时间呢

完全工具化应对没完没了

洗衣机发明之前,每一次洗衣服,都是一次头痛的经历

洗衣机发明之后,洗多少次,都不发愁了

工具化,才是解决频繁,复杂劳动的好办法

没完没了的报表新需求和修改要求是消除不了的,也必须用工具化的方法才能解决

,就是报表工具本身,解决了频繁做表效率低下的问题

,就是集算器,则可以解决频繁的,困难的数据准备的问题

全面的工具化,才能彻底解决从数据准备到报表制作的所有头疼问题

另外使用集算器代替存储过程和JAVA后,由于集算器的脚本是写在报表文件里或者和报表文件一起存储的,这样就可以把报表应用从数据库以及整个应用中解耦出来,集算器的脚本又是解释执行的,天然拥有,也可以省去频繁修改时每次编译的麻烦

对于集算器协助报表开发感兴趣的同学可以参考 http://c.raqsoft.com.cn/article/1639703872560

直接用润乾报表更便利

润乾报表已经集成了集算器,可以直接使用集算器的相关功能,不仅省去了集成的麻烦,而且还有额外的便利

报表直接使用集算器结果做数据集,无缝对接

报表中还能使用集算器函数,提升开发效率

还可以在报表的单元格里直接使用集算器中一些高级的函数,让计算过程更加的简便,提升报表本身的开发效率

比如下面这个单元格表达式:

表达式:=“班级名次上升最快的三位同学是:”+string(esproc(“?.m(?.ptop(-3))”,B3{},K3{})),这个单元格,有多种做法,可以像排名那样,先对名次变化幅度做个排名,然后再根据幅度排名获取前三位,但是这种做法要增加辅助单元格,计算过程稍显繁琐,但是直接用集算器的高级函数就很简单了,将 K3 单元格(名次变化幅度)传入,ptop(-3) 取最大的 3 位的位置,然后用 m() 函数根据位置取对应的姓名,就可以了

大报表功能,提升报表性能

润乾结合集算器独创的双异步线程方案,可以很好的解决清单式大报表的性能问题,比传统的数据库分页技术解决方案效果更好,更快

另外润乾报表一直以来都是报表行业的领导者,更是性价比高的代表,不仅质冠商用,而且价怼开源,

三、结语

头痛是因为现有的报表工具不能解决全部难题,耗费大量时间成本的、需要硬编码的复杂数据准备场景,就是目前很多项目上的大难题。解决这类频繁的、复杂的难题,关键的办法就是工具化,要么集成开源集算器,要么直接采用支持数据准备的润乾报表,难开发的就都简单了,效率也自然提升了,就不会再那么头痛了

  • 润乾报表官网
  • 润乾报表下载

欢迎对润乾报表有兴趣的加小助手(VX号:RUNQIAN_RAQSOFT),进技术交流群

标签: selet传感器b08系列

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台