著录项信息
专利名称 | 基于关系型数据库的数据汇总装置和方法 |
申请号 | CN201210369871.1 | 申请日期 | 2012-09-28 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2013-01-09 | 公开/公告号 | CN102867065A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 用友软件股份有限公司 | 申请人地址 | 北京市海淀区北清路68号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 用友网络科技股份有限公司 | 当前权利人 | 用友网络科技股份有限公司 |
发明人 | 童志杰 |
代理机构 | 北京友联知识产权代理事务所(普通合伙) | 代理人 | 尚志峰;汪海屏 |
摘要
本发明提供了一种基于关系型数据库的数据汇总装置,包括:定义单元,定义业务数据的每个维度的优先级;接收单元,接收用户提交的变更单元;查找单元,在变更单元的多个维度上的上级数据单元中,查找出在优先级最高的维度上的上级数据单元;汇总单元,从变更单元开始向优先级最高的维度上的上级数据单元进行数据汇总。根据本发明的技术方案,能够允许数据在非末级维度上录入,可对汇总路径的优先级进行判断,保证上级的汇总数据是没有歧义的。本发明还提供了一种基于关系型数据库的数据汇总方法。
基于关系型数据库的数据汇总装置和方法\n技术领域\n[0001] 本发明涉及计算机技术领域,具体而言,涉及一种基于关系型数据库的数据汇总装置和一种基于关系型数据库的数据汇总方法。\n背景技术\n[0002] 在复杂的业务系统中,很多业务数据都是有层次性的,上级层次的数据需要实时对下级层次的业务数据进行自动汇总。\n[0003] 自动汇总要求在末级维度成员的数据逐层汇总到上级成员,所有上级成员的数据都是由下级经过汇总计算得出来的。\n[0004] 但是在某些业务场景下,用户可能并不直接在末级录入数据,而是在上级维度录入数据,下级维度的数据为空,这种情况下,用户仍然希望能够把录入的数据继续向上级汇总。也就是说,我们无法根据维度的层次关系来判定用户录入的数据是否是末级数据。\n[0005] 举例如下:假设在时间维度上的层次关系为:\n[0006] [2011年3季7月]→[2011年3季]→[2011年];\n[0007] 在组织维度上的层次关系为:[部门d]→[公司a]→[集团g];\n[0008] 在科目维度上的层次关系为:[差旅费]→[管理费用]。\n[0009] 用户填写了两个数据:\n[0010] [2011年3季7月][管理费用][部门d]=3000;\n[0011] [2011年3季][差旅费][部门d]=2000;\n[0012] 那么作为上级[2011年3季][管理费用][部门d]是汇总数据,其数据应该是多少呢?2000,3000,5000?还是其他?\n[0013] 图1A展示了数据录入到末级下的汇总数据。图1B展示了数据录入到非末级下的汇总数据。\n[0014] 这种困惑的原因在于没有确定哪些是末级数据,哪些是非末级数据,但是在企业全面预算等业务过程中,这种业务经常发生。在数据仅在末级录入的情况下,无论沿着哪条路径向上汇总,且结果都应该是一样的,但是在允许数据在非末级维度录入的情况下,不对路径的优先级进行判断,数据就会有问题。\n[0015] 因此,需要一种新的汇总方式,允许数据在非末级维度上录入,可选择合适的路径进行汇总,能够保证上级的汇总数据是没有歧义的。\n发明内容\n[0016] 本发明正是基于上述问题,提出了一种数据汇总技术,允许数据在非末级维度上录入,可选择合适的路径进行汇总,能够保证上级的汇总数据是没有歧义的。\n[0017] 有鉴于此,根据本发明的一个方面,提供了一种基于关系型数据库的数据汇总装置,包括:定义单元,定义业务数据的每个维度的优先级;接收单元,接收用户提交的变更单元;查找单元,在所述变更单元的多个维度上的上级数据单元中,查找出在优先级最高的维度上的上级数据单元;汇总单元,从所述变更单元开始向所述优先级最高的维度上的上级数据单元进行数据汇总。\n[0018] 在该技术方案中,预定定义每个维度的优先级,若数据在非末级录入,则选择优先级最高的维度,然后从该维度方向向上汇总,这样就可避免汇总数据的不一致。\n[0019] 在上述技术方案中,优选的,所述汇总单元包括记录子单元,用于将本次汇总的维度优先级信息作为本次汇总路径的优先级记录在所述上级数据单元中,所述汇总单元根据汇总路径的优先级进行数据汇总。\n[0020] 将每次的汇总路径的优先级信息记录下来,在以后的汇总过程中,根据该汇总路径的优先级来判断具体如何进行汇总。\n[0021] 在上述技术方案中,优选的,所述查找单元包括比较子单元,在所述上级数据单元中已记录原汇总路径时,比较所述原汇总路径的优先级与所述本次汇总路径的优先级的高低;所述汇总单元还包括:替换子单元,在所述本次汇总路径的优先级高于所述原汇总路径的优先级时,在汇总时,用所述变更单元的数据替换所述优先级最高的维度上的上级数据单元中的汇总数据。\n[0022] 这种情况说明本维度的汇总优先级高于上级原有的数据的汇总优先级,那就将本维度的汇总数据覆盖上级原来的汇总数据。\n[0023] 在上述技术方案中,优选的,所述汇总单元还可以包括:提取子单元,在所述本次汇总路径的优先级等于所述原汇总路径的优先级时,在汇总时,根据所述变更单元的维度信息从所述关系型数据库中提取出原数据单元;计算子单元,计算出所述变更单元与所述原数据单元之间的差异;累加子单元,从所述变更单元开始逐级递归向上汇总,将所述差异累加至所述变更单元的所有所述上级数据单元中。\n[0024] 这种情况说明上级原有的数据的汇总优先级和本次汇总是同一个维度的,因此只需要计算出本次变更的增量数据,并把该增量数据累加到上级原汇总数据上去。\n[0025] 在上述技术方案中,优选的,所述汇总单元还用于在所述本次汇总路径的优先级小于所述原汇总路径的优先级时,放弃本次汇总。\n[0026] 这种情况说明上级原有的数据是由更高优先级的维度汇总上去的,放弃本维度的汇总。\n[0027] 根据本发明的另一方面,还提供了一种基于关系型数据库的数据汇总方法,包括以下步骤:步骤402,定义业务数据的每个维度的优先级;\n[0028] 步骤404,接收用户提交的变更单元;步骤406,在所述变更单元的多个维度上的上级数据单元中,查找出在优先级最高的维度上的上级数据单元;步骤408,从所述变更单元开始向所述优先级最高的维度上的上级数据单元进行数据汇总。\n[0029] 在该技术方案中,预定定义每个维度的优先级,若数据在非末级录入,则选择优先级最高的维度,然后从该维度方向向上汇总,这样就可避免汇总数据的不一致。\n[0030] 在上述技术方案中,优选的,所述步骤408还可以包括:将本次汇总的维度优先级信息作为本次汇总路径的优先级记录在所述上级数据单元中,根据汇总路径的优先级进行数据汇总。\n[0031] 将每次的汇总路径的优先级信息记录下来,在以后的汇总过程中,根据该汇总路径的优先级来判断具体如何进行汇总。\n[0032] 在上述技术方案中,优选的,所述步骤406还可以包括:在所述上级数据单元中已记录原汇总路径时,比较所述原汇总路径的优先级与所述本次汇总路径的优先级的高低;\n所述步骤408还包括:在所述本次汇总路径的优先级高于所述原汇总路径的优先级时,在汇总时,用所述变更单元的数据替换所述优先级最高的维度上的上级数据单元中的数据。\n[0033] 这种情况说明本维度的汇总优先级高于上级原有的数据的汇总优先级,那就将本维度的汇总数据覆盖上级原来的汇总数据。\n[0034] 在上述技术方案中,优选的,所述步骤408还可以包括:在所述本次汇总路径的优先级等于所述原汇总路径的优先级时,在汇总时,根据所述变更单元的维度信息从所述关系型数据库中提取出原数据单元,并计算出所述变更单元与所述原数据单元之间的差异;\n从所述变更单元开始逐级递归向上汇总,将所述差异累加至所述变更单元的所有所述上级数据单元中。\n[0035] 这种情况说明上级原有的数据的汇总优先级和本次汇总是同一个维度的,因此只需要计算出本次变更的增量数据,并把该增量数据累加到上级原汇总数据上去。\n[0036] 在上述技术方案中,优选的,在所述本次汇总路径的优先级小于所述原汇总路径的优先级时,放弃本次汇总。\n[0037] 这种情况说明上级原有的数据是由更高优先级的维度汇总上去的,放弃本维度的汇总。\n[0038] 本发明提出了一种在允许非末级数据录入的业务场景下,通过定义维度上的汇总优先级,在系统中存在多个汇总路径的情况下,通过选择一条优先路径,实现数据自底而上的汇总,可以解决类似业务场景下的问题。\n附图说明\n[0039] 图1A示出了从末级录入数据的汇总示意图;\n[0040] 图1B示出了从非末级录入数据的汇总示意图;\n[0041] 图2A至图2C示出了根据本发明的实施例的维度结构图;\n[0042] 图3示出了根据本发明的实施例的基于关系型数据库的数据汇总装置的框图;\n[0043] 图4示出了根据本发明的一个实施例的基于关系型数据库的数据汇总方法的流程图;\n[0044] 图5示出了根据本发明的又一实施例的基于关系型数据库的数据汇总方法的流程图。\n具体实施方式\n[0045] 为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。\n[0046] 在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。\n[0047] 首先结合图2A至图2C来说明在本发明的实施例中的多维数据的表达和存储。\n[0048] 对于业务数据,需要预先设定数据的维度(Dimension)。\n[0049] 维度(Dimension):是人们观察数据的特定角度,是考虑问题时的一类属性,属性集合构成一个维度,例如时间维度,组织维度,产品维度等等。\n[0050] 维度的层次(Level):是对维度的进一步的细分,如时间维度可以细分为,年层次,季度层次,月层次。\n[0051] 维度的成员(Member):维度的具体取值,是数据在某个维度中位置的描述,如“2012年3月”是数据在时间维度上的位置的描述。\n[0052] 通过定义多个不同的维度,能够更加灵活地观测和分析数据,每个维度的层次关系是以树形结构进行存储的,这样便于数据的汇总。\n[0053] 多维数据集(Cube):由多个维度组成的数据载体,Cube就像一个坐标系,其中的每一个维度(Dimension)代表一个坐标轴。\n[0054] 为了便于更加清晰的理解本发明,在本发明的实施例中以三维为例,给出了维度结构图,如图2A至图2C所示。\n[0055] 在下面的实施例中,使用RDBMS(relational database management system,关系型数据库管理系统)来存储多维数据集,多维数据集的数据表结构如下表所示:\n[0056] \n坐标 年 季度 月 组织 科目 数据\n2011.3.7.O1.CL 2011 3 7 部门d 差旅费 5000\n2011.3.~.O1.CL 2011 3 ~ 部门d 差旅费 8000\n2011.~.~.O1.CL 2011 ~ ~ 部门d 差旅费 32000\n[0057] 从上面的数据可以看出,汇总数据(最后一行数据)和末级数据(第一行数据)是存在同一张数据库表里面的。其中坐标这一列是把各个维度的主键字段,经过压缩映射后,组合而形成的一个字符串,坐标字段是全表唯一的,不能有两行数据有重复的坐标值。根据坐标值,可以很方便而准确的查询出多维数据的值。压缩映射的目的是为了减少存储空间,同时提高查询的性能和效率。\n[0058] 图3示出了根据本发明的实施例的基于关系型数据库的数据汇总装置的框图。\n[0059] 如图3所示,根据本发明的实施例的基于关系型数据库的数据汇总装置300,包括:定义单元302,定义业务数据的每个维度的优先级;接收单元304,接收用户提交的变更单元;查找单元306,在所述变更单元的多个维度上的上级数据单元中,查找出在优先级最高的维度上的上级数据单元;汇总单元308,从所述变更单元开始向所述优先级最高的维度上的上级数据单元进行数据汇总。\n[0060] 在该技术方案中,预定定义每个维度的优先级,若数据在非末级录入,则选择优先级最高的维度,然后从该维度方向向上汇总,这样就可避免汇总数据的不一致。\n[0061] 在上述技术方案中,优选的,所述汇总单元308包括记录子单元3082,用于将本次汇总的维度优先级信息作为本次汇总路径的优先级记录在所述上级数据单元中,所述汇总单元308根据汇总路径的优先级进行数据汇总。\n[0062] 将每次的汇总路径的优先级信息记录下来,在以后的汇总过程中,根据该汇总路径的优先级来判断具体如何进行汇总。\n[0063] 在上述技术方案中,优选的,所述查找单元306包括比较子单元3062,在所述上级数据单元中已记录原汇总路径时,比较所述原汇总路径的优先级与所述本次汇总路径的优先级的高低;所述汇总单元308还包括:替换子单元3084,在所述本次汇总路径的优先级高于所述原汇总路径的优先级时,在汇总时,用所述变更单元的数据替换所述优先级最高的维度上的上级数据单元中的汇总数据。\n[0064] 这种情况说明本维度的汇总优先级高于上级原有的数据的汇总优先级,那就将本维度的汇总数据覆盖上级原来的汇总数据。\n[0065] 在上述技术方案中,优选的,所述汇总单元308还可以包括:提取子单元3086,在所述本次汇总路径的优先级等于所述原汇总路径的优先级时,在汇总时,根据所述变更单元的维度信息从所述关系型数据库中提取出原数据单元;计算子单元3088,计算出所述变更单元与所述原数据单元之间的差异;累加子单元30810,从所述变更单元开始逐级递归向上汇总,将所述差异累加至所述变更单元的所有所述上级数据单元中。\n[0066] 这种情况说明上级原有的数据的汇总优先级和本次汇总是同一个维度的,因此只需要计算出本次变更的增量数据,并把该增量数据累加到上级原汇总数据上去。\n[0067] 在上述技术方案中,优选的,所述汇总单元308还用于在所述本次汇总路径的优先级小于所述原汇总路径的优先级时,放弃本次汇总。\n[0068] 这种情况说明上级原有的数据是由更高优先级的维度汇总上去的,放弃本维度的汇总。\n[0069] 根据本发明的数据汇总装置允许数据在非末级维度上录入,可选择合适的路径进行汇总,能够保证上级的汇总数据是没有歧义的\n[0070] 图4示出了根据本发明的实施例的基于关系型数据库的数据汇总方法的流程图。\n[0071] 如图4所示,根据本发明的实施例的基于关系型数据库的数据汇总方法,包括以下步骤:步骤402,定义业务数据的每个维度的优先级;步骤404,接收用户提交的变更单元;步骤406,在变更单元的多个维度上的上级数据单元中,查找出在优先级最高的维度上的上级数据单元;步骤408,从变更单元开始向优先级最高的维度上的上级数据单元进行数据汇总。\n[0072] 在该技术方案中,预定定义每个维度的优先级,若数据在非末级录入,则选择优先级最高的维度,然后从该维度方向向上汇总,这样就可避免汇总数据的不一致。\n[0073] 在上述技术方案中,优选的,步骤408还可以包括:将本次汇总的维度优先级信息作为本次汇总路径的优先级记录在所述上级数据单元中,根据汇总路径的优先级进行数据汇总。\n[0074] 将每次的汇总路径的优先级信息记录下来,在以后的汇总过程中,根据该汇总路径的优先级来判断具体如何进行汇总。\n[0075] 在上述技术方案中,优选的,所述步骤406还可以包括:在所述上级数据单元中已记录原汇总路径时,比较所述原汇总路径的优先级与所述本次汇总路径的优先级的高低;\n所述步骤408还可以包括:在所述本次汇总路径的优先级高于所述原汇总路径的优先级时,在汇总时,用所述变更单元的数据替换所述优先级最高的维度上的上级数据单元中的数据。\n[0076] 这种情况说明本维度的汇总优先级高于上级原有的数据的汇总优先级,那就将本维度的汇总数据覆盖上级原来的汇总数据。\n[0077] 在上述技术方案中,优选的,所述步骤408还可以包括:在所述本次汇总路径的优先级等于所述原汇总路径的优先级时,在汇总时,根据所述变更单元的维度信息从所述关系型数据库中提取出原数据单元,并计算出所述变更单元与所述原数据单元之间的差异;\n从所述变更单元开始逐级递归向上汇总,将所述差异累加至所述变更单元的所有所述上级数据单元中。\n[0078] 这种情况说明上级原有的数据的汇总优先级和本次汇总是同一个维度的,因此只需要计算出本次变更的增量数据,并把该增量数据累加到上级原汇总数据上去。\n[0079] 在上述技术方案中,优选的,在所述本次汇总路径的优先级小于所述原汇总路径的优先级时,放弃本次汇总。\n[0080] 这种情况说明上级原有的数据是由更高优先级的维度汇总上去的,放弃本维度的汇总。\n[0081] 下面结合图5来详细说明根据本发明的实施例。\n[0082] 一.维度汇总优先级的定义\n[0083] 通过在维度上定义一个优先级,可以在汇总的时候自动选择高优先级的路径进行汇总,例如,在图1B的例子中定义时间维度的优先级为9,而科目维度的优先级为8,组织维度的优先级为7,也就是说维度优先级顺序是:时间>科目>组织。\n[0084] 在汇总时,如果某个上级有多个下级单元,系统会根据下级单元和上级单元的不同的维度所处的维度不同,而优先选择一个优先级高的下级单元进行汇总。\n[0085] 在上面的例子中,由于时间维度的优先级大于科目维度,因此系统会优先选择:\n[2011年3季7月][管理费用][部门d]=3000。基于这条数据向上级汇总,最后[2011年\n3季][管理费用][部门d]的汇总数据是3000。\n[0086] 二.汇总算法的描述\n[0087] 在本实施例中使用递归算法自底而上进行增量汇总的计算,从用户录入的变更单元集合C中的数据单元开始递归向上汇总。\n[0088] 在步骤502,判断变更单元集合C中是否有剩余的数据单元(cell),数据单元(cell)可以理解为变更单元集合C中的一行数据,例如上表中的第一行数据。如果判断出有剩余的数据单元,则基于该数据单元进行数据汇总。\n[0089] 在步骤504,该用户录入的新数据和上一个版本的数据之间的差异,计算出数据增量diff。\n[0090] 在步骤506,在某维度上向上汇总时,优先查询出优先级最高维度上的父单元格,同时计算出该次汇总的汇总优先级v,并把该优先级数值作为汇总路径记录在父单元格中。\n[0091] 在步骤508,判断父单元格的坐标是否为空,若为空,在进入步骤516,判断是否存在下一个维度的上级数据单元。若不为空,则进入步骤510。\n[0092] 在步骤510,查找出上级数据单元的数据。\n[0093] 在步骤512,如果汇总时发现父单元已经存在汇总路径v0,和当次汇总的汇总优先级v进行比较,即判断当前路径是否等于原路径,若是,则进入步骤514,若否,则进入步骤518。\n[0094] 在步骤514,如果v0=v,上级原有的数据的汇总优先级和本次汇总是同一个维度的,需要计算出本次变更的增量数据,并把该增量数据累加到上级原汇总数据上去。然后以父单元为基础,继续进行递归调用,直到汇总过程结束。\n[0095] 在步骤516,若存在下一维度,则进入步骤506,若不存在,则进入步骤502。在步骤518,如果v0v,说明上级原有的数据是由更高优先级的维度汇总上去的,放弃本维度的汇总。\n[0096] 下面是汇总算法关键部分的Java示意代码如下:\n[0097] /**增量汇总主入口方法*/\n[0098] \n[0099] \n[0100] 完成汇总计算后,向数据库中写入变更的数据,事务完成。\n[0101] 综上所述,本发明提出了一种在允许非末级数据录入的业务场景下,通过定义维度上的汇总优先级,在系统中存在多个汇总路径的情况下,通过选择一条优先路径,实现数据自底而上的汇总,可以解决类似业务场景下的问题,因此,本发明可应用于需要对多维度数据进行实时汇总的业务领域,并且多维数据的多个路径汇总数据不一致情况下的业务场景。\n[0102] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
法律信息
- 2016-01-20
- 2015-11-25
著录事项变更
申请人由用友软件股份有限公司变更为用友网络科技股份有限公司
地址由100094 北京市海淀区北清路68号用友软件园变更为100094 北京市海淀区北清路68号
- 2013-02-20
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201210369871.1
申请日: 2012.09.28
- 2013-01-09
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2007-08-29
|
2007-04-09
| | |
2
| |
2012-04-11
|
2010-09-26
| | |
3
| |
2011-01-26
|
2010-09-26
| | |
4
| |
2007-04-18
|
2006-11-23
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |