掌桥专利:专业的专利平台
掌桥专利
首页

报表生成方法、装置、电子设备及可读存储介质

文献发布时间:2024-04-18 19:58:30


报表生成方法、装置、电子设备及可读存储介质

技术领域

本申请涉及业务数据处理技术领域,具体涉及一种报表生成方法、一种报表生成装置、一种电子设备以及一种计算机可读存储介质。

背景技术

报表就是用表格、图表等格式来动态显示数据,可以用公式表示为:“报表=多样的格式+动态的数据”。在没有计算机以前,人们利用纸和笔来记录数据。当计算机出现之后,人们利用计算机处理数据和界面设计的功能来生成、展示报表。计算机上的报表的主要特点是数据动态化、格式多样化,并且实现报表数据和报表格式的完全分离,用户可以只修改数据,或者只修改格式。

目前,使用计算机生成报表的常规操作流程为:从数据库获取用于报表生成的全量的原始数据,然后在内存中对原始数据进行数据处理和报表生成,直到所有的原始数据均生成为报表后,将报表文件导出至硬盘。该操作流程虽然能够实现报表文件的生成和导出,但面临将大批量数据处理为报表文件时将存在以下缺陷和不足:

(1)现有的报表生成方法大多采用获取全量的原始数据后,将所有的原始数据堆放在内存中等待处理,导致内存占用大,处理速度慢,且容易出现内存溢出;

(2)现有的报表生成方法均采用数据预处理和报表生成两个流程进行同步处理的方式,因此当前一条数据在生成报表时,无法进行下一条数据的处理,不仅等待行为过多,浪费大量时间,而且导致流程速度过慢;

(3)现有的报表生成方法在报表文件未生成完毕时,已生成的所有报表文件均放置在内存中,不仅占用大量内存,还容易在发生异常时出现报表文件丢失的风险,安全性较弱;

(4)现有的报表生成方法在生成报表的各流程中均缺少内存释放操作,加大了内存占用,增加了内存溢出的风险。

发明内容

本申请实施例的目的是提供一种报表生成方法、报表生成装置、电子设备以及可读存储介质,用以解决现有技术中报表生成方法存在内存溢出、处理流程速度缓慢和安全性较弱的技术问题。

为了实现上述目的,本申请第一方面提供一种报表生成方法,所述报表生成方法包括以下步骤:响应于报表生成请求,获取待处理数据集,所述待处理数据集包括数据库中的一部分原始数据;使用游标迭代按照预设时间间隔从待处理数据集中提取一条原始数据进行预处理,且所述预设时间间隔小于一条原始数据的预处理时间;每确定一条原始数据完成预处理过程,便将预处理后的数据作为一条待中转数据逐个插入队列链表的尾部,获得队列链表的头部弹出的一条待生成数据;循环执行上述操作,直到将数据库中全部的原始数据均转换为待生成数据;将全部的待生成数据写入报表模板,生成报表文件。

根据上述技术手段,采用游标迭代逐个提取待处理集中的原始数据进行预处理,并且在上一条原始数据正在进行预处理时,就可以提取下一条原始数据开始准备进入预处理,以减少各个原始数据在预处理过程中的等待行为;另外,队列链表起到了中转数据的作用,通过设置队列链表来中转一部分经预处理后的原始数据,可以在针对剩余部分的原始数据进行预处理操作的同时,将已完成预处理的一部分原始数据进行生成报表操作,以减少数据在预处理和生成报表两个流程之间的等待行为。相比较于现有技术中的将原始数据的预处理和生成报表两个流程同步进行的报表生成方法,本申请的报表生成方法不仅可以将原始数据的预处理和生成报表拆分成两个独立的流程,实现数据预处理和生成报表的并行操作,从而减少两个流程之间的等待行为,加快流程处理速度,还能够提高数据的整体处理效率和对大数据量的支持。此外,每次队列链表的尾部弹出一个待生成数据后,将自动释放该块内存,能够降低内存消耗。

在本申请的一个示例性实施例中,所述获取待处理数据集,可以包括:采用流式处理分批获取数据库中的原始数据;将最新一批获取的原始数据作为待处理数据集保留在计算机内部存储介质的存储区域中。

根据上述技术手段,通过流式处理分批获取原始数据,且在内存中仅保留最新一批的待处理数据,可以节省内存空间,降低内存溢出的风险,同时还有利于加快内存处理速度。

在本申请的一个示例性实施例中,所述报表生成方法还可以包括:每确定从待处理数据集中提取一条原始数据,便释放一个待处理数据集的的原始数据存储区域。

根据上述技术手段,通过游标迭代内存中存储的待处理数据集,每当确定通过游标迭代提取到一个原始数据时,即可自动释放一个待处理数据集中的原始数据的存储区域,从而及时清除原始数据占用的内存空间,降低内存消耗。

