因为使用了错误的报告工具,或者没有使用正确的姿势。
疼在哪里?
报告工具不是为了解决手工开发报告效率低、难度大等令人头痛的问题吗?如何使用大型工具会头痛,因为功能不能解决这些问题?
不,并不是
好的报表工具确实可以很好地解决制表方面的困难,
,在应用程序中,80%的数据源和计算相对简单,许多简单SQL陈述已经完成,但在20%的情况下,数据准备工作并不那么容易。一些过程多步复杂的计算往往需要写长的多层嵌套SQL或者只有在存储过程中才能完成。如果数据源更复杂,则应混算各种数据源,不支持一些非关系数据库或文本数据源SQL那还得用JAVA等语言写,SQL 能写十几行的,JAVA迫不及待地,编码的难度和效率就更差了
无尽的报告加剧了头痛
报告随需而动的业务属性决定了其不稳定的特性。随时会出现新的查询统计需求,要么做新的,要么修改旧的。
如果又遇上复杂计算的,那就又得硬写存储过程和JAVA如果没有好的办法,继续头痛
因为以前复杂的数据准备是存储过程或JAVA编写,导致报告模块、数据库和应用程序高度耦合,开发人员不能随意移动终端数据库,权限和安全是问题,更改存储过程将非常困难,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 | =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() 函数根据位置取对应的名称,就可以了
大报表功能,提高报表性能/h4> 润乾结合集算器独创的双异步线程方案,可以很好的解决清单式大报表的性能问题,比传统的数据库分页技术解决方案效果更好,更快
另外润乾报表一直以来都是报表行业的领导者,更是性价比高的代表,不仅质冠商用,而且价怼开源,
结语
头痛是因为现有的报表工具不能解决全部难题,耗费大量时间成本的、需要硬编码的复杂数据准备场景,就是目前很多项目上的大难题。解决这类频繁的、复杂的难题,关键的办法就是工具化,要么集成开源集算器,要么直接采用支持数据准备的润乾报表,难开发的就都简单了,效率也自然提升了,就不会再那么头痛了
润乾报表资料
- 润乾报表官网
- 润乾报表下载
欢迎对润乾报表有兴趣的加小助手(VX号:RUNQIAN_RAQSOFT),进技术交流群