access如何设置定期报表汇总_报表工具选型对比系列 - 大报表

有些报表查询出的数据行数可达千万甚至上亿,这类报表通常被叫做大报表,大多数情况下都是些清单明细数据报表,也有少量分组报表。

针对大报表,如果像常规报表一样,将数据一次性全取再交给前端呈现是不可行的。一是等待时间太长,用户体验差;二是很可能导致内存溢出造成应用崩溃。

那么,目前的报表产品是如何解决这一问题的呢?本文将调研并测试几款报表产品的大报表解决方案,还是针对这三款产品:润乾报表、帆软报表、Smartbi,均为最新版本。

首先了解下各家的解决方式或机制。

解决机制

帆软

帆软提供两种引擎,行式引擎专门解决明细大报表,新计算引擎可解决行式引擎及其不支持的一些情况(如某些数据库需手写分页 SQL 的问题、分组大报表、带汇总的分组报表等)。

行式引擎

实现原理是借助分页 SQL 按页取数,访问哪一页数据则取对应数据计算并呈现,所以也只能支持数据库源了。并且只有少部分数据库可以不改动 SQL 的情况下支持分页取数: Oracle,MySQL,HSQL 和 SQL Server 2012 及以上数据库。像其他的 access、SQL Server 2005 及 2008 等,必须手动编写分页 SQL 才能实现按页取数。可以看个例子感觉难易度:

原始 SQLselect * from 订单明细

SQL Server 2008 下的分页 SQL 为:

SELECT *
FROM (
SELECT TOP ${ if(fr_pagenumber == int((((fr_rowcount-1)/fr_pagesize)+1)),fr_rowcount - (fr_pagesize*(fr_pagenumber-1)),fr_pagesize) } *
FROM(
SELECT TOP ${fr_pagesize*fr_pagenumber} *
FROM 订单明细
ORDER BY 订单ID ASC
) AS e1
ORDER BY 订单ID DESC
) AS e2
ORDER BY 订单ID ASC

注:不同的数据库,写法不同。

新计算引擎

新计算引擎可以替代行式引擎的功能,使得做报表变的简单,比如对于 SQL Server 较低版本,不用再单独写分页 SQL,新计算引擎会把原本 SQL 处理成分页 SQL。但是原理不完全一样,行式引擎是按页取数(页面大小或页行数),新计算引擎则是每次按 1024 条(不支持自定义)为一个区间分批取数。

报表格式上也能支持分组大报表、带汇总的分组表。

帆软这两个引擎都是借助数据库分页机制,仅支持 SQL 数据源。新计算引擎的优势在于可以让定义 SQL 时更简单,如上面所提到的明细大报表按页取数手写分页 SQL 的问题,新引擎不用自己搞了。

使用数据库分页有几个共同的缺点:1、频繁反复翻页时效率很差,特别是靠后的页,对数据库造成很大压力;2、可能出现数据不一致(两次执行取数 SQL 之间有插入、删除动作);3、不支持其他类型数据源。

Smartbi

Smartbi 只能借助数据库 SQL 分页,因此仅支持 SQL 数据源,且报表格式仅支持明细报表,该机制缺点同帆软。

润乾

两阶段双异步线程

可参考下图

f9273593b4e50b3eb5f93363f317c12f.png

以 SQL 数据源为例,取数和呈现采用两个异步线程,取数线程发出 SQL 后,游标方式不断取出数据缓存到本地磁盘,由呈现线程从本地缓存中获取数据进行显示。这样,已经取出并缓存的数据就能快速呈现,不再有等待感;而取数线程所涉及的 SQL,在数据库中保持同一个事务,也不会有不一致的问题,数据库分页机制的两大问题(SQL 分页数据不一致、翻页效率差)都可以完美解决。

采用该机制,首页可实现秒级响应,缓存是在硬盘,内存占用小,可有效避免内存溢出。

另外,该机制同样支持非 SQL 数据源,包括文件数据源、noSQL 数据源、接口数据源等。

同时,报表格式上支持明细大报表、带汇总及分组大报表等,具体做法这里不再赘述,有更详细的文章介绍: 如何实现海量数据清单和分组报表

用例及测试结果

用例