在本申请的一个示例性实施例中,所述将全部的待生成数据写入报表模板,生成报表文件,可以包括:基于报表模板,提取预定量的待生成数据进行模板化配置,获得行转换数据,其中,所述模板化配置包括字体配置、颜色配置、背景配置和边框配置,所述预定量为报表模板的列数;将行转换数据作为报表中的一行,写入报表模板,生成报表行子文件;重复上述操作,直到将全部的待生成数据均写入报表模板,生成若干报表行子文件;拼接若干报表行子文件,生成报表文件。

根据上述技术手段,通过行转换工具提取一行待生成数据进行模板化配置,并写入报表模板,可以确保获得标准化的报表文件,提高报表数据的可读性和可视化程度。

在本申请的一个示例性实施例中,所述报表文件包括:第一报表子文件和第二报表子文件;所述报表生成方法还包括:在将全部的待生成数据写入报表模板的过程中,将已生成的一部分报表行子文件拼接为第一报表子文件,将已生成的另一部分报表行子文件拼接为第二报表子文件;将第一报表子文件存放在计算机内部存储介质的缓存区域中,将第二报表子文件导入计算机外部存储介质。

根据上述技术手段,通过设置缓存空间来暂存最新一批生成的一部分报表行子文件,同时及时将之前已生成的另一部分报表行子文件拼接为报表子文件后导入到硬盘中,不仅可以及时释放内存中的存储空间,降低内存消耗,还能够在计算机设备发生不可逆异常(如断电、被迫重启等)时,仅丢失内存中缓存的部分报表文件,而硬盘中已生成的报表文件不会受到影响,确保了报表文件的处理效率。

在本申请的一个示例性实施例中,所述预处理,可以包括:判断原始数据是否包含空字符串、乱码、敏感字符和特殊字符;在确定原始数据包含空字符串的情况下,对原始数据进行数据替换;在确定原始数据包含乱码的情况下,对原始数据进行数据恢复;在确定原始数据包含敏感字符的情况下,对原始数据进行字段脱敏;在确定原始数据包含特殊字符的情况下,对原始数据进行字段转义;在确定原始数据均不包含空字符串、乱码、敏感字符和特殊字符的情况下,输出预处理后的数据。

根据上述技术手段,通过判断原始数据是否符合报表输出要求(例如,是否为空、是否乱码、是否包含敏感字符等),并进行字段转义、字段脱敏等数据预处理操作,确保了生成的报表文件的数据准确性、完整性和安全性。

在本申请的一个示例性实施例中,所述待处理数据集的数据容纳空间小于所述队列链表的数据容纳空间;所述计算机内部存储介质的缓存区域的数据容纳空间小于所述待处理数据集的数据容纳空间。

根据上述技术手段,通过待处理数据集的数据容纳空间设置为小于队列链表的数据容纳空间,且大于缓存区域的数据容纳空间,可以提高数据处理效率,减少报表生成过程中的等待时间。

本申请第二方面提供一种报表生成装置,所述报表生成装置包括:数据获取模块、数据预处理模块、数据中转模块、循环执行模块和报表生成模块;数据获取模块用于响应于报表生成请求,获取待处理数据集,所述待处理数据集为数据库中的一部分原始数据;数据预处理模块用于使用游标迭代按照预设时间间隔从待处理数据集中提取一条原始数据进行预处理,且所述预设时间间隔小于一条原始数据的预处理时间;数据中转模块用于每确定一条原始数据完成预处理过程,便将预处理后的数据作为一条待中转数据插入队列链表的尾部,获得队列链表的头部弹出的一条待生成数据;循环执行模块,用于循环执行上述操作,直到将数据库中全部的原始数据均转换为待生成数据;报表生成模块用于将全部的待生成数据写入报表模板,生成报表文件。

本申请第三方面提供一种电子设备,该电子设备包括:处理器,以及与所述处理器通信连接的存储器;所述存储器存储计算机执行指令;所述处理器执行所述存储器存储的计算机执行指令,以实现上述的报表生成方法。

本申请第四方面提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机执行指令,该计算机执行指令在被处理器执行时使得所述处理器被配置成执行上述的报表生成方法。

本申请第五方面提供一种计算机程序产品,包括计算机程序,该计算机程序在被处理器执行时实现上述的报表生成方法。

通过本申请提供的技术方案,本申请至少具有如下技术效果:

(1)本申请通过设置游标迭代将多个原始数据的预处理过程拆分为多个独立的流程,减少了各个原始数据在预处理过程中的等待行为,以及通过设置队列链表将原始数据的预处理和生成报表拆分成两个独立且并行操作的流程,减少了两个流程之间的数据等待行为,从而加快了流程处理速度,还提高了数据的整体处理效率和对大数据量的支持;

(2)本申请采用流式处理分批获取原始数据,内存中只保留最新一批的待处理数据,并且在游标迭代的过程中,每迭代处理一个原始数据就释放一个对应的内存空间,降低内存消耗,加快流程处理速度;

