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,一经查实,立即删除!

相关文章

PLSQL Developer远程连接oracle数据库

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

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…

获取当前文件所在路径

代码 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两个指令提交文件到本地版本库做了详细的介绍,其实提交文件到版本库无非就是两个步骤,先将文件添加到暂存区,所有要提交的文件全部添加完毕,统一提交到版本库。那我们每一次提交都会生成一个…

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;     }  …

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

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

聚合复合_聚合复合微生物菌剂的功能

不点蓝字关注我飞走啦!在经营肥料上来讲,大家都知道做复合微生物菌剂,不仅可以活化疏松土壤,而且在各种作物上抗逆、防病、增产的效果都非常的好。问为什么说大家都要重点使用聚合微生物菌剂呢?答因为聚合微生物菌剂和…

代理模式详解(静态代理和动态代理的区别以及联系)

原文链接:https://www.cnblogs.com/takumicx/p/9285230.html 1. 前言 代理模式可以说是生活中处处可见。比如说在携程上定火车票,携程在这里就起到了一个代理的作用,比起我们在官网上或者直接去柜台订票,携程可以为用户提供更多人性化的选择。再比如代购,我自己的mb…

一个简单的HelloWorld程序

/* * 编译器:  VC6.0 * 类 型:  C语言 */ 1 #include <stdio.h>//#includes代表是C预处理指令,stdio.h代表是在此行位置键入了库文件stdio.h的完整内容,是标准输入输出头文件,< and >代表是直接从库文件加载stdio.h文件。2 3 intmain(void)//int代表此main…

sass 安装配置和使用

一、什么是SASSSASS在CSS的基础上做了一些扩展&#xff0c;使用SASS你可以使用一些简单的编程思想进来编写CSS。比如&#xff0c;SASS中可以定义变量、混合、嵌套以及 函数等功能。只不过SASS不像CSS&#xff0c;可以直接运用到项目中&#xff0c;如果你需要将样式运用到项目中…

为什么我的对象被 IntelliJ IDEA 悄悄修改了?

背景 最近&#xff0c;在复习JUC的时候调试了一把ConcurrentLinkedQueue的offer方法&#xff0c;意外的发现Idea在debug模式下竟然会 “自动修改” 已经创建的Java对象&#xff0c;当时觉得这个现象很是奇怪&#xff0c;现在把问题的原因以及解决过程记录下来&#xff0c;希望你…

​std::multimap

2019独角兽企业重金招聘Python工程师标准>>> std::multimap multimap,是一个关联性容器,用于存放这样的元素,这些元素是由键以及关联的值组成.容器内容将根据元素的键进行排序.并且容器可以插入多个具有相同键的元素.接口 pair<const_iterator,const_iterator>…

容器部署解决方案Docker

一、Docker简介 1.1 虚拟化 【什么是虚拟化】 在计算机中&#xff0c;虚拟化&#xff08;英语&#xff1a;Virtualization&#xff09;是一种资源管理技术&#xff0c;是将计算机的各种实体资源&#xff0c;如服务器、网络、内存及存储等&#xff0c;予以抽象、转换后呈现出来&…

BREW做的第一个程序--Hello world!

这几天开始做BREW开发了&#xff0c;刚开始挺晕的。又是C指针&#xff0c;又是BREW的SDK文档&#xff0c;还有环境配置&#xff0c;一大堆东东&#xff0c;真是让人手忙脚乱。好不容易配好了环境&#xff0c;写出了第一个Hello world!程序。感觉还不错&#xff0c;就把代码和想…

careercup-链表 2.1

2.1 编写代码&#xff0c;移除未排序链表中的重复节点。 不使用临时缓存&#xff1a; 如果不允许使用临时的缓存(即不能使用额外的存储空间)&#xff0c;那需要两个指针&#xff0c; 当第一个指针指向某个元素时&#xff0c;第二个指针把该元素后面与它相同的元素删除&#xff…

随机排列_“按字母顺序排列”其实是种随机顺序

闲话之前有聊过&#xff0c;微信公众号这边接的广告不多&#xff0c;主要收益来自于微信自带的中插广告。后来同学们还开玩笑说“研究半天没发现这个图片哪里没品了&#xff0c;才发现是广告。”另外还有一部分收益&#xff0c;来自于各位的打赏。鉴于大部分人都是打赏一两块钱…