通过以上了解的各产品支持情况,我们用大家都支持的大数据明细报表做个对比,看看首页呈现、翻页等的效率及体验。

数据库:MySQL 5.7

“各城市产品销售表”,620 万条 *6 列数据。

f489b6c2eeabd23e0dd070112916c420.png

JVM:可用 1G,数据无法全部加载。

测试结果

报表按照每页 30 行 *6 列呈现。

4d20332010cec4c3d1fb40e9f48324a1.png

从测试结果可以看出,润乾的首页加载及翻页体验最好,均可做到秒级响应。

帆软次之,看测试结果的话,新计算引擎体验上比行式引擎要好,但是目前功能不完善,如分页仅支持按页面大小,不支持其他方式等。在后面测试分组报表时也对这些不完善得到了印证,查询靠后的页码时,因 SQL 时间执行过长挂掉了,即便改了系统等待 SQL 执行时间,那也没法用了,等待时间太长,体验太差。这些问题在帆软官方客服那里也能被确认,新计算引擎新推出不久(看文档,貌似也近一年时间了),功能不完善,很多都是需要优化的状态。

Smartbi 也是数据库分页机制,但表现很差(尝试降低查询总数据量到 26 万,也需要 25s 左右),按测试用例结果来看,几乎是没法用的。

分组报表

Smartbi 直接不支持分组大报表,帆软在翻页时几乎没法用,只有润乾可以正常实现,这样就无法实施对比了。润乾实现方法可参考: 海量清单与分组报表的实现

性能测试结论

本篇之前还有三篇材料:

报表工具选型对比系列 - 多源关联性能
报表工具对比选型系列 - 容量及相关性能
报表工具对比选型系列 - 页面渲染性能

我们从四个方面对这三款报表工具进行了深入的性能测试对比。基本上每篇的结论都相同,即润乾报表的性能和容量最好、内核引擎最优;帆软次之,每个对比项上均有差距,但大部分项目差距并不算大。这两款均可以算作第一档次的报表工具,基本可以胜任大部分大容量和高性能场景。而 Smartbi 在性能容量方对比润乾和帆软则有明显的差距,面对大容量和高性能场景只能勉强甚至无法应对,能力要弱一个档次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CuteEditor—Html在线编辑器的领航者,超强的asp.net编辑器控件

CuteEditor—Html在线编辑器的领航者 NET、ASP.NET控件及源码大汇总 http://bbs.topsage.com/dispbbs.asp?boardid123&Id145465转载于:https://www.cnblogs.com/asingna/archive/2009/12/02/1615334.html

PLSQL Developer远程连接oracle数据库

前提是本机已经安装oracle,利用 net configuration assistant 。若本机没有安装oracle,无需装oracle的方法请点我打开net configuration assistant,选择“本地网络服务名配置,如下图所示然后选择添加服务名选择远程数据库实例名主…

【转】漫画:Bitmap算法

漫画:Bitmap算法转载于:https://www.cnblogs.com/apeway/p/10786283.html

广州 adobe 技术者开发日回归

今天,adobe 在广州举行了adobe 技术者开发日,一大早就起来搭车赶到广州去参加这次活动。这次活动,参加人数很多,不完全统计基本有200以上人,真是很难得一次聚会。在这次大会上7yue 发表很多讲话,还有adobe …

spad 探测器_大面阵SPAD阵列集成微透镜阵列,填充因子改善明显

基于CMOS制造工艺可实现大面阵、单片式单光子雪崩光电二极管(SPAD)阵列,并受到如3D成像、荧光寿命成像等各种应用的青睐,但常常受到低填充因子(fill factor,指感光区域面积与像元面积的比值)的困扰。SPAD填充因子的数值通常小于5%&#xff0c…

Azure Backup 简介

ViswanathTata云Enterprise 项目经理AzureBackup是 Azure恢复服务的一部分,在安全高效的环境中对上传到 Azure的数据提供简单可靠的管理和保护。Azure Backup以经济高效的方式提供无限的存储空间和长期的数据保留,这些功能使其成…

笔记:Java虚拟机运行时数据区

Java虚拟机在执行Java程序的过程中会把它管的内存划分为以下若干个不同的区域: 1、程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器;由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时…