(3)本申请通过在内存中缓存最新生成的一定行数的报表行子文件,达到指定行数后将报表行子文件拼接为报表子文件,并将报表子文件及时导出到硬盘中,不仅能够降低内存消耗,还可以在发生不可逆异常时,避免丢失已生成的大部分报表文件。

本申请实施例的其它特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本申请实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本申请实施例,但并不构成对本申请实施例的限制。在附图中:

图1示意性示出了现有技术中的报表生成方法的逻辑示意图;

图2示意性示出了根据本申请实施例的报表生成方法的流程示意图;

图3示意性示出了根据本申请实施例的报表生成方法的逻辑示意图;

图4示意性示出了根据本申请实施例的报表生成方法的应用环境示意图;

图5示意性示出了根据本申请实施例的报表生成装置的结构框图;

图6示意性示出了根据本申请实施例的电子设备的内部结构图。

附图标记说明

102-终端,104-服务器,200-报表生成装置,201-数据获取模块,202-数据预处理模块,203-数据中转模块,204-循环执行模块,205-报表生成模块,A01-处理器,A02-网络接口,A03-内存储器,A04-非易失性存储介质,B01-操作系统,B02-计算机程序。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解的是,此处所描述的具体实施方式仅用于说明和解释本申请实施例,并不用于限制本申请实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

需要说明,若本申请实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。

另外,若本申请实施例中有涉及“第一”、“第二”等的描述,则该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。

图1为常规报表生成方法的逻辑示意图,如图1所示,常规的报表生成方法主要包括以下操作流程:

1)工具初始化:构造一个数据库连接,用于获取原始数据;构造一个数据列表对象,用于存储查询到内存中的原始数据;构造一个行转换对象,用于将一行待生成数据转换为报表中的一行报表数据;构造一个列表文件;

2)获取原始数据:保持数据库连接,从数据库中获取用于报表生成的全量原始数据,并将全量原始数据存储在数据列表中;

3)原始数据预处理:取出数据列表中的一行原始数据进行数据预处理;

4)报表行生成:利用行转换工具抓取处理后原始数据,并将其转换为报表中的一行报表数据,并缓存到报表文件中;

5)报表文件导出:全部的报表数据生成完毕后,导出报表文件到硬盘中。

上述的报表生成方法在处理小批量报表数据时较为有效,但一旦面临大批量报表数据的生成任务时,往往出现处理效率低下、等待时间过长等问题,甚至可能出现内存溢出错误,导致报表生成任务中断或重启。

针对现有报表生成方法中存在的大批量报表数据处理效率不高的技术问题,本申请提出一种新的报表生成方法,本申请在构造数据库连接后,通过流式处理分批量获取原始数据,采用游标迭代若干原始数据在不同时间段内进行数据预处理,从而将各个原始数据之间的预处理操作拆分为独立且并行的多个流程,减少了各个原始数据在预处理过程中的等待行为;同时,采用队列链表中转一部分预处理后的原始数据来进行报表生成,从而将原始数据预处理和报表行生成两个流程分开,减少两个流程之间的等待行为,加快数据处理速度。此外,本申请还在内存中仅保留最新一批的待处理数据,并在游标迭代过程中每处理一个原始数据就释放一个内存空间,从而降低内存消耗,加快流程速度。另外,本申请还提出只在内存中缓存最新生成的一定行数的报表文件,将其他已生成的报表文件及时导出到硬盘中,在降低内存消耗的同时,避免在发生不可逆异常时,丢失或损坏内存中已生成的全部报表文件。

为了实现上述技术方案,本申请第一方面,提供了一种报表生成方法。图2示意性示出了根据本申请实施例的报表生成方法的流程示意图。如图2所示,在本申请一实施例中,提供了一种报表生成方法,该报表生成方法可包括以下步骤:

步骤S101,响应于报表生成请求,获取待处理数据集。

这里,待处理数据集是指数据库中的一部分原始数据。也就是说,可以分批量地获取数据库中的原始数据,每获取到一批原始数据,就可以进行原始数据的甄别和处理,而不必等待全部的原始数据获取完毕。

相比于一次性获取整个数据集,分批获取可以使部分原始数据更早地可用,从而更快地开始进行处理和操作。这对于需要及时获取和处理数据的任务非常重要。而且,对于大规模的数据集,一次性加载全部数据可能会导致内存不足或性能下降。通过分批获取数据,可以逐步加载和处理数据,避免内存占用过大的问题,提高系统的稳定性和性能。

步骤S102,使用游标迭代按照预设时间间隔从待处理数据集中提取一条原始数据进预处理。

这里,数据预处理是指对原始数据进行甄别后,进行字段转义、字段脱敏等操作,确保原始数据满足报表生成要求,报表生成要求可以为要求数据不包含空字符串、不包含特殊字符、不包含敏感词汇等。

