著录项信息
专利名称 | 数据汇总装置和数据汇总方法 |
申请号 | CN201210371809.6 | 申请日期 | 2012-09-28 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2013-01-09 | 公开/公告号 | CN102867066A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 用友软件股份有限公司 | 申请人地址 | 北京市海淀区北清路68号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 用友网络科技股份有限公司 | 当前权利人 | 用友网络科技股份有限公司 |
发明人 | 童志杰 |
代理机构 | 北京友联知识产权代理事务所(普通合伙) | 代理人 | 尚志峰;汪海屏 |
摘要
本发明提供了一种数据汇总装置,包括:获取单元,接收用户提交的变更单元,获取变更单元的维度信息;查找单元,根据维度信息查找出变更单元的上级数据单元;汇总单元,根据变更单元修改上级数据单元的数据。本发明还提供了一种数据汇总方法。根据本发明的技术方案,可提供更加轻量级的数据汇总方案,实现多维数据的实时汇总,保证高效率的内存汇总,且能够保证在业务发生的时候同步进行数据汇总。
1.一种数据汇总装置,其特征在于,包括:
获取单元,接收用户提交的变更单元,获取所述变更单元的维度信息;
查找单元,根据所述维度信息从关系型数据库中查找出所述变更单元的上级数据单元;
汇总单元,根据所述变更单元修改所述上级数据单元的数据,并将所述变更单元的数据和更新后的所述上级数据单元的数据写入所述关系型数据库;
遍历子单元,遍历所述变更单元中的每个数据单元,取出所述每个数据单元的维度信息;
计算子单元,计算出所述每个数据单元的每个维度上的上级维度成员列表;
合并子单元,在上级维度成员列表中,合并具有相同维度的上级维度成员,得到所述上级数据单元。
2.根据权利要求1所述的数据汇总装置,其特征在于,在所述用户选择的汇总方式为增量汇总方式时,所述汇总单元包括:
提取子单元,根据所述变更单元的维度信息从所述关系型数据库中提取出原数据单元,并计算出所述变更单元与所述原数据单元之间的差异;
递归子单元,从所述变更单元开始逐级递归向上汇总,将所述差异累加至所述变更单元的所有上级数据单元中。
3.根据权利要求2所述的数据汇总装置,其特征在于,还包括:锁定单元,在查找所述关系型数据库中的所述原数据单元时,锁定所述上级数据单元中的数据;
解锁单元,在汇总结束后,对所述上级数据单元中的数据进行解锁。
4.根据权利要求1至3中任一项所述的数据汇总装置,其特征在于,在所述用户选择的汇总方式为全局汇总方式时,所述数据汇总装置还包括:清除单元,清除原汇总数据,保留末级数据;
分组单元,根据选定的维度对所述变更单元进行分组得到多个单元变更子集;
所述汇总单元还用于依据所述末级数据,从每个所述变更单元子集开始逐级递归向上汇总,生成所述变更单元的所有上级数据单元的汇总数据。
5.一种数据汇总方法,其特征在于,包括以下步骤:
步骤302,接收用户提交的变更单元,获取所述变更单元的维度信息;
步骤304,根据所述维度信息从关系型数据库中查找出所述变更单元的上级数据单元;
步骤306,根据所述变更单元修改所述上级数据单元的数据,并将所述变更单元的数据和更新后的所述上级数据单元的数据写入所述关系型数据库;所述步骤304具体包括:遍历所述变更单元中的每个数据单元,取出所述每个数据单元的维度信息;
计算出所述每个数据单元的每个维度上的上级维度成员列表;
在上级维度成员列表中,合并具有相同维度的上级维度成员,得到所述上级数据单元。
6.根据权利要求5所述的数据汇总方法,其特征在于,在所述用户选择的汇总方式为增量汇总方式时,所述步骤306具体包括:根据所述变更单元的维度信息从所述关系型数据库中提取出原数据单元,并计算出所述变更单元与所述原数据单元之间的差异;
从所述变更单元开始逐级递归向上汇总,将所述差异累加至所述变更单元的所有上级数据单元中。
7.根据权利要求6所述的数据汇总方法,其特征在于,所述步骤306还包括:在查找所述关系型数据库中的所述原数据单元时,锁定所述上级数据单元中的数据;
在汇总结束后,对所述上级数据单元中的数据进行解锁。
8.根据权利要求5至7中任一项所述的数据汇总方法,其特征在于,在所述用户选择的汇总方式为全局汇总方式时,所述步骤302还包括:清除原汇总数据,保留末级数据,根据选定的维度对所述变更单元进行分组得到多个变更单元子集;
所述步骤306具体包括:依据所述末级数据,从每个所述变更单元子集开始逐级递归向上汇总,生成所述变更单元的所有上级数据单元的汇总数据。
数据汇总装置和数据汇总方法\n技术领域\n[0001] 本发明涉及计算机技术领域,具体而言,涉及一种数据汇总装置和一种数据汇总方法。\n背景技术\n[0002] 在复杂的业务系统中,很多业务数据都是有层次性的,上级层次的数据需要实时对下级层次的业务数据进行自动汇总。\n[0003] 自动汇总要求在末级维度成员的数据逐层汇总到上级成员,所有上级成员的数据都是由下级经过汇总计算得出来的。举例如下:\n[0004] 在企业的全面预算领域中,预算编制的方式是自下而上(末级单位填报预算数据,上级单位自动汇总下级单位填制的预算数据)\n[0005] 若末级单位的用户提交了一个预算数据:2011年7月A部门差旅费5000元,表达如下:[2011年3季7月][部门d][差旅费]5000,假设在时间维度上的层次关系为:\n[0006] [2011年3季7月][2011年3季][2011年];\n[0007] 在组织维度上的层次关系为:[部门d][公司a][集团g];\n[0008] 在科目维度上的层次关系为:[差旅费][管理费用];\n[0009] 那么,相应地,该预算数据的所有上级数据都要加上5000,即:\n[0010] [2011年3季][部门d][差旅费]+5000;\n[0011] [2011年3季7月][公司a][差旅费]+5000;\n[0012] [2011年3季7月][部门d][管理费用]+5000;\n[0013] [2011年3季][公司a][差旅费]+5000;\n[0014] [2011年][部门d][差旅费]+5000;\n[0015] [2011年][集团g][管理费用]+5000。\n[0016] 总计有3x3x2-1=17个上级数据需要被加上5000。\n[0017] 相关的数据汇总方法例如联机分析处理系统(OLAP,Online Analytic Processing)方法,可以通过定义数据立方体(Cube)和维度(Dimension),对业务数据进行类似的聚合计算。但是OLAP需要对数据立方体进行预先计算(物化Cube),因而无法保证数据汇总的实时性,无法满足业务的要求。另外,部署和使用OLAP的成本比较高,也会造成巨大的资源浪费。\n[0018] 因此,需要一种新的汇总方式,可保证在业务发生的同时能够进行数据汇总,保证数据汇总的实时性。\n发明内容\n[0019] 本发明正是基于上述问题,提出了一种数据汇总技术,可保证在业务发生的同时能够进行数据汇总,保证数据汇总的实时性。\n[0020] 有鉴于此,根据本发明的一个方面,提供了一种数据汇总装置,包括:获取单元,接收用户提交的变更单元,获取所述变更单元的维度信息;查找单元,根据所述维度信息从关系型数据库中查找出所述变更单元的上级数据单元;汇总单元,根据所述变更单元修改所述上级数据单元的数据。\n[0021] 在关系型数据库管理系统中实现多维数据的实时汇总,在提交变更单元数据时,根据变更单元的维度信息可得到上级数据单元的维度信息,从而可定位到上级数据单元,依据提交的变更单元数据就可以更改上级数据单元的数据,完成数据汇总,从而实现在业务发生时,可同时进行数据汇总,具有实时性。\n[0022] 在上述技术方案中,优选的,所述查找单元包括:遍历子单元,遍历所述变更单元中的每个数据单元,取出所述每个数据单元的维度信息;计算子单元,计算出所述每个数据单元的每个维度上的上级维度成员列表;合并子单元,在上级维度成员列表中,合并具有相同维度的上级维度成员,得到所述上级数据单元。\n[0023] 变更单元中包括至少一个数据单元,每个数据单元包含了各自的维度信息,依据多维数据的预先定义,可根据维度、维度的层次以及维度的成员得到每个数据单元的每个维度上的上级维度成员列表,从而确定上级数据单元。\n[0024] 在上述技术方案中,优选的,在所述用户选择的汇总方式为增量汇总方式时,所述汇总单元包括:提取子单元,根据所述变更单元的维度信息从所述关系型数据库中提取出所述原数据单元,并计算出所述变更单元与所述原数据单元之间的差异;递归子单元,从所述变更单元开始逐级递归向上汇总,将所述差异累加至所述变更单元的所有上级数据单元中。\n[0025] 一般来说,用户日常提交的变更单元数据可能仅仅是数据值的变化,但也可能是维度结构的变化,针对不同情况有不同的汇总方式。在数据值变化的情况下,需要计算出当前新数据与原数据之间的差异,然后逐级类型该差异,提高了汇总效率。\n[0026] 在上述技术方案中,优选的,还可以包括:锁定单元,在查找所述关系型数据库中的所述原数据单元时,锁定所述上级数据单元中的数据;更新单元,将所述变更单元和更新后的所述上级数据单元写入所述关系型数据库;解锁单元,在汇总结束后,对所述上级数据单元中的数据进行解锁。\n[0027] 为了防止多线程并发造成的数据错误,在查询过程中,需对上级数据单元中的数据进行加锁。\n[0028] 在上述任一技术方案中,优选的,在所述用户选择的汇总方式为全局汇总方式时,所述数据汇总装置还包括:清除单元,清除原汇总数据,保留末级数据;分组单元,根据选定的维度对所述变更单元进行分组得到多个单元变更子集;所述汇总单元还用于依据所述末级数据,从每个所述变更单元子集开始逐级递归向上汇总,生成所述变更单元的所有上级数据单元的汇总数据。\n[0029] 若用户提交的变更单元数据涉及的是维度结构的变化,那么需采用全局汇总方式,清空所有的原汇总数据,但保留末级数据,根据末级数据和更改的维度结构重新汇总数据,虽然没有用到差异数据,但仍根据提交的变更单元数据的维度信息查找到上级维度成员列表,并在汇总时,逐级递归向上汇总。\n[0030] 根据本发明的另一方面,还提供了一种数据汇总方法,包括以下步骤:步骤302,接收用户提交的变更单元,获取所述变更单元的维度信息;步骤304,根据所述维度信息从关系型数据库中查找出所述变更单元的上级数据单元;步骤306,根据所述变更单元修改所述上级数据单元的数据。\n[0031] 在关系型数据库管理系统中实现多维数据的实时汇总,在提交变更单元数据时,根据变更单元的维度信息可得到上级数据单元的维度信息,从而可定位到上级数据单元,依据提交的变更单元数据就可以更改上级数据单元的数据,完成数据汇总,从而实现在业务发生时,可同时进行数据汇总,具有实时性。\n[0032] 在上述技术方案中,优选的,在所述用户选择的汇总方式为增量汇总方式时,所述步骤304具体包括:遍历所述变更单元中的每个数据单元,取出所述每个数据单元的维度信息;计算出所述每个数据单元的每个维度上的上级维度成员列表;在上级维度成员列表中,合并具有相同维度的上级维度成员,得到所述上级数据单元。\n[0033] 变更单元中包括至少一个数据单元,每个数据单元包含了各自的维度信息,依据多维数据的预先定义,可根据维度、维度的层次以及维度的成员得到每个数据单元的每个维度上的上级维度成员列表,从而确定上级数据单元。\n[0034] 在上述技术方案中,优选的,所述步骤306具体包括:根据所述变更单元的维度信息从所述关系型数据库中提取出所述原数据单元,并计算出所述变更单元与所述原数据单元之间的差异;从所述变更单元开始逐级递归向上汇总,将所述差异累加至所述变更单元的所有上级数据单元中。\n[0035] 一般来说,用户日常提交的变更单元数据可能仅仅是数据值的变化,但也可能是维度结构的变化,针对不同情况有不同的汇总方式。在数据值变化的情况下,需要计算出当前新数据与原数据之间的差异,然后逐级类型该差异,提高了汇总效率。\n[0036] 在上述技术方案中,优选的,所述步骤306还包括:在查找所述关系型数据库中的所述原数据单元时,锁定所述上级数据单元中的数据;将所述变更单元和更新后的所述上级数据单元写入所述关系型数据库;在汇总结束后,对所述上级数据单元中的数据进行解锁。\n[0037] 为了防止多线程并发造成的数据错误,在查询过程中,需对上级数据单元中的数据进行加锁。\n[0038] 在上述任一技术方案中,优选的,在所述用户选择的汇总方式为全局汇总方式时,所述步骤302还包括:清除原汇总数据,保留末级数据,根据选定的维度对所述进行分组得到多个变更单元子集;所述步骤306具体包括:依据所述末级数据,从每个所述变更单元子集开始逐级递归向上汇总,生成所述变更单元的所有上级数据单元的汇总数据。\n[0039] 若用户提交的变更单元数据涉及的是维度结构的变化,那么需采用全局汇总方式,清空所有的原汇总数据,但保留末级数据,根据末级数据和更改的维度结构重新汇总数据,虽然没有用到差异数据,但仍根据提交的变更单元数据的维度信息查找到上级维度成员列表,并在汇总时,逐级递归向上汇总。\n[0040] 本发明提出了一种更加轻量级的多维数据汇总技术,通过高效率的内存汇总,在关系型数据库管理系统上,实现多维数据的实时汇总,即业务数据按照多个维度,多个层次向上逐层汇总。并保证了很高的效率,不影响正常业务的进行。相比较OLAP的物化汇总方案,该方案更加轻便且容易实施,节省了汇总计算成本,而且保证了汇总数据的实时性,业务发生的时候同时同步进行数据汇总。并且汇总数据和原始数据在一个数据表中存储,方便随时查询分析。\n附图说明\n[0041] 图1A至图1C示出了根据本发明的实施例的维度结构图;\n[0042] 图2示出了根据本发明的实施例的数据汇总装置的框图;\n[0043] 图3示出了根据本发明的一个实施例的数据汇总方法的流程图;\n[0044] 图4示出了根据本发明的又一实施例的数据汇总方法的流程图;\n[0045] 图5示出了根据本发明的实施例的增量汇总方法的流程图;\n[0046] 图6示出了根据本发明的实施例的全局汇总方法的流程图。\n具体实施方式\n[0047] 为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。\n[0048] 在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。\n[0049] 首先结合图1A至图1C来说明在本发明的实施例中的多维数据的表达和存储。\n[0050] 对于业务数据,需要预先设定数据的维度(Dimension)。\n[0051] 维度(Dimension):是人们观察数据的特定角度,是考虑问题时的一类属性,属性集合构成一个维度,例如时间维度,组织维度,产品维度等等。\n[0052] 维度的层次(Level):是对维度的进一步的细分,如时间维度可以细分为,年层次,季度层次,月层次。\n[0053] 维度的成员(Member):维度的具体取值,是数据在某个维度中位置的描述,如“2012年3月”是数据在时间维度上的位置的描述。\n[0054] 通过定义多个不同的维度,能够更加灵活地观测和分析数据,每个维度的层次关系是以树形结构进行存储的,这样便于数据的汇总。\n[0055] 多维数据集(Cube):由多个维度组成的数据载体,Cube就像一个坐标系,其中的每一个维度(Dimension)代表一个坐标轴。\n[0056] 为了便于更加清晰的理解本发明,在本发明的实施例中以三维为例,给出了维度结构图,如图1A至图1C所示。\n[0057] 在下面的实施例中,使用RDBMS(relational database management system,关系型数据库管理系统)来存储多维数据集,多维数据集的数据表结构如下表所示:\n[0058] \n 坐标 年 季度 月 组织 科目 数据\n 2011.3.7.O1.CL 2011 3 7 部门d 差旅费 5000\n 2011.3.~.O1.CL 2011 3 ~ 部门d 差旅费 8000\n 2011.~.~.O1.CL 2011 ~ ~ 部门d 差旅费 32000\n[0059] 从上面的数据可以看出,汇总数据(最后一行数据)和末级数据(第一行数据)是存在同一张数据库表里面的。其中坐标这一列是把各个维度的主键字段,经过压缩映射后,组合而形成的一个字符串,坐标字段是全表唯一的,不能有两行数据有重复的坐标值。根据坐标值,可以很方便而准确的查询出多维数据的值。压缩映射的目的是为了减少存储空间,同时提高查询的性能和效率。\n[0060] 接下来结合图2来说明根据本发明的数据汇总装置。\n[0061] 如图2所示,根据本发明的实施例的数据汇总装置100包括:获取单元102,接收用户提交的变更单元,获取所述变更单元的维度信息;查找单元104,根据所述维度信息从关系型数据库中查找出所述变更单元的上级数据单元;汇总单元106,根据所述变更单元修改所述上级数据单元的数据,并将所述变更单元的数据和更新后的所述上级数据单元的数据写入所述关系型数据库。\n[0062] 在关系型数据库管理系统中实现多维数据的实时汇总,在提交变更单元数据时,根据变更单元的维度信息可得到上级数据单元的维度信息,从而可定位到上级数据单元,依据提交的变更单元数据就可以更改上级数据单元的数据,完成数据汇总,从而实现在业务发生时,可同时进行数据汇总,具有实时性。\n[0063] 优选的,所述查找单元104可以包括:遍历子单元1042,遍历所述变更单元中的每个数据单元,取出所述每个数据单元的维度信息;计算子单元1044,计算出所述每个数据单元的每个维度上的上级维度成员列表;合并子单元1046,在上级维度成员列表中,合并具有相同维度的上级维度成员,得到所述上级数据单元。\n[0064] 变更单元中包括至少一个数据单元,每个数据单元包含了各自的维度信息,依据多维数据的预先定义,可根据维度、维度的层次以及维度的成员得到每个数据单元的每个维度上的上级维度成员列表,从而确定上级数据单元。\n[0065] 在上述技术方案中,优选的,在所述用户选择的汇总方式为增量汇总方式时,所述汇总单元106包括:提取子单元1062,根据所述变更单元的维度信息从所述关系型数据库中提取出所述原数据单元,并计算出所述变更单元与所述原数据单元之间的差异;递归子单元1064,从所述变更单元开始逐级递归向上汇总,将所述差异累加至所述变更单元的所有上级数据单元中。\n[0066] 一般来说,用户日常提交的变更单元数据可能仅仅是数据值的变化,但也可能是维度结构的变化,针对不同情况有不同的汇总方式。在数据值变化的情况下,需要计算出当前新数据与原数据之间的差异,然后逐级类型该差异,提高了汇总效率。\n[0067] 优选的,该数据汇总装置100还可以包括:锁定单元108,在查找所述关系型数据库中的所述原数据单元时,锁定所述上级数据单元中的数据;解锁单元110,在汇总结束后,对所述上级数据单元中的数据进行解锁。\n[0068] 为了防止多线程并发造成的数据错误,在查询过程中,需对上级数据单元中的数据进行加锁。\n[0069] 在上述任一技术方案中,优选的,在所述用户选择的汇总方式为全局汇总方式时,所述数据汇总装置还包括:清除单元112,清除原汇总数据,保留末级数据;分组单元114,根据选定的维度对所述变更单元进行分组得到多个单元变更子集;所述汇总单元106还用于依据所述末级数据,从每个所述变更单元子集开始逐级递归向上汇总,生成所述变更单元的所有上级数据单元的汇总数据。\n[0070] 若用户提交的变更单元数据涉及的是维度结构的变化,那么需采用全局汇总方式,清空所有的原汇总数据,但保留末级数据,根据末级数据和更改的维度结构重新汇总数据,虽然没有用到差异数据,但仍根据提交的变更单元数据的维度信息查找到上级维度成员列表,并在汇总时,逐级递归向上汇总。\n[0071] 下面结合图3至图6进一步说明根据本发明的数据汇总方法。\n[0072] 如图3所示,根据本发明的实施例的数据汇总方法,包括以下步骤:步骤302,接收用户提交的变更单元,获取变更单元的维度信息;步骤304,根据维度信息从关系型数据库中查找出变更单元的上级数据单元;步骤306,根据变更单元修改上级数据单元的数据,并将变更单元的数据和更新后的上级数据单元的数据写入关系型数据库。\n[0073] 在关系型数据库管理系统中实现多维数据的实时汇总,在提交变更单元数据时,根据变更单元的维度信息可得到上级数据单元的维度信息,从而可定位到上级数据单元,依据提交的变更单元数据就可以更改上级数据单元的数据,完成数据汇总,从而实现在业务发生时,可同时进行数据汇总,具有实时性。\n[0074] 优选的,在用户选择的汇总方式为增量汇总方式时,所述步骤304具体包括:遍历所述变更单元中的每个数据单元,取出所述每个数据单元的维度信息;计算出所述每个数据单元的每个维度上的上级维度成员列表;在上级维度成员列表中,合并具有相同维度的上级维度成员,得到所述上级数据单元。\n[0075] 变更单元中包括至少一个数据单元,每个数据单元包含了各自的维度信息,依据多维数据的预先定义,可根据维度、维度的层次以及维度的成员得到每个数据单元的每个维度上的上级维度成员列表,从而确定上级数据单元。\n[0076] 优选的,所述步骤306具体可包括:根据所述变更单元的维度信息从所述关系型数据库中提取出所述原数据单元,并计算出所述变更单元与所述原数据单元之间的差异;\n从所述变更单元开始逐级递归向上汇总,将所述差异累加至所述变更单元的所有上级数据单元中。\n[0077] 一般来说,用户日常提交的变更单元数据可能仅仅是数据值的变化,但也可能是维度结构的变化,针对不同情况有不同的汇总方式。在数据值变化的情况下,需要计算出当前新数据与原数据之间的差异,然后逐级类型该差异,提高了汇总效率。\n[0078] 优选的,所述步骤306还可以包括:在查找所述关系型数据库中的所述原数据单元时,锁定所述上级数据单元中的数据;在汇总结束后,对所述上级数据单元中的数据进行解锁。\n[0079] 为了防止多线程并发造成的数据错误,在查询过程中,需对上级数据单元中的数据进行加锁。\n[0080] 在上述任一技术方案中,优选的,在所述用户选择的汇总方式为全局汇总方式时,所述步骤302还包括:清除原汇总数据,保留末级数据,根据选定的维度对所述进行分组得到多个变更单元子集;所述步骤306具体包括:依据所述末级数据,从每个所述变更单元子集开始逐级递归向上汇总,生成所述变更单元的所有上级数据单元的汇总数据。\n[0081] 若用户提交的变更单元数据涉及的是维度结构的变化,那么需采用全局汇总方式,清空所有的原汇总数据,但保留末级数据,根据末级数据和更改的维度结构重新汇总数据,虽然没有用到差异数据,但仍根据提交的变更单元数据的维度信息查找到上级维度成员列表,并在汇总时,逐级递归向上汇总。\n[0082] 如图4所示,增量汇总的算法可以分为4个步骤,分别是:\n[0083] 步骤402:计算上级单元的维度信息,该步骤根据用户提交的变更单元集C,遍历C中的每一个数据单元(Cell),取出该数据单元的维度信息,计算出该数据单元在每个维度上的上级维度成员列表,并把不同维度上的上级成员列表做笛卡尔运算,得到上级数据单元的坐标,最后把重复的坐标进行合并。以上表为例,对于C中的一个Cell:[2011年3季\n7月][部门d][差旅费],共可以计算得到17个上级单元坐标,把C中的每个Cell都进行一次计算后可以得到上级坐标的一个列表。\n[0084] 步骤404:获取步骤402的计算结果,根据坐标集合,查询关系型数据库管理系统,得到上级数据单元的列表集合P,同时查询集合C在数据库中的原有数据单元集合C0,在此过程中需要对P中的数据进行加锁,以防止多线程并发的时候可能造成的数据错误。\n[0085] 步骤406:在内存中进行增量汇总计算,并把计算结果写入集合P。该步骤的具体处理流程,请参见图5。\n[0086] 步骤408:提交变更单元集C和上级数据单元列表集合P中发生变更的数据单元到关系型数据库。完成增量计算后,向数据库中写入变更的数据,事务完成,同时释放在步骤404中对数据所加的锁。\n[0087] 如图5所示,在该实施例中,使用递归算法自底而上进行增量汇总的计算,从集合C中的数据单元开始递归向上汇总,在步骤502,判断集合C中是否有剩余的数据单元,如果没有,说明处理结束,如果有,则继续下面的处理过程。在步骤504,比较末级单元格的新数据和上一个版本的数据之间的差异,计算出数据增量diff(即差异)。在步骤506,计算该数据单元在某个维度i上取直接上级的上级单元Pi的坐标。\n[0088] 在步骤508,判断该上级数据单元的坐标Pi是否为空,若空,则进入步骤514,若不为空,则进入步骤510。\n[0089] 在步骤510,根据坐标Pi查询该上级数据单元。在步骤512,然后把这个diff累加到查询到的上级数据单元上,即提交的数据单元在某个维度上的父亲单元格上,然后以父单元为基础,继续进行递归调用,直到汇总过程结束,需要注意的是,如果在P中不存在父单元,系统会自动生成一个数据单元。\n[0090] 在步骤514,若坐标为空,则继续判断是否有下个维度,若有下个维度,则继续判断下个维度下上级数据单元的坐标,回到步骤506。若没有下个维度,则进入步骤502,继续处理C中剩余的数据单元。\n[0091] 该汇总算法中关键部分的Java示意代码如下:\n[0092] \n[0093] \n[0094] 当用户提交的数据单元涉及维度机构的变化时,采用如图6所示的全局汇总方法。\n[0095] 增量汇总的前提是数据库中的汇总数据是正确,仅对局部的数据进行改变,以最小的计算量去修改汇总数据,而全局汇总的情况不同,由于维度的结构发生了变更,比如用户增加了维度,或者修改了维度成员的层次结构,导致原来的汇总数据有问题。因此,需要先清除所有的汇总数据,保留末级数据,再重新由末级数据数据重新汇总生成新的汇总数据。如图6所示,全局汇总的具体算法可以分为以下几个步骤:\n[0096] 步骤602:清除原汇总数据。步骤604:把末级数据按照某个维度例如科目进行分组,形成多个变更单元子集C,之所以选择科目这个维度进行分组,主要原因是数据在科目上的区分度较好,按照科目进行分组,能够保证每个变更单元子集合C的单元数目控制在一定的规模,不会太大,否则会给服务器的内存造成很大的压力。\n[0097] 步骤606:对于每个变更集C,调用增量汇总的算法incSum,图5所示的算法,重新把上级的汇总数据进行生成。在增量汇总的情况下,大部分时候上级数据单元列表集合P中的元素都是空的,系统会自动生成上级数据单元。而且增量数据的计算和增量汇总的情况稍有不同,在增量汇总的情况下:diff=C.getCell(cell).getValue()-C0.getCell(cell).getValue();\n[0098] 而在全局汇总的情况下:diff=C.getCell(cell).getValue()。\n[0099] 综上所述,本发明提出了一种更加轻量级的多维数据汇总技术,通过高效率的内存汇总,在RDBMS上,实现多维数据的实时汇总,即业务数据按照多个维度,多个层次向上逐层汇总。并保证了很高的效率,不影响正常业务的进行。相比较OLAP的物化汇总方案,该方案更加轻便且容易实施,节省了IT成本,而且保证了汇总数据的实时性,业务发生的时候同时同步进行数据汇总。并且汇总数据和原始数据在一个数据表中存储,方便随时查询分析。本发明可应用于涉及到需要对多维度数据进行高效率实时汇总的业务领域。\n[0100] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
法律信息
- 2015-10-21
- 2015-10-14
著录事项变更
申请人由用友软件股份有限公司变更为用友网络科技股份有限公司
地址由100094 北京市海淀区北清路68号用友软件园变更为100094 北京市海淀区北清路68号
- 2013-02-20
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201210371809.6
申请日: 2012.09.28
- 2013-01-09
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2007-04-18
|
2006-11-23
| | |
2
| |
2010-10-20
|
2010-06-12
| | |
3
| |
2011-10-12
|
2010-04-02
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |