一种复杂报表引擎方法及装置制造方法及图纸

技术编号:25835666 阅读:30 留言:0更新日期:2020-10-02 14:16
本发明专利技术公开了一种复杂报表引擎方法及装置,主要解决现有技术中存在的现有复杂报表引擎方法存在的没有统一维护且访问效率低,造成逻辑的分离及行过程经过多个阶段,推导耗时长的问题。该一种复杂报表引擎方法及装置是首先基于用户自行配置的报表模板,生成一颗或N棵初始状态的树,多个树之间可以有交叉;然后,依次从每棵树的根节点到叶子节点逐层加载数据,并根据数据条数复制树节点及分配值。之后,复制出来的节点会连同子节点一并复制,从而生成一颗新的树。最后,将同一个模板树节点扩展出来的具有同层级的节点通过链表统一维护。通过上述方案,本发明专利技术达到了内存开销小、推导快的目的。

【技术实现步骤摘要】
一种复杂报表引擎方法及装置
本专利技术涉及数据查询和引擎
,具体地说,是涉及一种复杂报表引擎方法及装置。
技术介绍
日常生活中人们通常用计算机记录各种数据,计算机上的报表的主要特点是数据动态化,格式多样化,并且实现报表数据和报表格式的完全分离,用户可以只修改数据,或者只修改格式。针对复杂报表现有技术中的引擎方法是从查询结果数据为切入点,通过多层嵌套的散列表结构描述节点间关系,散列表的大小取决于字段值的数量,嵌套层级取决于父子格的层级深度。上述复杂报表引擎方法存在一些问题:同层级同类型的字段通常会分布在多个散列表中,没有统一维护且访问效率低;散列表的嵌套结构决定了从上层到下层的快速访问特性,但从下层到上层需要单独的数据结构来实现,造成逻辑的分离;当前方案的设计思路为先加载数据并完成单元格计算,再组成嵌套的散列表结构,最后完成推导,执行过程经过多个阶段,推导耗时长。
技术实现思路
本专利技术的目的在于提供一种复杂报表引擎方法及装置,以解决现有复杂报表引擎方法存在的没有统一维护且访问效率低,造成逻辑的分离及行过程经过多个阶段,推导耗时长的问题。为了解决上述问题,本专利技术提供如下技术方案:一种复杂报表引擎方法包括以下步骤:S1、根据用户自行配置的报表模板,生成一棵或N棵初始状态的树;S2、依次从步骤S1的每棵树根节点到叶子节点逐层加载数据;S3、根据步骤S2中数据条数复制树节点及分配值,生成一棵新的树;S4、重复步骤S2和S3至完成数据加载;S5、将同一个模板树节点扩展出来的具有同层级的节点通过链表统一维护。上述复杂报表引擎方法是基于改进后的B树算法,对复杂报表进行分层的、有父子格关系的推导,能够基于用于自定义的模板进行数据的加载和复制单元格,并推导产生具有层次和分组关系的复杂表格,过程中采用树形算法、惰性求值方法,使本专利技术具有推导速度快、内存开销低、公式使用灵活等优势,其中链表可以实现对拥有相同母单元格的所有单元格的快速访问;克服了现有基于嵌套式列表的复杂报表推算算法存在的问题。进一步的,步骤S1中多棵树时树之间交叉或不交叉;树之间交叉时,一个节点最多拥有两个父节点。进一步的,步骤S2中复制出来的节点会连同子节点一并复制,从而生成一棵新的树;新的树代表由模板单元格复制和新产生的单元格。进一步的,步骤S1中的树为对称或非对称结构;树的初始结构是由用户自定义设计,可以是任意形态,其优势是没有模板形态的限制,用户配什么样式的模板都可以。进一步的,步骤S2至S4中加载的数据是根据当前节点对应单元格的配置的具有固定顺序的单元格数据;便于存储和访问。进一步的,固定顺序为升序、降序排列、自定义排序中任一种。一种复杂报表引擎装置包括存储器:用于存储可执行指令;处理器:用于执行所述存储器中存储的可执行指令,实现一种复杂报表引擎方法。与现有技术相比,本专利技术具有以下有益效果:(1)本专利技术实现了复杂报表的分级推导,从根节点到叶子节点逐层分阶段加载数据并复制形成单元格组,每个复制出来的单元格连同其子单元格构成一棵新的子树,推导过程不改变树的层级。(2)本专利技术中复杂报表分级推导策略,将推导过程进行了拆分,并在单级推导过程引入惰性求值算法,在本层级所有节点推导完成后进行坐标位置的统一计算,实现了计算的延迟,可减少推导过程中没必要的计算操作。(3)本专利技术中双向链表,在获取某类单元格的多个连续分组或全量分组数据时拥有较高的效率,可避免遍历节点等复杂的扫描操作。附图说明为了更清楚地说明本专利技术具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,其中:图1为复杂报表推导算法采用的树形结构。图2为图1的缩略拓扑图。具体实施方式为了使本专利技术的目的、技术方案和优点更加清楚,下面将结合图1至图2对本专利技术作进一步地详细描述,所描述的实施例不应视为对本专利技术的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本专利技术保护的范围。对本专利技术实施例进行进一步详细说明之前,对本专利技术实施例中涉及的名词和术语进行说明,本专利技术实施例中涉及的名词和术语适用于如下的解释。复杂报表:拥有复杂的层级关系的二维表格,名称为(Report)。复杂报表包含维度和度量指标,支持对单个或一组指标进行横向或纵向排版,支持按多个维度组合对指标进行分组展示或直接明细展示。报表模板:定义报表形态的一组样式,全称为(ReportTemplate)。报表模板由一组单元格组成,包含单元格元素、单元格坐标、单元格间关系、单元格条件等信息。基于报表模板进行数据加载和单元格推导,即可生成复杂报表。单元格:报表的最小单元,对应一个具体的指标属性,名称为(Cell)。单元格作为指标的容器存储指标值,根据指标取值结果,会生成一个或多个单元格。单元格支持横向、纵向、不扩展三种展开方式,每个单元格可通过横纵坐标点标识位置。合并单元格:将多个单元格合并,形成的跨行、跨列的单元格。合并单元格的位置除了横纵坐标起始点外,还包含横向跨度(RowSpan)和纵向跨度(ColSpan)两个属性,其他属性与单元格相同。合并单元格的生成有两种场景,一种是在模板配置时定义,一种是在推导过程中因子单元格扩展而被撑开(其本质是单元格合并)。单元格关联:单元格间的关联关系,一个单元格拥有单个或多个但最多两个父单元格,一个单元格可拥有多个子单元格。单元格关联后不允许形成无向环,可以不具备对称性(即同一单元格向上的两条单元格链路节点数可以不相等)。通常父子格关系对应了指标的层级关系,交叉表是一个单元格拥有两个父单元格的特殊形态。单元格条件:应用在单元格指标值上的过滤条件。过滤条件可以影响单元格指标值加载的最终结果,过虑字段可以是当前单元格指标,也可以是当前单元格的任意层级的父单元格。单元格排序:应用在单元格指标值上的排序规则。排序规则只会影响指标值的展示顺序,并不影响结果条数。排序支持升序和降序,规则可以是按当前单元格的值,也可以是其它单元格的值(即根据其它单元格值得排序映射到当前单元格,这两个单元格隐含着1对1的绑定关系)。实施例1如图1所示,一种复杂报表引擎方法为用户配置好的报表模板生成一棵或N棵初始状态的树作为模板树,模板树的节点代表一个维度或度量指标,指标值为一个集合;推导过程就是从树的根节点到叶子节点逐层加载节点的数据值,数据加载支持从数据库、用户自定义常量值、基于其他指标的计算公式;模板树节点完成数据加载时,会进行节点复制,该节点复制会连带子节点一起进行,其实质是复制出以当前节点为根节点的多棵子树;最终以上数据加载和复制过程均会应本文档来自技高网...