由于数据预处理过程中的甄别、字段转义、字段脱敏等一系列的步骤较为繁琐,若是在待处理数据中的全部原始数据均逐个完成预处理操作后,再将预处理后的全部原始数据逐个进行报表生成操作,将会造成过多的等待行为,浪费大量的时间。因此,本申请针对待处理数据集中的多个原始数据逐个进行数据甄别和处理,每处理完成一条原始数据,就将处理后的数据标记为一条待中转数据,如此便可在上一条原始数据进行报表生成操作的同时,进行下一条原始数据的数据甄别和处理等操作,从而及时将已完成预处理的数据输送至报表生成的处理流程中,以减少各数据项在数据预处理和报表生成两个流程之间的等待时间,提高数据处理的效率。

另外,考虑到单条原始数据在预处理过程中的耗费时间较长,而单条原始数据在报表生成过程中的耗费时间较短,本申请采用游标迭代按照预设时间间隔从待处理数据集中提取一条原始数据进行预处理,且预设时间间隔小于一条原始数据的预处理时间。如此,在上一条原始数据正在进行预处理时,就可以提取下一条原始数据开始准备进入预处理,从而实现将多个原始数据的预处理过程拆分为多个独立且并行的流程,以避免待处理集中的原始数据在预处理过程中耗费大量时间。

步骤S103,每确定一条原始数据完成预处理过程,便将预处理后的数据作为一条待中转数据插入队列链表的尾部,获得队列链表的头部弹出的一条待生成数据。

这里,队列链表是指将队列和链表结合起来使用的一种数据结构,这种数据结构融合了队列的先进先出特性和链表的灵活性,能够高效地支持元素的插入和删除操作。链表的特点是可以动态地添加和删除节点,而队列是一种先进先出(FIFO)的数据结构。因此,当需要在队列中插入或删除元素时,使用链表可以有效地进行插入和删除操作,而无需移动其他元素。换句话说,采用队列链表可实现待生成数据的动态存储,队列链表可以作为待生成数据传递的缓冲区,用于存储一定数量的待生成数据,每当新生成一条待中转数据,便将新生成的待中转数据插入在队列链表的尾部,队列链表的头部就可以弹出一条队列内预先存储的待生成数据用于生成报表。

另外,队列链表还具有动态调整大小的特性,当队列需要存储更多的元素时,可以动态地分配内存,而不会遇到预分配固定大小数组的限制。也就是说,队列链表中存储的待生成数据的数量是可以动态配置的。

需要说明的是,待中转数据是指在完成数据预处理操作后,等待进入队列链表的数据。待中转数据和待生成数据在本质上属于同一个数据,都是指经数据预处理后的原始数据,待中转数据和待生成数据只是用于标记这些数据的传递状态。具体来讲,当原始数据完成数据预处理操作后,需要传递至队列链表进行中转时,可将这些处理后需等待中转的数据标记为待中转数据。当原始数据插入至队列链表中存储,处于等待从队列链表的头部弹出以生成报表的状态时,可将这些中转后需等待进行报表生成操作的数据标记为待生成数据。

步骤S104,循环执行上述步骤S101~步骤S103,直到将数据库中全部的原始数据均转换为待生成数据。

步骤S105,将全部的待生成数据写入报表模板,生成报表文件。

这里,报表模板是指用于生成和呈现特定格式的报表的预定义模板,它提供了一个结构化的框架,其中包含报表的布局、样式和数据展示方式等信息。报表模板的设计可以根据具体的需求和报表类型进行调整。以下是一些常见的报表模板元素:

1)报表标题:报表的名称或标题,用于简明扼要地概括报表内容;

2)报表表头:包含列名和字段描述的表头部分,用于标识每一列的含义;

3)数据区域:包含实际数据的区域,通常是一个表格形式,每一行代表一个数据记录,每一列代表一个数据字段;

4)汇总行或列:用于呈现数据的汇总信息,例如总计、平均值等;

5)图表:可选的图形化展示方式,可以使用柱状图、折线图、饼图等来呈现数据的可视化效果;

6)样式和格式:报表模板可以定义特定的字体、颜色、边框、背景等样式,并可以使用合适的格式化方式,例如日期格式、货币格式等。

如此,本申请采用游标迭代逐个提取待处理集中的原始数据进行预处理,并且在上一条原始数据正在进行预处理时,就可以提取下一条原始数据开始准备进入预处理,以减少各个原始数据在预处理过程中的等待行为;另外,队列链表起到了中转数据的作用,通过设置队列链表来中转一部分经预处理后的原始数据,可以在针对剩余部分的原始数据进行预处理操作的同时,将已完成预处理的一部分原始数据进行生成报表操作,以减少数据在预处理和生成报表两个流程之间的等待行为。相比较于现有技术中的将原始数据预处理和生成报表两个流程同步进行的报表生成方法,本申请的报表生成方法不仅可以将原始数据的预处理和生成报表拆分成两个独立的流程,实现数据预处理和生成报表的并行操作,从而减少两个流程之间的等待行为,加快流程处理速度,还提高了数据的整体处理效率和对大数据量的支持。

进一步地,在一种可能的实施方式中,步骤S101中,获取待处理数据集的过程可以细化为下述子步骤S1011~子步骤S1012。

