润乾集算报表,集算器解决大数据交叉报表解决案例(方案)
来源:互联网 发布:淘宝上的中药丰胸 编辑:程序博客网 时间:2024/06/15 01:29
软硬件环境
OS:win7
Cpu:8核
集算报表:1120安装版
Jvm:1G
数据库:oracle11g
客户无法解决的问题:
有一个交叉汇总报表,其实格式很简单,行列各一个统计维度。但后台业务表的数据有175万条,且还要与其他表(大概在7w条左右)做join,如果由sql来处理,可以想象到会慢到什么程度,关键受各种条件影响,能否查出数据都是问题。
注:ACCORECEIVE表175w条数据
目前,测试birt需5分钟,借助各种中间表与视图。报表友商无法出表。
要求:能做出该报表在web展现,且重要的是速度要快,另外,数据(目前大概是5年数据)是实时增加的。
客户报表格式及目前所用sql:
报表格式:
Sql:
select LOCATIONS.loupan loupan,
LOCATIONS.LPORDERNUM,
nvl(ACCORECEIVE.RECEIVABLEAMOUNT, 0) yingshou,
chargeproct.Description CHARPNAME,
chargeproct.ordernum chordernum
from ACCORECEIVE,V_LOCATION_LP_LG_DY LOCATIONS,chargeproct
where ACCORECEIVE.Org_Id = LOCATIONS.Org_Id
and ACCORECEIVE.Sub_Org_Id = LOCATIONS.Sub_Org_Id
and ACCORECEIVE.Fk_Locationid = LOCATIONS.Locationid
and ACCORECEIVE.Fk_Chargeproctid = chargeproct.chargeproctid(+)
and ACCORECEIVE.Wf_Status not in('作废')
问题分析及解决方案
常规模式下,大数据要出交叉报表几乎很难,这里受sql效率慢、jvm等的影响,一次如果把所有数据全部取出则必然极大可能内存溢出。另外,大数据表再有join,即便能取,那取数速度上肯定也无法保证(sql join的效率低),上面sql中能体现出所有问题。
解决方案:
1、 为避免一次性取数内存溢出,可采用集算器游标cursor取数; --cursor
2、 去除不需要字段及join字段。分析后发现,客户实际不需要org_id、sub_org_id的关联;
3、 取数后可根据客户所出报表对应做数据处理,这里可groups处理一次分组汇总;--替代报表表达式group
4、 为摆脱sql join效率低问题,可将join放在集算器内处理,这里ACCORECEIVE与V_LOCATION_LP_LG_DY表(query即可,数据不大)分开取数; --switch连接
注:集算器中测试了两表sql中join,时间大概需5分钟。
5、 结合客户报表格式及所用的数据库表,可将上面sql中chargeproct表放到报表sql取数,因其仅体现显示值作用,且仅几十条数据。
集算脚本:
注:代码有每一步的作用说明
结论
润乾能出表且速度最快,客户联系人是非常满意的。对比:
1、 友商:无法出表,包含不做join仅单查业务表数据。
2、 Birt:客户说4、5分钟出表,虽无法验证,但个人有点怀疑;
3、 润乾:12s(多次测试)左右,(取数+报表展现)。 --因数据处理在集算器已完成,所以报表几乎无计算,报表计算及生成html(大概是20行+35列的单元格)基本不占用时间。
- 润乾集算报表,集算器解决大数据交叉报表解决案例(方案)
- 交叉数据报表
- 交叉数据报表
- 交叉数据报表
- 交叉数据报表
- 润乾设计器解决数据量大,访问多,报表多down掉,性能优化方案
- ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案
- ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案
- ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案
- 用服务器组件解决WEB交叉报表问题(1)
- 用服务器组件解决WEB交叉报表问题(2)
- web报表如何解决?
- FineReport报表乱码解决
- FineReport层式报表解决大数据集展示问题攻略
- 交叉报表
- 交叉报表
- 交叉报表
- 交叉报表
- FDQuery中SQL语句使用别名字段后无法更新到数据库
- ICPCCamp 2017-Day1 E.Lowest Common Ancestor(树链剖分/lct)
- 杂谈
- “玲珑杯”ACM比赛 Round #9 A -- Check-in Problem [因子个数]【数论】
- C#TabCotrol控件实现shift+tab的标签切换
- 润乾集算报表,集算器解决大数据交叉报表解决案例(方案)
- ACM题目练习积累
- JavaSE_18th_常用类——基础数据类型包装类
- java 中的printStackTrace()方法
- jQuery EasyUI, datagrid, treegrid formatter 参数比较 row index
- 【Java每日一题】20170213
- LINUX中的NFS配置
- 选择排序SelectionSort
- Spring事务管理(详解+实例)