高电压技术思维导图_钢铁技术:钢铁行业板坯连铸结晶器振动常见故障思维导图...

钢铁虾:(您距离钢铁虾只差关注)结晶器是连铸机的心脏,其振动偏差直接危及连铸过程的生产安全,其振动精度也往往与铸坯表面裂纹等缺陷息息相关。国内外常见板坯连铸结晶器振动形式有:①机械式振动;②双液压缸式振动&…

可以编辑vga格式文件的软件-PowerCreator Media Studio

vga格式的课件越来越多。不小心没有录制好的可见,想修改一下找了很久居然没有找到一个合适的软件。还有朋友给了一款:PowerCreator Media Studio用起来很方面,和premiere的操作很像。大赞。 安装后自带可以播放vga格式的播放器。 转载于:htt…

企业生产场景如何对CentOS进行分区

前言:我们买房子时,会考虑1室1厅,2室1厅,或3室2厅......!那么具体如何选,是要看手中的money和家庭的人口数量。同理,服务器操作系统在分区时也是如此,到底分3个区,4个区&…

获取当前文件所在路径

代码 1 unitUnit1;2 interface3 uses4 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,5 Dialogs, StdCtrls;6 type7 TForm1 class(TForm)8 Button1: TButton;9 Button2: TButton;10 procedureButton1Click(Sender: TObject);11 procedureButton2…

删除隐藏版本信息 版本回退_git之版本穿梭术

上一篇主要针对使用git add和git commit两个指令提交文件到本地版本库做了详细的介绍,其实提交文件到版本库无非就是两个步骤,先将文件添加到暂存区,所有要提交的文件全部添加完毕,统一提交到版本库。那我们每一次提交都会生成一个…

objective-c(初始化)

objective-c(初始化) 创建对象 (编程语言 Objective-C 2.0) 1.类对象与实例化 类的定义完成后,编译器在内存中自动生成唯一的类对象,实例对象都是通过调用类对象的类方法生成的。 类对象是工厂,同时也是蓝图,实例对象是…

使用sphinx快速为你python注释生成API文档

sphinx简介sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发。新版的Python3文档就是由sphinx生成的,并且它已成为Python项目首选的文档工具,同时它对C/C项目也有很好的…

c#中使用ref和out传值

c#中使用ref和out传值 首先,如果不使用这两个关键字,那是什么样 呢?看下面的例子:使用ref:using System; class Test {     static void Swap(ref int x, ref int y)     {         int temp x;         x y;         y temp;     }  …

python临床数据_从临床试验中获取数据

我正在开发一个小Python函数来从clinicalTrials.gov中获取数据。从每个研究记录中,我想从中找出研究的目标条件。例如,对于this研究记录,我需要以下内容:conditions [Rhinoconjunctivitis, Rhinitis, Conjunctivitis. Allergy]然…

Jass 技能模型定义(转)

Jass是什么?先阐释一下什么是jass吧,百度:JASS(正确地说是JASS 2)是魔兽3的程序语言,用于控制游戏和地图的进行,也是魔兽游戏和地图的基础。 地图编辑器中摆放的单位(Unit),区域(Reg…

[原]第一次遭遇Oracle的Bug,纪念一下 |ORA-00600 kmgs_pre_process_request_6|

今天尝试调整一下Oracle的Large Pool Size,希望使rman的速度提升, alter system set large_pool_size80m ; 突然Oracle 实例挂掉了,查看alert file 发现如下 Wed Dec 16 11:14:49 2009 Errors in file /u01/app/admin/mydb/bdump/mydb_mman_…

表格过滤器_不用记账软件也可以记录支出明细,这个在线协同表格很方便

像我们这种中小团队,以前就用 Excel 来记录团队日常的一些支出情况,虽然有很多模板可以套用,但感觉还是有些不便之处,比如在表格里无法记录太多文字;添加发票凭证也不方便;对于不同数据的切换查看也缺乏灵活…

喜马拉雅第三方客户端开发(接口和接口数据解析)。

前言:最近闲来无事,看了网上豆瓣的第三方客户端,手有点痒,决定自己动手开发一个客户端,比较了荔枝和喜马拉雅,决定开发喜马拉雅的第三方客户端。 客户端使用了WPF开发。 1.抓取接口; 首先得解决…