子步骤S1011,采用流式处理分批获取数据库中的原始数据。

这里,流式处理是指一种实时处理数据的方法,它以连续的、无限的数据流作为输入,并通过一系列的处理步骤逐个处理数据。与一次性处理整个数据集相比,流式处理可以实时地对数据进行处理和分析,不需要等待整个数据集被完全获取或加载。将数据源与流式处理框架集成,并确定合适的数据流分布、流转架构和流式处理的逻辑,即可实现流式处理。流式处理框架可采用Apache Kafka、Apache Flink、Apache Storm等实现。

子步骤S1012,将最新一批获取的原始数据作为待处理数据集保留在计算机内部存储介质的存储区域中。

例如,假设需要从数据库连接中获取报表生成的原始数据总量有100w行,可以采用流式处理查询器每批查询200行原始数据作为待处理数据集装入计算机内部存储介质中,在该批数据完成数据预处理后,即可释放计算机内部存储介质的存储空间,并开始获取下一批原始数据,直到获取到全部数量的原始数据。

这里,计算机内部存储介质是指安装在计算机主体内部,用于满足不同存储需求的设备,不同存储需求包括临时数据存储、长期数据存储、备份和归档等。也就是说,计算机内部存储介质可以是适合长期存储大量数据的硬盘驱动器(Hard Disk Drive,HDD)、磁带(Magnetic Tape)等,也可以是存储容量较小的固态硬盘(Solid State Drive,SSD)、光盘(Compact Disc,CD)和数字视频光盘(Digital Video Disc,DVD)等,还可以是能够持久存储数据的非易失性存储器(Non-Volatile Memory,NVM)。常见的非易失性存储器包括闪存(Flash Memory)、EEPROM(Electrically Erasable Programmable Read-Only Memory)和NVRAM(Non-Volatile Random Access Memory)等。

流式处理获得的数据通常以持续的方式到达,保留所有数据可能会导致内存消耗巨大。因此,本申请将计算机内部存储介质的存储空间限制在最新一批获取的原始数据上,可以减少内存使用量,提高系统的可扩展性和资源效率。此外,通过仅保留最新一批的原始数据,不仅可以在原始数据到达时立即进行处理,减少处理数据的等待时间,还可以简化数据管理的复杂性,便于更加快速地进行原始数据的实时分析和处理。

进一步地,在一种可能的实施方式中,步骤S102中,数据预处理的具体过程可以细化为下述子步骤S1021~子步骤S1026。

子步骤S1021,判断原始数据是否包含空字符串、乱码、敏感字符和特殊字符。

这里,针对原始数据逐项进行空字符串、乱码、敏感字符和特殊字符等判断是为了提高报表数据的质量、完整性和安全性,确保最终生成的报表文件符合要求。

具体地,空字符串可能是由于输入错误、数据损坏或其他问题导致的。在报表生成过程中,空字符串可能会引发错误或导致报表文件中出现无效的报表数据。因此,判断原始数据是否为空字符串有助于排除无效数据,确保报表数据的完整性和准确性。在本申请中,可以使用字符串处理函数检查原始数据的长度是否为0,若长度为0,则判断原始数据为空字符串。

乱码是指以错误的编码形式解析数据,导致无法正确显示或处理数据。乱码可能是由于编码格式不匹配、数据传输错误或数据损坏等原因造成的。判断原始数据是否存在乱码可以避免对错误编码数据进行进一步处理,确保报表数据的准确性和一致性。在本申请中,对于文本类型的原始数据,可以使用字符编码检测库或函数对原始数据进行编码解析。比如可以使用Python中的chardet库判断原始数据的编码类型,并根据编码类型判断是否出现乱码。对于二进制类型的原始数据,可以通过识别特定的字节模式或特征来判断是否存在乱码。例如,检查是否有非法的字节序列或不符合预定义格式的字节。

敏感字符是指包含敏感信息或可能引发安全问题的关键词汇。在生成报表文件的过程中,如果敏感字符未经处理或泄露,可能会导致数据安全风险,如信息泄露、隐私侵犯等。因此,判断原始数据是否包含敏感字符有助于及时发现和处理敏感信息,保护数据的安全和隐私。在本申请中,可以构建一个敏感词列表,包含需要检测的敏感字符或者敏感词汇。通过对原始数据使用字符串匹配算法,如字符串搜索或正则表达式,检查是否包含敏感字符。另外,还可以根据敏感词的特征,如合并字符或替换字符作为额外的处理手段来增加敏感字符的匹配准确性。

特殊字符是指具有特殊含义、引起数据处理异常或潜在问题的字符。特殊字符可能会干扰数据处理、引发转义错误或导致应用漏洞。通过判断原始数据是否包含特殊字符,可以提前检测和处理这些特殊字符,以确保数据处理和应用的稳定性和安全性。在本申请中,可以先确定哪些字符被认为是特殊字符,如标点符号、特定ASCII码或其他自定义的特殊字符集合;然后遍历原始数据中的每个字符,使用字符匹配、ASCII码范围检查等方法,判断是否存在特殊字符。