【技术保护点】
1.一种复杂报表引擎方法,其特征在于,包括以下步骤:/nS1、根据用户自行配置的报表模板,生成一棵或N棵初始状态的树;/nS2、依次从步骤S1的每棵树根节点到叶子节点逐层加载数据;/nS3、根据步骤S2中数据条数复制树节点及分配值,生成一棵新的树;/nS4、重复步骤S2和S3至完成数据加载;/nS5、将同一个模板树节点扩展出来的具有同层级的节点通过链表统一维护。/n

【技术特征摘要】
1.一种复杂报表引擎方法,其特征在于,包括以下步骤:
S1、根据用户自行配置的报表模板,生成一棵或N棵初始状态的树;
S2、依次从步骤S1的每棵树根节点到叶子节点逐层加载数据;
S3、根据步骤S2中数据条数复制树节点及分配值,生成一棵新的树;
S4、重复步骤S2和S3至完成数据加载;
S5、将同一个模板树节点扩展出来的具有同层级的节点通过链表统一维护。


2.根据权利要求1所述的一种复杂报表引擎方法,其特征在于,步骤S1中多棵树时树之间交叉或不交叉;树之间交叉时,一个节点最多拥有两个父节点。


3.根据权利要求1所述的一种复杂报表引擎方法,其特征在于,步骤S2中复制出来的节点会连...

【专利技术属性】
技术研发人员:查文宇张达巩亚辉殷腾蛟
申请(专利权)人:成都四方伟业软件股份有限公司
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1