效率低?响应慢?报表工具痛点及其解决方案
时间:2023-07-19 20:07:00
文章目录
-
- 一、痛点在哪里?
-
- 无尽的报告加剧了头痛
- 二、怎么办
-
- 准备写数据的集算器快速计算
- 完全工具化的应对是无穷无尽的
- 直接使用润乾报表更方便
-
- 报表直接使用集算器结果作为数据集,无缝对接
- 集算器函数也可用于报告,以提高开发效率
- 大报表功能,提高报表性能
- 三、结语
一、疼点在哪里?
许多朋友向我抱怨:使用报告工具不是为了解决手工开发报告效率低、困难多等令人头痛的问题吗?如何使用大型工具会头痛,因为功能不能解决这些问题?不,不,因为报告工具不对,或者姿势不对。
好的报表工具确实能很好地解决制表的困难,然而,报表开发的问题并不全在制表上,相当一部分在数据准备上,在应用程序中,80%的数据源和计算相对简单,许多简单SQL陈述已经完成,但在20%的情况下,数据准备工作并不那么容易。一些过程多步复杂的计算往往需要写长的多层嵌套SQL或者只有在存储过程中才能完成。如果数据源更复杂,则应混算各种数据源,不支持一些非关系数据库或文本数据源SQL那还得用JAVA等语言写,SQL 能写十几行的,JAVA迫不及待地,编码的难度和效率就更差了
然而,只有20%的报告需要硬编码来准备复杂的数据,这将占工作量的80%。这也是使用大品牌报告工具后头疼的最大原因:使用大品牌但缺乏数据准备功能的报告工具实际上是使用错误的报告工具,没有好的数据准备方案来补充。
无尽的报告加剧了头痛
报告随需而动的业务属性决定了其不稳定的特性。随时会出现新的查询统计需求,要么做新的,要么修改旧的。
做新的:如果你遇到复杂的计算,你必须硬写存储过程和JAVA如果没有好的办法,继续头痛
修改旧的:因为以前复杂的数据准备是存储过程或JAVA编写,导致报告模块、数据库和应用程序高度耦合,开发人员不能随意移动终端数据库,权限和安全是问题,更改存储过程将非常困难,JAVA代码可以随意更改,但更改后必须重新编译。应用程序必须反复停止。修改和维护也很头疼
这些无尽的报告使项目永远无法完成,高成本一直在增加。这是许多软件开发公司头疼的问题
二、怎么办
简单,只需添加数据准备工具。
准备写数据的集算器快速计算
集算器,流行的开源免费数据计算工具
一:它可以连接各种数据源
二:写起来容易SQL和JAVA很难写出计算过程,而且还算快,让数据准备工作变得轻松高效
我们来看两个小例
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() 函数根据位置取对应的姓名,就可以了
大报表功能,提升报表性能
润乾结合集算器独创的双异步线程方案,可以很好的解决清单式大报表的性能问题,比传统的数据库分页技术解决方案效果更好,更快
另外润乾报表一直以来都是报表行业的领导者,更是性价比高的代表,不仅质冠商用,而且价怼开源,1w一套,3w一年随便用,一套润乾报表,就可以解决所有烦恼了。
三、结语
头痛是因为现有的报表工具不能解决全部难题,耗费大量时间成本的、需要硬编码的复杂数据准备场景,就是目前很多项目上的大难题。解决这类频繁的、复杂的难题,关键的办法就是工具化,要么集成开源集算器,要么直接采用支持数据准备的润乾报表,难开发的就都简单了,效率也自然提升了,就不会再那么头痛了
润乾报表资料
- 润乾报表官网
- 润乾报表下载
欢迎对润乾报表有兴趣的加小助手(VX号:RUNQIAN_RAQSOFT),进技术交流群