子步骤S1022,在确定原始数据包含空字符串的情况下,对原始数据进行数据替换。

这里,数据替换是指将空字符串替换为空格、默认值或者推算值。

例如,当确认该空字符串无关紧要,不影响后续报表数据的准确性时,可以使用字符串处理函数将空字符串替换为空格或直接删除。

当确认需要保留原始数据时,可以将空字符串替换为某个默认值。默认值的选择取决于具体的数据类型和含义。例如,对于数值类型的原始数据,可以选择填充为0或者特定的缺失值表示;对于文本类型的原始数据,可以选择填充为"N/A"或其他可以代表缺失的值。

当确认需要保留原始数据,且空字符串所在的位置可以通过其他数据进行推断或插值时,可以使用插值算法填充空字符串。例如,使用线性插值、时间序列插值等方法根据相邻的数据点推断出缺失的值。

子步骤S1023,在确定原始数据包含乱码的情况下,对原始数据进行数据恢复。

这里,数据恢复是指将乱码通过数据清洗或重新解码的方式,重新获得使用正确的字符编码的原始数据。例如,如果乱码是由于错误的字符编码导致的,可以使用正确的字符编码对原始数据进行重新解码。根据数据的来源和预期的字符编码,尝试不同的编码方案进行解码,直到获得正确的字符编码方式。又例如,对于文本类型的原始数据,可以使用错误纠错算法、NLP(自然语言处理)工具或各种文本处理库,尝试恢复有意义的数据内容,这可能包括对错误字符的替换、删除或通过上下文推断合理的字符。

子步骤S1024,在确定原始数据包含敏感字符的情况下,对原始数据进行字段脱敏。

这里,字段脱敏是指敏感数据中的关键信息部分替换为不可识别或无意义的数据,以保护数据的隐私和安全。字段脱敏的具体实施方式包括但不限于敏感字符替换、敏感字符哈希化、敏感字符加密、敏感字符掩码、敏感字符随机化等。例如,可以将敏感字段的原始值用随机生成的数值或者规定的替代之来代替,比如,将手机号码的中间几位替换为星号(*),或者将银行账号的后几位替换为随机数字。

子步骤S1025,在确定原始数据包含特殊字符的情况下,对原始数据进行字段转义。

这里,字段转义是指将特殊字符或符号在文本或代码中进行转义,以确保其被正确解释和处理,而不会被误解为语法或其他用途。例如,在使用双引号(“)作为字符串的界定符时,当字符串本身包含双引号时,需要使用转义字符(”)对其进行转义,以区分双引号的含义。又例如,在使用正则表达式时,一些字符具有正则表达式的特殊含义,例如点号(.)、星号(*)、括号等。如果需要在正则表达式中匹配这些特殊字符本身,需要使用反斜杠进行转义,即在特殊字符前添加反斜杠。

子步骤S1026,在确定原始数据均不包含空字符串、乱码、敏感字符和特殊字符的情况下,将原始数据作为待中转数据输出。

如此,通过判断原始数据是否符合报表输出要求(例如,是否为空、是否乱码、是否包含敏感字符等),并进行字段转义、字段脱敏等数据预处理操作,确保了生成的报表文件的数据准确性、完整性和安全性。

进一步地,在一种可能的实施方式中,步骤S102中,可以在使用游标迭代所述待处理数据集时,每确定从待处理数据集中提取一条原始数据,就可以释放一个待处理数据集的的原始数据存储区域。

由于计算机内部存储介质在获取到数据库中的原始数据后,将自动划分一定的内存区域用于保留已获取的全部数据,但并不会主动释放计算机内部存储介质中的内存空间,从而导致内存占用严重,存在内存溢出的风险。因此,本申请通过游标迭代计算机内部存储介质中存储的待处理数据集,每当确定通过游标迭代提取到一个原始数据时,即可自动释放一个待处理数据集中的原始数据的存储区域,从而及时清除原始数据占用的内存空间,降低内存消耗。

进一步地,在一种可能的实施方式中,步骤S104中,将全部的待生成数据写入报表模板,生成报表文件的过程可以细化为以下子步骤S1041~子步骤S1044。

子步骤S1041,基于报表模板,提取预定量的待生成数据进行模板化配置,获得行转换数据。

其中,模板化配置包括字体配置、颜色配置、背景配置和边框配置;预定量为报表模板的列数。

子步骤S1042,将行转换数据作为报表中的一行,写入报表模板,生成报表行子文件。

子步骤S1043,重复上述操作,直到将全部的待生成数据均写入报表模板,生成若干报表行子文件。

子步骤S1044,拼接若干报表行子文件,生成报表文件。

如此,通过行转换工具提取一行待生成数据进行模板化配置,并写入报表模板,可以确保获得标准化的报表文件,提高报表数据的可读性和可视化程度。

进一步地,在一种可能的实施方式中,子步骤S1043中,在将全部的待生成数据写入报表模板的过程中,可以将已生成的一部分报表行子文件拼接为第一报表子文件,将已生成的另一部分报表行子文件拼接为第二报表子文件;然后将第一报表子文件存放在计算机内部存储介质的缓存区域中,将第二报表子文件导入计算机外部存储介质。

例如,可以在计算机内部存储介质中设置一个缓存区域,用于存储已生成的一部分报表行子文件以作为缓存文件,当缓存区域内的报表行子文件超过一定大小时(如超出200行),可以将计算机内部存储介质中的缓存文件拼接到计算机外部存储介质中的报表文件中,从而及时释放缓存区域的内存。

这里,计算机外部存储介质是指与计算机系统相连但不在计算机主体内的存储设备。例如,计算机外部存储介质可以包括但不限于USB闪存驱动器(USB Flash Drive)、外部硬盘驱动器(External Hard Disk Drive)、网络存储设备(Network Attached Storage,NAS)、云存储服务(Cloud Storage)、光盘(Compact Disc,CD)和数字视频光盘(DigitalVideo Disc,DVD)等。此外,计算机外部存储介质还可以是其他类型的外部存储设备,如磁带驱动器、外部固态硬盘、网络存储阵列(Network Attached Storage Array,NAS Array)等。

如此,通过设置缓存空间来暂存最新一批生成的一部分报表行子文件,同时及时将之前已生成的另一部分报表行子文件拼接为报表子文件后导入到硬盘中,不仅可以及时释放内存中的存储空间,降低内存消耗,还能够在计算机设备发生不可逆异常(如断电、被迫重启等)时,仅丢失内存中缓存的部分报表文件,而硬盘中已生成的报表文件不会受到影响,确保了报表文件的处理效率。

进一步地,在一种可能的实施方式中,待处理数据集的数据容纳空间小于队列链表的数据容纳空间;计算机内部存储介质的缓存区域的数据容纳空间小于待处理数据集的数据容纳空间。

例如,假设待处理数据集所能够容纳的数据量设置为n,队列链表所能够容纳的数据量可设置为2n。如此,每当从数据库中获取到n条原始数据,即可作为一个待处理数据集,在当前批次的n条原始数据的n个不同阶段的预处理流程中,每当新完成一条原始数据的预处理操作,就可以获得一条待中转数据;而队列链表内预先存储有前两个批次生成的2n条待中转数据,每当一条待中转数据插入至队列链表的尾部时,即可在队列链表的头部获得一条待生成数据;直到n个不同阶段的预处理流程均执行完毕后,正好可以生成n条待中转数据来插入队列链表,以便弹出队列链表内排序在前的n条待中转数据作为待生成数据,而队列链表内剩余的n条待中转数据正好可以作为下一个批次的待生成数据弹出。

又例如,假设待处理数据集所能够容纳的数据量设置为n,计算机内部存储介质的缓存区域所能够容纳的数据量可设置为n/2。如此,当前批次的n条原始数据均完成预处理并插入队列链表后,将获得队列链表弹出的n条待生成数据依次写入报表模板的过程中,可以只将n/2条待生成数据生成的报表子文件缓存在计算机内部存储介质中,将其余的待生成数据生成的报表子文件及时导入到计算机外部存储介质中,从而降低内存消耗,加快计算机内部存储介质的数据处理效率。

经实践证明,在将待处理数据集所能够容纳的数据量设置为n、队列链表所能够容纳的数据量设置为2n以及计算机内部存储介质的缓存区域所能够容纳的数据量设置为n/2的情况下,报表数据的处理效率最高,生成报表文件所花费的时间最短。可以理解的,在本申请的技术方案中,对数据的获取、收集、存储、使用、加工、传输、提供、公开和应用等处理,均符合相关法律法规的规定。

图2为一个实施例中报表生成方法的流程示意图。应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

图3为一个实施例中报表生成方法的逻辑示意图,如图3所示,本申请提供的报表生成方法的全流程主要为:查询数据库中的原始数据,将原始数据甄别和处理后,再转换为临时缓存文件中的报表行,最后再拼接到硬盘中的报表文件上。与图1中常规报表生成方法的操作流程相比,本申请提供的报表生成方法具备以下区别点:

1)在工具初始化方面,本申请除了构造数据库连接、数据列表对象、行转换对象和列表文件之外,还构造了一个游标对象,用于迭代处理原始数据;构造了一个队列链表,用于存储已处理好的待生成数据;构造了一个缓存文件,用来缓存最近生成的报表行;

2)在获取原始数据方面,本申请采用流式处理从数据库中分批获取用于报表生成的一部分原始数据,直到该批原始数据被处理释放完后,再获取下一批原始数据,保持数据库连接直到获取到全部结果集;

3)在原始数据预处理方面,本申请使用游标迭代已装入到内存中的最新一批原始数据,将原始数据的预处理拆分为多个数据项之间独立且并行操作的过程,在对于一部分原始数据分别进行预处理的同时,将已完成预处理的一部分数据作为待中转数据插入到队列链表的队尾;同时,使用游标迭代时,每处理一条原始数据就释放掉该条原始数据在待处理数据集中所占用的内存;

4)在报表行生成方面,本申请通过行转换工具抓取队列链表的队头弹出的待生成数据,经过模板化配置(如字体设置、颜色设置、背景设置、边框设置等)后,将其转换为报表中的一行,缓存到缓存文件中;

5)在报表文件导出方面,本申请在内存中只保留最新生成的一定行数的缓存文件,当缓存文件超过一定大小(如200行)时,及时将内存中的缓存文件拼接到硬盘中的报表文件上,完成后释放缓存文件,降低内存消耗。

整体来说,从数据角度看,在数据库中的原始数据,被查询回来后经过甄别和处理,为待中转数据;待中转数据经过队列链表中转后,为待生成数据;待生成数据经过行转换处理后,为缓存文件中的报表行;报表行最后拼接到报表文件中。从存储角度看,原始数据在数据库中,待处理数据在内存中,待生成数据队列链表在内存中,缓存文件在内存中,报表文件在硬盘中,各类工具在内存中。

本申请提供的报表生成方法,可以应用于如图4所示的应用环境中。其中,终端102通过网络与服务器104通过网络进行通信。终端102可以在用户操作下通过网络向服务器104发送报表生成请求。服务器104接收报表生成请求后,将响应于报表生成请求,获取数据库中的原始数据,并通过游标迭代和队列链表中转数据预处理和报表生成,最终实现将全部的原始数据都生成为报表文件。报表文件生成后,服务器104还可以通过网络、云端或者外部存储介质等方式将已生成的报表文件发送给终端102。其中,终端102可以是任何一种可以与用户通过键盘、触摸板、触摸屏、语音交互等一种或多种方式进行人机交互的电子产品,例如,终端102可以包括但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现;服务器104还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。

本申请第二方面,提供了一种报表生成装置。在一个实施例中,如图5所示,一种报表生成装置200包括数据获取模块201、数据预处理模块202、数据中转模块203、循环执行模块204和报表生成模块205。

其中,数据获取模块201,用于响应于报表生成请求,获取待处理数据集。所述待处理数据集为数据库中的一部分原始数据。

数据预处理模块202,用于使用游标迭代按照预设时间间隔从待处理数据集中提取一条原始数据进行预处理,且所述预设时间间隔小于一条原始数据的预处理总时长。

数据中转模块203,用于每确定一条原始数据完成预处理过程,便将预处理后的数据作为一条待中转数据插入队列链表的尾部,获得队列链表的头部弹出的一条待生成数据。

循环执行模块204,用于循环执行上述操作,直到将数据库中全部的原始数据均转换为待生成数据。

报表生成模块205,用于将全部的待生成数据写入报表模板,生成报表文件。

所述报表生成装置包括处理器和存储器,上述数据获取模块、数据预处理模块、数据中转模块、循环执行模块和报表生成模块等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序模块中实现相应的功能。

处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来实现报表生成方法。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。

本申请实施例提供的报表生成装置,可用于执行上述实施例中报表生成方法的技术方案,其实现原理和技术效果类似,在此不再赘述。

需要说明的是,应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,数据获取模块可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上数据获取模块的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。

本申请第三方面提供了一种电子设备,该电子设备可以是服务器,其内部结构图可以如图6所示。该电子设备包括通过系统总线连接的处理器A01、网络接口A02、存储器(图中未示出)和数据库(图中未示出)。其中,该电子设备的处理器A01用于提供计算和控制能力。该电子设备的存储器包括内存储器A03和非易失性存储介质A04。该非易失性存储介质A04存储有操作系统B01、计算机程序B02和数据库(图中未示出)。该内存储器A03为非易失性存储介质A04中的操作系统B01和计算机程序B02的运行提供环境。该电子设备的数据库用于存储原始数据。该计算机设备的网络接口A02用于与外部的终端通过网络连接通信。该计算机程序B02被处理器A01执行时以实现一种报表生成方法。

本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,本申请提供的报表生成装置可以实现为一种计算机程序的形式,计算机程序可在如图6所示的电子设备上运行。电子设备的存储器中可存储组成该报表生成装置的各个程序模块,各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的报表生成方法中的步骤。

本申请第四方面提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现上述报表生成方法。

本申请的第五方面,提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述的报表生成方法。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

相关技术
  • 网页生成方法、装置、电子设备及计算机可读存储介质
  • 特征生成方法、装置、电子设备及计算机可读存储介质
  • 模型生成方法、装置、电子设备和计算机可读存储介质
  • 基于大数据的报表生成方法及装置、电子设备、存储介质
  • 一种浴室加热装置和用于控制浴室加热装置的方法、设备、电子设备及计算机可读存储介质
  • 报表生成方法、报表生成装置以及可读存储介质
  • 报表生成方法、报表生成装置、电子设备及存储介质
技术分类

06120116503263