一种高效率低维护的数据统计方法.pdf

上传人:奻奴 文档编号:1281725 上传时间:2018-04-12 格式:PDF 页数:15 大小:413.29KB
返回 下载 相关 举报
摘要
申请专利号:

CN201010011850.3

申请日:

2010.01.12

公开号:

CN101963970A

公开日:

2011.02.02

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回IPC(主分类):G06F 17/30申请公布日:20110202|||实质审查的生效IPC(主分类):G06F 17/30申请日:20100112|||公开

IPC分类号:

G06F17/30

主分类号:

G06F17/30

申请人:

浪潮(山东)电子信息有限公司

发明人:

张家重; 王世建; 李衍珠; 孙成通; 王红娟

地址:

250014 山东省济南市历下区山大路224号

优先权:

专利代理机构:

代理人:

PDF下载: PDF下载
内容摘要

本发明公开了一种高效率低维护的数据统计方法,属于一种数据统计方法,将数据库中的IO操作转换为内存操作,步骤为:1、统计设置:设置统计内容和统计条件;2、数据准备:将数据库中的数据按照设置中的要求抽取并整理,处理成系统可识别的格式;3、累加器:按照设置中的要求,计算结果;4、数据输出:将统计结果提供给用户,支持多种方式。本发明的一种高效率低维护的数据统计方法和现有技术相比,通过配置,经过数据整理、一次统计计算即可以得到复杂结果的数据统计方法,避免了多次操作数据库带来的IO操作,而且只需要修改配置文件即可实现不同的统计结果,方便了应用系统的版本管理,降低了实施难度。

权利要求书

1: 一种高效率低维护的数据统计方法, 其特征在于将数据库中的 IO 操作转换为内存 操作, 步骤为 : (1)、 统计设置 : 设置统计内容和统计条件 ; 该统计引擎中, 使用 Xml 格式文件来设置 ; 在配置文件中设置数据源、 统计维度、 统计条件等要素, 可以配置多个结果集 ; (2)、 数据准备 : 将数据库中的数据按照统计设置中的要求抽取并整理, 处理成系统可 识别的格式, 实现统计计算前的数据准备工作 ; 首先, 根据统计设置的数据源, 获得对应的 数据集 ; 其次, 根据需要, 进行多个数据源的数据整理 ; 最后, 按照统计维度进行排序 ; (3)、 累加器 : 按照统计设置中的要求, 计算结果 ; (a)、 解析统计公式 ; (b)、 初始化统计所需的数组 ; 每个统计结果集都需要三个中间数组, 用来实现数据计 算; 三个中间数组分别通过触发器、 加法器和结果器存储 ; 触发器 : 存储当前正在处理的统 计维度值 ; 加法器 : 存储当前维度值对应的统计结果值 ; 结果器 : 存储所有计算过的维度对 应的结果值 ; (c)、 遍历数据源, 逐条计算 ; 针对每个数据集中的每个结果集进行计算 ; (d)、 整理分发数据集 ; (4)、 数据输出 : 将统计计算结果提供给用户, 支持多种方式。
2: 根据权利要求 1 所述的一种高效率低维护的数据统计方法, 其特征在于数据准备中 进行多个数据源的数据整理原则是 : (1)、 针对单一数据集 : (a)、 如果是同一个表中的数据统计, 不需要数据整理 ; (b)、 如果是 Select 语句, 执行 Select 操作, 将获得的数据集保存 ; (2)、 针对多个数据集 : (a)、 分析多个数据集中的数据源, 看是否有从同一个单一表中获取数据的, 如果有, 记 录; (b)、 分析多个数据集中的数据源, 看是否有相同 Select 语句的, 如果有, 获取 ; (c)、 分析多个数据集中的数据源, 如果是 Select 类型, 看是从相同的表中获取的, 如 果是, 获取。
3: 根据权利要求 1 所述的一种高效率低维护的数据统计方法, 其特征在于累加器中解 析统计公式 : (1)、 数学计算公式, 包括 : (a)、 计算数量 : Count, 如果字段不是数字, 则为 0 ; (b)、 获取最大值 : Max ; (c)、 获取最小值 : Min ; (d)、 获取平均值 : Arg ; (e)、 加和 : Sum, 即可以实现多个字段加和 ; (f)、 不重复计数 : SingleCount, 可以实现不重复计数 ; (2)、 逻辑操作, 包括 : 与、 或、 非; (3)、 字符串操作, 包括 : (a)、 计算长度 : Length ; 2 (b)、 截取 : SubString ; (c)、 替换 : Replace ; (4)、 映射函数, 包括 : (a)、 数值映射 : MapInt ; (b)、 字符串映射 : MapString ; (c)、 通用映射 : Map。
4: 根据权利要求 1 所述的一种高效率低维护的数据统计方法, 其特征在于触发器 : 存 储当前正在处理的统计维度值, 即 Group By 后面的值 ; 初始化时根据统计维度数量 n 不同, 设置一个维度为 n 的数组, 并清空数据 ; 加法器 : 存储当前维度值对应的统计结果值 ; 初始化为一个可变长数组, 当维度为 n 时, 该数组的维度为 n+1 ; 初始长度为 0 ; 结果器 : 存储所有计算过的维度对应的结果值 ; 初始化为一个可变长的数组, 当维度 为 n 时, 该数组的维度为 n+1 ; 初始长度为 0。
5: 根据权利要求 1 所述的一种高效率低维护的数据统计方法, 其特征在于遍历数据, 针对每个数据集中的每个结果集进行计算 ; 具体步骤为 : (1)、 获取其中一个数据源 ; (2)、 将所有与该数据源相关的结果集及计算公式提取出来 ; (3)、 获取数据源中的一条记录 ; (4)、 获取所有结果集计算公式, 逐个计算, 分别将结果保存到结果集中 ; (a)、 获取该条的维度数据, 检查与触发器中的是否一致, 如果一致, 按照公式将结果与 加法器中的数据进行计算 ; (b)、 如果与触发器中的维度不一致, 将加法器中的数据转移到结果器中 ; 并清空加法 器; 结果器中的数据就是所要的结果 ; (5)、 检查是否已经是最后一条记录, 如果不是, 继续第 (3) 步操作 ; 如果是, 继续下一 个数据源。
6: 根据权利要求 1 所述的一种高效率低维护的数据统计方法, 其特征在于将统计计算 结果提供给用户, 提供 API、 中间表、 内存数据、 文件多种方法将计算结果提供给应用程序使 用。

说明书


一种高效率低维护的数据统计方法

    【技术领域】
     本发明涉及一种数据统计方法, 具体地说是一种高效率低维护的数据统计方法。背景技术 大部分的业务系统都有统计报表功能, 统计报表的数据来源可能是一个表, 也可 能是来源于同一个数据库的多个表。而报表结果可能是某个字段的数学逻辑计算, 也可能 是统计个数。针对报表, 目前常用的方法是, 首先从各个数据源中抽取数据, 集中到一个或 多个表中, 然后针对需要的报表中每列分别用 SQL 语句计算。 这种计算方法有以下缺点 : 1、 如果报表很复杂, 或者数据量很大, 系统会多次查询数据库, 效率比较低。2、 一些特殊要求 很难实现, 例如不重复计数。3、 当数据结构或报表发生变化时, 需要修改源代码, 不方便系 统维护和版本管理。
     SQL(Structured Query Language) 结构化查询语言, 是一种数据库查询和程序设 计语言, 用于存取数据以及查询、 更新和管理关系数据库系统。
     发明内容 本发明的技术任务是提供一种适用于大数据量统计方法, 使用触发器、 累加器、 结 果器实现统计报表所需的数据计算, 尤其适合银行数据管理的应用的一种高效率低维护的 数据统计方法。
     本发明的技术任务是按以下方式实现的, 将数据库中的 IO 操作转换为内存操作, 步骤为 :
     一、 统计设置 : 设置统计内容和统计条件 ; 该统计引擎中, 使用 Xml 格式文件来设 置; 在配置文件中设置数据源、 统计维度、 统计条件等要素, 可以配置多个结果集 ;
     下面是一个配置文件的例子 :
    
    
    
     Table
    
    

    
    
     count(a)
     a = 3
     a
    

    
     sum(a*b)
     a = 3
     c
    

    

    

    
    

     .....
    

     其中,
     DataSet1 表示该统计器的第一个数据集, 在一个统计中可能有多个数据集。
     DataSource 指该数据集所用到的数据源, 可以是一个表, 也可以是一个 Select 语 句, 表示需要统计数据的来源。
     Results 指统计结果集, 通过一次统计计算, 可以统计出多个统计结果。
     Caculate 指统计所使用的公式, 可以是计算数量 (Count)、 和 (Sum) 等
     数学计算, 也可以是与 (&)、 或 (|)、 非 ( ! ) 逻辑计算。该公式中, 除了关键字外, 需要添加所需的字段名。
     Group 指统计分类要素。
     二、 数据准备 : 将数据库中的数据按照统计设置中的要求抽取并整理, 处
     理成系统可识别的格式, 实现统计计算前的数据准备工作 ; 首先, 根据统计设置的 数据源, 获得对应的数据集 ; 其次, 根据需要, 进行多个数据源的数据整 理 ; 最后, 按照统 计维度进行排序 ;
     数据准备中进行多个数据源的数据整理原则是 :
     (A)、 针对单一数据集 :
     (a)、 如果是同一个表中的数据统计, 不需要数据整理 ;
     (b)、 如果是 Select 语句, 执行 Select 操作, 将获得的数据集保存 ;
     (B)、 针对多个数据集 :
     (a)、 分析多个数据集中的数据源, 看是否有从同一个单一表中获取数据的, 如果 有, 记录 ;
     (b)、 分析多个数据集中的数据源, 看是否有相同 Select 语句的, 如果有, 获取 ;
     (c)、 分析多个数据集中的数据源, 如果是 Select 类型, 看是从相同的表中获取 的, 如果是, 获取。
     经过数据整理后, 获得的结果如下表 1 所示。
     数据源 结果公式 1 结果 Group1 结果公式 2数据集 1 DS A Count(a) sum(a)5数据集 2 DS A Sum(b) a Sum(c)数据集 3 DS B Sum(b) c Sum(d)101963970 A CN 101963971说结果 Group2 B明书a c3/10 页表1
     即, 可能有多个数据集使用相同的数据集, 通过数据整理, 分析出具有相同数据集 的数据源 ; 同时, 获取这些数据源, 为统计做好准备。
     三、 累加器 : 按照统计设置中的要求, 计算结果 ;
     (I)、 解析统计公式 ;
     ①、 数学计算公式, 包括 :
     (a)、 计算数量 : Count( 字段名 ), 如果字段不是数字, 则为 0 ;
     (b)、 获取最大值 : Max( 字段名 ) ;
     (c)、 获取最小值 : Min( 字段名 ) ;
     (d)、 获取平均值 : Arg( 字段名 ) ;
     (e)、 加和 : Sum( 字段名 1,… .), 即可以实现多个字段加和 ;
     (f)、 不重复计数 : SingleCount( 字段名 ), 可以实现不重复计数 ;
     ②、 逻辑操作, 包括 : 与 (&)、 或 (|)、 非(!);
     ③、 字符串操作, 包括 :
     (a)、 计算长度 : Length( 字段名 ) ;
     (b)、 截取 : SubString( 字段名, 开始位置, 长度 ) ;
     (c)、 替换 : Replace( 字段名, 源字符串, 目标字符串 ) ;
     ④、 在实际应用中, 可能会有很多字段需要映射处理 ; 例如, 在一个数据库中, 可能 会有类似于下表 2 的一些数据 :
     品名 苹果 香蕉 桃子
     消费数量 10 20 30周期 周 旬 日表2
     如果需要计算每天平均的数量时, 可能无法直接计算, 因为周代表 7 天, 旬代表 10 天。在该统计器中, 可以通过映射函数来实现。
     映射函数, 包括 :
     (a)、 数值映射 : MapInt( 源数值, 目标数值 ) ;
     (b)、 字符串映射 : MapString( 源数值, 目标数值 ) ;
     (c)、 通用映射 : Map( 源数值, 目标数值 )。
     (II)、 初始化统计所需的数组 ; 每个统计结果集都需要三个中间数组, 用来实现数 据计算 ; 三个中间数组分别通过触发器、 加法器和结果器存储 ;
     触发器 : 存储当前正在处理的统计维度值 ; 即 Group By 后面的值 ; 初始化时根据 统计维度数量 n 不同, 设置一个维度为 n 的数组, 并清空数据 ;
     加法器 : 存储当前维度值对应的统计结果值 ; 初始化为一个可变长数组, 当维度 为 n 时, 该数组的维度为 n+1 ; 初始长度为 0 ;
     结果器 : 存储所有计算过的维度对应的结果值 ; 初始化为一个可变长的数组, 当 维度为 n 时, 该数组的维度为 n+1 ; 初始长度为 0。(III)、 遍历数据源, 逐条计算 ; 针对每个数据集中的每个结果集进行计算 ; 具体 步骤为 :
     ①、 获取其中一个数据源 ;
     ②、 根据表 1 中的分析, 将所有与该数据源相关的结果集及计算 公式提取出来 ;
     ③、 获取数据源中的一条记录 ;
     ④、 获取所有结果集计算公式, 逐个计算, 分别将结果保存到结果集中 ;
     (a)、 获取该条的维度数据, 检查与触发器中的是否一致, 如果一致, 按照公式将结 果与加法器中的数据进行计算 ;
     (b)、 如果与触发器中的维度不一致, 将加法器中的数据转移到结果器中 ; 并清空 加法器 ;
     结果器中的数据就是所要的结果 ;
     ⑤、 检查是否已经是最后一条记录, 如果不是, 继续第③步操作 ;
     如果是, 继续下一个数据源。
     经过数据遍历及计算, 所需要的结果已经全部保存到数据集中。
     类别 A A B
     数量 2 3 4表3 触发器、 累加器、 结果器的初始状态均为空, 内部没有任何数据 : 获取第一条记录后, 触发器中保存类别, 累加器中保存类别和数量 ,获取第二条记录后, 由于触发的条件没有变化, 触发器中仍为 A, 而我们所做的操 作为合计 ( 加法 ), 那么累加器中的数据为 2+3 = 5, 获取第三条记录后, 触发条件发生变化, 触发器中数据变为 B, 需要将累加器中的 数据传递到结果器中, 当无数据后, 将累加器中的数据转移到结果器中, 清空累加器和触发器。(IV)、 整理分发数据集 ;
     四、 数据输出 : 将统计计算结果提供给用户, 支持多种方式。
     提供 API、 中间表、 内存数据、 文件多种方法将计算结果提供给应用程序使用。
     本发明的一种高效率低维护的数据统计方法具有以下优点 :
     1、 通过在配置文件中设置需要统计的数据项、 统计内容等, 经过数据整理, 只需要 一次读取数据库, 一次统计计算即可以得到复杂的所需统计的结果 ; 避免了多次操作数据 库带来的 IO 操作 ;
     2、 同时, 在需求变更后, 只需要修改配置文件即可实现不同的统计结果, , 无需更改代码, 方便了应用系统的版本管理, 降低了实施难度 ;
     3、 通过将数据库中的 IO 操作转换为内存操作提高计算效率, 通过配置提供灵活 性, 是一种高效率低成本的统计方法, 适合于经常需求经常变动的统计报表开发 ;
     4、 设计合理、 使用方便, 因而, 具有很好的推广使用价值。 附图说明
     下面结合附图对本发明进一步说明。 附图 1 为一种高效率低维护的数据统计方法的计算流程图。 附图 2 为触发器、 累加器、 结果器的初始状态均为空, 内部没有任何数据时的状态框图 ; 附图 3 为获取第一条记录后结果状态框图 ; 附图 4 为获取第二条记录后结果状态框图 ; 附图 5 为获取第三条记录后结果状态框图 ; 附图 6 为无数据后最终结果状态框图。具体实施方式 参照说明书附图和具体实施例对本发明的一种高效率低维护的数据统计方法作 以下详细地说明。
     实施例 1 :
     本发明的一种高效率低维护的数据统计方法, 如图 1 所示, 将数据库中的 IO 操作 转换为内存操作, 步骤为 :
     一、 统计设置 : 设置统计内容和统计条件 ; 该统计引擎中, 使用 Xml 格式文件来设 置; 在配置文件中设置数据源、 统计维度、 统计条件等要素, 可以配置多个结果集 ;
     下面是一个配置文件的例子 :
    
    
    
     Table
    
    

    
    
     count(a)
     a = 3
     a
    

    
     sum(a*b)
     a = 3
     c
    

    

    

    
    

     ......
    
     其中,
     DataSet1 表示该统计器的第一个数据集, 在一个统计中可能有多个数据 集。
     DataSource 指该数据集所用到的数据源, 可以是一个表, 也可以是一个 Select 语 句, 表示需要统计数据的来源。
     Results 指统计结果集, 通过一次统计计算, 可以统计出多个统计结果。
     Caculate 指统计所使用的公式, 可以是计算数量 (Count)、 和 (Sum) 等数学计算, 也可以是与 (&)、 或 (|)、 非 ( ! ) 逻辑计算。该公式中, 除了关键字外, 需要添加所需的字 段名。
     Group 指统计分类要素。
     二、 数据准备 : 将数据库中的数据按照统计设置中的要求抽取并整理, 处理成系统 可识别的格式, 实现统计计算前的数据准备工作 ; 首先, 根据统计设置的数据源, 获得对应 的数据集 ; 其次, 根据需要, 进行多个数据源的数据整理 ; 最后, 按照统计维度进行排序 ;
     数据准备中进行多个数据源的数据整理原则是 :
     (A)、 针对单一数据集 :
     (a)、 如果是同一个表中的数据统计, 不需要数据整理 ;
     (b)、 如果是 Select 语句, 执行 Select 操作, 将获得的数据集保存 ;
     (B)、 针对多个数据集 :
     (a)、 分析多个数据集中的数据源, 看是否有从同一个单一表中获取数据的, 如果 有, 记录 ;
     (b)、 分析多个数据集中的数据源, 看是否有相同 Select 语句的, 如果有, 获取 ;
     (c)、 分析多个数据集中的数据源, 如果是 Select 类型, 看是从相同的表中获取 的, 如果是, 获取。
     经过数据整理后, 获得的结果如下表 1 所示。
     数据源 结果公式 1 结果 Group1 结果公式 2 结果 Group2
     数据集 1 DS A Count(a) sum(a) B数据集 2 DS A Sum(b) a Sum(c) a数据集 3 DS B Sum(b) c Sum(d) c表1
     即, 可能有多个数据集使用相同的数据集, 通过数据整理, 分析出具有 相同数据 集的数据源 ; 同时, 获取这些数据源, 为统计做好准备。三、 累加器 : 按照统计设置中的要求, 计算结果 ;
     (I)、 解析统计公式 ;
     ①、 数学计算公式, 包括 :
     (a)、 计算数量 : Count( 字段名 ), 如果字段不是数字, 则为 0 ;
     (b)、 获取最大值 : Max( 字段名 ) ;
     (c)、 获取最小值 : Min( 字段名 ) ;
     (d)、 获取平均值 : Arg( 字段名 ) ;
     (e)、 加和 : Sum( 字段名 1,… .), 即可以实现多个字段加和 ;
     (f)、 不重复计数 : SingleCount( 字段名 ), 可以实现不重复计数 ;
     ②、 逻辑操作, 包括 : 与 (&)、 或 (|)、 非(!);
     ③、 字符串操作, 包括 :
     (a)、 计算长度 : Length( 字段名 ) ;
     (b)、 截取 : SubString( 字段名, 开始位置, 长度 ) ;
     (c)、 替换 : Replace( 字段名, 源字符串, 目标字符串 ) ;
     ④、 在实际应用中, 可能会有很多字段需要映射处理 ; 例如, 在一个数据库中, 可能 会有类似于下表 2 的一些数据 :
     品名 苹果 香蕉 桃子
     消费数量 10 20 30周期 周 旬 日表2
     如果需要计算每天平均的数量时, 可能无法直接计算, 因为周代表 7 天, 旬代表 10 天。在该统计器中, 可以通过映射函数来实现。
     映射函数, 包括 :
     (a)、 数值映射 : MapInt( 源数值, 目标数值 ) ;
     (b)、 字符串映射 : MapString( 源数值, 目标数值 ) ;
     (c)、 通用映射 : Map( 源数值, 目标数值 )。
     (II)、 初始化统计所需的数组 ; 每个统计结果集都需要三个中间数组, 用来实现数 据计算 ; 三个中间数组分别通过触发器、 加法器和结果器存储 ;
     触发器 : 存储当前正在处理的统计维度值 ; 即 Group By 后面的 值 ; 初始化时根据 统计维度数量 n 不同, 设置一个维度为 n 的数组, 并清空数据 ;
     加法器 : 存储当前维度值对应的统计结果值 ; 初始化为一个可变长数组, 当维度 为 n 时, 该数组的维度为 n+1 ; 初始长度为 0 ;
     结果器 : 存储所有计算过的维度对应的结果值 ; 初始化为一个可变长的数组, 当 维度为 n 时, 该数组的维度为 n+1 ; 初始长度为 0。
     (III)、 遍历数据源, 逐条计算 ; 针对每个数据集中的每个结果集进行计算 ; 具体 步骤为 :
     ①、 获取其中一个数据源 ;
     ②、 根据表 1 中的分析, 将所有与该数据源相关的结果集及计算公式提取出来 ;③、 获取数据源中的一条记录 ;
     ④、 获取所有结果集计算公式, 逐个计算, 分别将结果保存到结果集中 ;
     (a)、 获取该条的维度数据, 检查与触发器中的是否一致, 如果一致, 按照公式将结 果与加法器中的数据进行计算 ;
     (b)、 如果与触发器中的维度不一致, 将加法器中的数据转移到结果器中 ; 并清空 加法器 ;
     结果器中的数据就是所要的结果 ;
     ⑤、 检查是否已经是最后一条记录, 如果不是, 继续第③步操作 ;
     如果是, 继续下一个数据源。
     经过数据遍历及计算, 所需要的结果已经全部保存到数据集中。
     类别 A A B
     数量 2 3 4表3 触发器、 累加器、 结果器的初始状态均为空, 内部没有任何数据 : 获取第一条记录后, 触发器中保存类别, 累加器中保存类别和数量,获取第二条记录后, 由于触发的条件没有变化, 触发器中仍为 A, 而我们所做的操 作为合计 ( 加法 ), 那么累加器中的数据为 2+3 = 5,获取第三条记录后, 触发条件发生变化, 触发器中数据变为 B, 需要将累加器中的 数据传递到结果器中,
     当无数据后, 将累加器中的数据转移到结果器中, 清空累加器和触发器。
     (IV)、 整理分发数据集 ;
     四、 数据输出 : 将统计计算结果提供给用户, 支持多种方式。
     提供 API、 中间表、 内存数据、 文件多种方法将计算结果提供给应用程序使用。
     实施例 2 :
     下面以一个例子来展示本发明的一种高效率低维护的数据统计方法。
     某银行想统计每个网点 1 月份和 2 月份的开户人数、 存款总额和贷款总额, 这些数 据都在表 Bills 中保存着。Bills 的格式如表所示。
     账户 0000001 0000002
     日期 2009-01-02 2009-02-02余额 20000000 460000网点 0001 0003类型 ( 借或 贷 ) 借 贷
     预期得到的报表如下 : 实施步骤如下 : 1、 设计配置文件 配置文件如下, 即配置统计内容。 Tabl e Bills count( 账户 ) 日期 between’ 2009-01-01’ and ’ 2009-01-31’ 网点 sum( 余额 ) 日期 between’ 2009-01-01’ and’ 2009-01-31’ and 类 型=’ 借’ 网点 sum( 余额 ) 日期 between’ 2009-01-01’ and’ 2009-01-31’ and 类 型=’ 贷’ 网点
    
     Tabl e
     Bills
    

    
    
     count( 账户 )
     日期 between’ 2009-02-01’ and
     ’ 2009-02-28’

     网点
    

    
     sum( 余额 )
     日期 between’ 2009-02-01’ and’ 2009-02-28’ and 类型=’ 借’
     网点
    

    
     sum( 余额 )
     日期 between’ 2009-02-01’ and’ 2009-02-28’ and 类
     型=’ 贷’

     网点
    

    

    

    
     2、 开启统计计算 ;
     3、 报表工具获得数据集 ;
     计算后, 所有的数据都在 DataSet1 和 DataSet2 中, 报表工具可以直接使用。
     经实践检验, 本方法完全可以满足银行快速开发专题数据统计功能的需求, 降低 了系统对于软硬件资源的依赖, 减少了系统建设部署成本。 同时, 本发明改变了以往统计系 统中一旦变更统计条件, 就需要重新开发的状况, 不仅缩短了新统计功能的开发周期, 并且 采用可配置的方案, 避免了频繁的修改系统源代码, 维护了系统的稳定性。
     除说明书所述的技术特征外, 均为本专业技术人员的已知技术。

一种高效率低维护的数据统计方法.pdf_第1页
第1页 / 共15页
一种高效率低维护的数据统计方法.pdf_第2页
第2页 / 共15页
一种高效率低维护的数据统计方法.pdf_第3页
第3页 / 共15页
点击查看更多>>
资源描述

《一种高效率低维护的数据统计方法.pdf》由会员分享,可在线阅读,更多相关《一种高效率低维护的数据统计方法.pdf(15页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN101963970A43申请公布日20110202CN101963970ACN101963970A21申请号201010011850322申请日20100112G06F17/3020060171申请人浪潮山东电子信息有限公司地址250014山东省济南市历下区山大路224号72发明人张家重王世建李衍珠孙成通王红娟54发明名称一种高效率低维护的数据统计方法57摘要本发明公开了一种高效率低维护的数据统计方法,属于一种数据统计方法,将数据库中的IO操作转换为内存操作,步骤为1、统计设置设置统计内容和统计条件;2、数据准备将数据库中的数据按照设置中的要求抽取并整理,处理成系统可识别的格。

2、式;3、累加器按照设置中的要求,计算结果;4、数据输出将统计结果提供给用户,支持多种方式。本发明的一种高效率低维护的数据统计方法和现有技术相比,通过配置,经过数据整理、一次统计计算即可以得到复杂结果的数据统计方法,避免了多次操作数据库带来的IO操作,而且只需要修改配置文件即可实现不同的统计结果,方便了应用系统的版本管理,降低了实施难度。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书10页附图2页CN101963971A1/2页21一种高效率低维护的数据统计方法,其特征在于将数据库中的IO操作转换为内存操作,步骤为1、统计设置设置统计内容和统计条件;该统计引擎。

3、中,使用XML格式文件来设置;在配置文件中设置数据源、统计维度、统计条件等要素,可以配置多个结果集;2、数据准备将数据库中的数据按照统计设置中的要求抽取并整理,处理成系统可识别的格式,实现统计计算前的数据准备工作;首先,根据统计设置的数据源,获得对应的数据集;其次,根据需要,进行多个数据源的数据整理;最后,按照统计维度进行排序;3、累加器按照统计设置中的要求,计算结果;A、解析统计公式;B、初始化统计所需的数组;每个统计结果集都需要三个中间数组,用来实现数据计算;三个中间数组分别通过触发器、加法器和结果器存储;触发器存储当前正在处理的统计维度值;加法器存储当前维度值对应的统计结果值;结果器存储。

4、所有计算过的维度对应的结果值;C、遍历数据源,逐条计算;针对每个数据集中的每个结果集进行计算;D、整理分发数据集;4、数据输出将统计计算结果提供给用户,支持多种方式。2根据权利要求1所述的一种高效率低维护的数据统计方法,其特征在于数据准备中进行多个数据源的数据整理原则是1、针对单一数据集A、如果是同一个表中的数据统计,不需要数据整理;B、如果是SELECT语句,执行SELECT操作,将获得的数据集保存;2、针对多个数据集A、分析多个数据集中的数据源,看是否有从同一个单一表中获取数据的,如果有,记录;B、分析多个数据集中的数据源,看是否有相同SELECT语句的,如果有,获取;C、分析多个数据集中。

5、的数据源,如果是SELECT类型,看是从相同的表中获取的,如果是,获取。3根据权利要求1所述的一种高效率低维护的数据统计方法,其特征在于累加器中解析统计公式1、数学计算公式,包括A、计算数量COUNT,如果字段不是数字,则为0;B、获取最大值MAX;C、获取最小值MIN;D、获取平均值ARG;E、加和SUM,即可以实现多个字段加和;F、不重复计数SINGLECOUNT,可以实现不重复计数;2、逻辑操作,包括与、或、非;3、字符串操作,包括A、计算长度LENGTH;权利要求书CN101963970ACN101963971A2/2页3B、截取SUBSTRING;C、替换REPLACE;4、映射函数。

6、,包括A、数值映射MAPINT;B、字符串映射MAPSTRING;C、通用映射MAP。4根据权利要求1所述的一种高效率低维护的数据统计方法,其特征在于触发器存储当前正在处理的统计维度值,即GROUPBY后面的值;初始化时根据统计维度数量N不同,设置一个维度为N的数组,并清空数据;加法器存储当前维度值对应的统计结果值;初始化为一个可变长数组,当维度为N时,该数组的维度为N1;初始长度为0;结果器存储所有计算过的维度对应的结果值;初始化为一个可变长的数组,当维度为N时,该数组的维度为N1;初始长度为0。5根据权利要求1所述的一种高效率低维护的数据统计方法,其特征在于遍历数据,针对每个数据集中的每个。

7、结果集进行计算;具体步骤为1、获取其中一个数据源;2、将所有与该数据源相关的结果集及计算公式提取出来;3、获取数据源中的一条记录;4、获取所有结果集计算公式,逐个计算,分别将结果保存到结果集中;A、获取该条的维度数据,检查与触发器中的是否一致,如果一致,按照公式将结果与加法器中的数据进行计算;B、如果与触发器中的维度不一致,将加法器中的数据转移到结果器中;并清空加法器;结果器中的数据就是所要的结果;5、检查是否已经是最后一条记录,如果不是,继续第3步操作;如果是,继续下一个数据源。6根据权利要求1所述的一种高效率低维护的数据统计方法,其特征在于将统计计算结果提供给用户,提供API、中间表、内存。

8、数据、文件多种方法将计算结果提供给应用程序使用。权利要求书CN101963970ACN101963971A1/10页4一种高效率低维护的数据统计方法技术领域0001本发明涉及一种数据统计方法,具体地说是一种高效率低维护的数据统计方法。背景技术0002大部分的业务系统都有统计报表功能,统计报表的数据来源可能是一个表,也可能是来源于同一个数据库的多个表。而报表结果可能是某个字段的数学逻辑计算,也可能是统计个数。针对报表,目前常用的方法是,首先从各个数据源中抽取数据,集中到一个或多个表中,然后针对需要的报表中每列分别用SQL语句计算。这种计算方法有以下缺点1、如果报表很复杂,或者数据量很大,系统会多。

9、次查询数据库,效率比较低。2、一些特殊要求很难实现,例如不重复计数。3、当数据结构或报表发生变化时,需要修改源代码,不方便系统维护和版本管理。0003SQLSTRUCTUREDQUERYLANGUAGE结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。发明内容0004本发明的技术任务是提供一种适用于大数据量统计方法,使用触发器、累加器、结果器实现统计报表所需的数据计算,尤其适合银行数据管理的应用的一种高效率低维护的数据统计方法。0005本发明的技术任务是按以下方式实现的,将数据库中的IO操作转换为内存操作,步骤为0006一、统计设置设置统计内容和统。

10、计条件;该统计引擎中,使用XML格式文件来设置;在配置文件中设置数据源、统计维度、统计条件等要素,可以配置多个结果集;0007下面是一个配置文件的例子0008000900100011TABLE00120013001400150016COUNTA0017A30018A00190020说明书CN101963970ACN101963971A2/10页50021SUMAB0022A30023C00240025002600270028002900300031其中,0032DATASET1表示该统计器的第一个数据集,在一个统计中可能有多个数据集。0033DATASOURCE指该数据集所用到的数据源,可以是。

11、一个表,也可以是一个SELECT语句,表示需要统计数据的来源。0034RESULTS指统计结果集,通过一次统计计算,可以统计出多个统计结果。0035CACULATE指统计所使用的公式,可以是计算数量COUNT、和SUM等0036数学计算,也可以是与、或|、非逻辑计算。该公式中,除了关键字外,需要添加所需的字段名。0037GROUP指统计分类要素。0038二、数据准备将数据库中的数据按照统计设置中的要求抽取并整理,处0039理成系统可识别的格式,实现统计计算前的数据准备工作;首先,根据统计设置的数据源,获得对应的数据集;其次,根据需要,进行多个数据源的数据整理;最后,按照统计维度进行排序;004。

12、0数据准备中进行多个数据源的数据整理原则是0041A、针对单一数据集0042A、如果是同一个表中的数据统计,不需要数据整理;0043B、如果是SELECT语句,执行SELECT操作,将获得的数据集保存;0044B、针对多个数据集0045A、分析多个数据集中的数据源,看是否有从同一个单一表中获取数据的,如果有,记录;0046B、分析多个数据集中的数据源,看是否有相同SELECT语句的,如果有,获取;0047C、分析多个数据集中的数据源,如果是SELECT类型,看是从相同的表中获取的,如果是,获取。0048经过数据整理后,获得的结果如下表1所示。0049数据集1数据集2数据集3数据源DSADSAD。

13、SB结果公式1COUNTASUMBSUMB结果GROUP1AC结果公式2SUMASUMCSUMD说明书CN101963970ACN101963971A3/10页6结果GROUP2BAC0050表10051即,可能有多个数据集使用相同的数据集,通过数据整理,分析出具有相同数据集的数据源;同时,获取这些数据源,为统计做好准备。0052三、累加器按照统计设置中的要求,计算结果;0053I、解析统计公式;0054、数学计算公式,包括0055A、计算数量COUNT字段名,如果字段不是数字,则为0;0056B、获取最大值MAX字段名;0057C、获取最小值MIN字段名;0058D、获取平均值ARG字段名;。

14、0059E、加和SUM字段名1,即可以实现多个字段加和;0060F、不重复计数SINGLECOUNT字段名,可以实现不重复计数;0061、逻辑操作,包括与、或|、非;0062、字符串操作,包括0063A、计算长度LENGTH字段名;0064B、截取SUBSTRING字段名,开始位置,长度;0065C、替换REPLACE字段名,源字符串,目标字符串;0066、在实际应用中,可能会有很多字段需要映射处理;例如,在一个数据库中,可能会有类似于下表2的一些数据0067品名消费数量周期苹果10周香蕉20旬桃子30日0068表20069如果需要计算每天平均的数量时,可能无法直接计算,因为周代表7天,旬代表。

15、10天。在该统计器中,可以通过映射函数来实现。0070映射函数,包括0071A、数值映射MAPINT源数值,目标数值;0072B、字符串映射MAPSTRING源数值,目标数值;0073C、通用映射MAP源数值,目标数值。0074II、初始化统计所需的数组;每个统计结果集都需要三个中间数组,用来实现数据计算;三个中间数组分别通过触发器、加法器和结果器存储;0075触发器存储当前正在处理的统计维度值;即GROUPBY后面的值;初始化时根据统计维度数量N不同,设置一个维度为N的数组,并清空数据;0076加法器存储当前维度值对应的统计结果值;初始化为一个可变长数组,当维度为N时,该数组的维度为N1;初。

16、始长度为0;0077结果器存储所有计算过的维度对应的结果值;初始化为一个可变长的数组,当维度为N时,该数组的维度为N1;初始长度为0。说明书CN101963970ACN101963971A4/10页70078III、遍历数据源,逐条计算;针对每个数据集中的每个结果集进行计算;具体步骤为0079、获取其中一个数据源;0080、根据表1中的分析,将所有与该数据源相关的结果集及计算公式提取出来;0081、获取数据源中的一条记录;0082、获取所有结果集计算公式,逐个计算,分别将结果保存到结果集中;0083A、获取该条的维度数据,检查与触发器中的是否一致,如果一致,按照公式将结果与加法器中的数据进行计。

17、算;0084B、如果与触发器中的维度不一致,将加法器中的数据转移到结果器中;并清空加法器;0085结果器中的数据就是所要的结果;0086、检查是否已经是最后一条记录,如果不是,继续第步操作;0087如果是,继续下一个数据源。0088经过数据遍历及计算,所需要的结果已经全部保存到数据集中。0089类别数量A2A3B40090表30091触发器、累加器、结果器的初始状态均为空,内部没有任何数据00920093获取第一条记录后,触发器中保存类别,累加器中保存类别和数量,00940095获取第二条记录后,由于触发的条件没有变化,触发器中仍为A,而我们所做的操作为合计加法,那么累加器中的数据为235,0。

18、0960097获取第三条记录后,触发条件发生变化,触发器中数据变为B,需要将累加器中的数据传递到结果器中,00980099当无数据后,将累加器中的数据转移到结果器中,清空累加器和触发器。01000101IV、整理分发数据集;0102四、数据输出将统计计算结果提供给用户,支持多种方式。0103提供API、中间表、内存数据、文件多种方法将计算结果提供给应用程序使用。0104本发明的一种高效率低维护的数据统计方法具有以下优点01051、通过在配置文件中设置需要统计的数据项、统计内容等,经过数据整理,只需要一次读取数据库,一次统计计算即可以得到复杂的所需统计的结果;避免了多次操作数据库带来的IO操作;。

19、01062、同时,在需求变更后,只需要修改配置文件即可实现不同的统计结果,无需更说明书CN101963970ACN101963971A5/10页8改代码,方便了应用系统的版本管理,降低了实施难度;01073、通过将数据库中的IO操作转换为内存操作提高计算效率,通过配置提供灵活性,是一种高效率低成本的统计方法,适合于经常需求经常变动的统计报表开发;01084、设计合理、使用方便,因而,具有很好的推广使用价值。附图说明0109下面结合附图对本发明进一步说明。0110附图1为一种高效率低维护的数据统计方法的计算流程图。附图2为触发器、累加器、结果器的初始状态均为空,内部没有任何数据时的状态框图;附图。

20、3为获取第一条记录后结果状态框图;附图4为获取第二条记录后结果状态框图;附图5为获取第三条记录后结果状态框图;附图6为无数据后最终结果状态框图。具体实施方式0111参照说明书附图和具体实施例对本发明的一种高效率低维护的数据统计方法作以下详细地说明。0112实施例10113本发明的一种高效率低维护的数据统计方法,如图1所示,将数据库中的IO操作转换为内存操作,步骤为0114一、统计设置设置统计内容和统计条件;该统计引擎中,使用XML格式文件来设置;在配置文件中设置数据源、统计维度、统计条件等要素,可以配置多个结果集;0115下面是一个配置文件的例子0116011701180119TABLE012。

21、00121012201230124COUNTA0125A30126A012701280129SUMAB0130A30131C说明书CN101963970ACN101963971A6/10页901320133013401350136013701380139其中,0140DATASET1表示该统计器的第一个数据集,在一个统计中可能有多个数据集。0141DATASOURCE指该数据集所用到的数据源,可以是一个表,也可以是一个SELECT语句,表示需要统计数据的来源。0142RESULTS指统计结果集,通过一次统计计算,可以统计出多个统计结果。0143CACULATE指统计所使用的公式,可以是计算数量。

22、COUNT、和SUM等数学计算,也可以是与、或|、非逻辑计算。该公式中,除了关键字外,需要添加所需的字段名。0144GROUP指统计分类要素。0145二、数据准备将数据库中的数据按照统计设置中的要求抽取并整理,处理成系统可识别的格式,实现统计计算前的数据准备工作;首先,根据统计设置的数据源,获得对应的数据集;其次,根据需要,进行多个数据源的数据整理;最后,按照统计维度进行排序;0146数据准备中进行多个数据源的数据整理原则是0147A、针对单一数据集0148A、如果是同一个表中的数据统计,不需要数据整理;0149B、如果是SELECT语句,执行SELECT操作,将获得的数据集保存;0150B、。

23、针对多个数据集0151A、分析多个数据集中的数据源,看是否有从同一个单一表中获取数据的,如果有,记录;0152B、分析多个数据集中的数据源,看是否有相同SELECT语句的,如果有,获取;0153C、分析多个数据集中的数据源,如果是SELECT类型,看是从相同的表中获取的,如果是,获取。0154经过数据整理后,获得的结果如下表1所示。0155数据集1数据集2数据集3数据源DSADSADSB结果公式1COUNTASUMBSUMB结果GROUP1AC结果公式2SUMASUMCSUMD结果GROUP2BAC0156表10157即,可能有多个数据集使用相同的数据集,通过数据整理,分析出具有相同数据集的数。

24、据源;同时,获取这些数据源,为统计做好准备。说明书CN101963970ACN101963971A7/10页100158三、累加器按照统计设置中的要求,计算结果;0159I、解析统计公式;0160、数学计算公式,包括0161A、计算数量COUNT字段名,如果字段不是数字,则为0;0162B、获取最大值MAX字段名;0163C、获取最小值MIN字段名;0164D、获取平均值ARG字段名;0165E、加和SUM字段名1,即可以实现多个字段加和;0166F、不重复计数SINGLECOUNT字段名,可以实现不重复计数;0167、逻辑操作,包括与、或|、非;0168、字符串操作,包括0169A、计算长度。

25、LENGTH字段名;0170B、截取SUBSTRING字段名,开始位置,长度;0171C、替换REPLACE字段名,源字符串,目标字符串;0172、在实际应用中,可能会有很多字段需要映射处理;例如,在一个数据库中,可能会有类似于下表2的一些数据0173品名消费数量周期苹果10周香蕉20旬桃子30日0174表20175如果需要计算每天平均的数量时,可能无法直接计算,因为周代表7天,旬代表10天。在该统计器中,可以通过映射函数来实现。0176映射函数,包括0177A、数值映射MAPINT源数值,目标数值;0178B、字符串映射MAPSTRING源数值,目标数值;0179C、通用映射MAP源数值,目。

26、标数值。0180II、初始化统计所需的数组;每个统计结果集都需要三个中间数组,用来实现数据计算;三个中间数组分别通过触发器、加法器和结果器存储;0181触发器存储当前正在处理的统计维度值;即GROUPBY后面的值;初始化时根据统计维度数量N不同,设置一个维度为N的数组,并清空数据;0182加法器存储当前维度值对应的统计结果值;初始化为一个可变长数组,当维度为N时,该数组的维度为N1;初始长度为0;0183结果器存储所有计算过的维度对应的结果值;初始化为一个可变长的数组,当维度为N时,该数组的维度为N1;初始长度为0。0184III、遍历数据源,逐条计算;针对每个数据集中的每个结果集进行计算;具。

27、体步骤为0185、获取其中一个数据源;0186、根据表1中的分析,将所有与该数据源相关的结果集及计算公式提取出来;说明书CN101963970ACN101963971A8/10页110187、获取数据源中的一条记录;0188、获取所有结果集计算公式,逐个计算,分别将结果保存到结果集中;0189A、获取该条的维度数据,检查与触发器中的是否一致,如果一致,按照公式将结果与加法器中的数据进行计算;0190B、如果与触发器中的维度不一致,将加法器中的数据转移到结果器中;并清空加法器;0191结果器中的数据就是所要的结果;0192、检查是否已经是最后一条记录,如果不是,继续第步操作;0193如果是,继续。

28、下一个数据源。0194经过数据遍历及计算,所需要的结果已经全部保存到数据集中。0195类别数量A2A3B40196表30197触发器、累加器、结果器的初始状态均为空,内部没有任何数据01980199获取第一条记录后,触发器中保存类别,累加器中保存类别和数量,02000201获取第二条记录后,由于触发的条件没有变化,触发器中仍为A,而我们所做的操作为合计加法,那么累加器中的数据为235,02020203获取第三条记录后,触发条件发生变化,触发器中数据变为B,需要将累加器中的数据传递到结果器中,0204当无数据后,将累加器中的数据转移到结果器中,清空累加器和触发器。02050206IV、整理分发数。

29、据集;0207四、数据输出将统计计算结果提供给用户,支持多种方式。0208提供API、中间表、内存数据、文件多种方法将计算结果提供给应用程序使用。0209实施例20210下面以一个例子来展示本发明的一种高效率低维护的数据统计方法。0211某银行想统计每个网点1月份和2月份的开户人数、存款总额和贷款总额,这些数据都在表BILLS中保存着。BILLS的格式如表所示。0212账户日期余额网点类型借或贷000000120090102200000000001借0000002200902024600000003贷0213说明书CN101963970ACN101963971A9/10页120214预期得到的。

30、报表如下0215实施步骤如下02161、设计配置文件0217配置文件如下,即配置统计内容。0218021902200221TABLE0222BILLS0223022402250226COUNT账户0227日期BETWEEN20090101AND0228200901310229网点023002310232SUM余额0233日期BETWEEN20090101AND20090131AND类0234型借0235网点023602370238SUM余额0239日期BETWEEN20090101AND20090131AND类0240型贷0241网点024202430244说明书CN101963970ACN1。

31、01963971A10/10页13024502460247TABLE0248BILLS0249025002510252COUNT账户0253日期BETWEEN20090201AND0254200902280255网点025602570258SUM余额0259日期BETWEEN20090201AND20090228AND类型借0260网点026102620263SUM余额0264日期BETWEEN20090201AND20090228AND类0265型贷0266网点026702680269027002712、开启统计计算;02723、报表工具获得数据集;0273计算后,所有的数据都在DATASE。

32、T1和DATASET2中,报表工具可以直接使用。0274经实践检验,本方法完全可以满足银行快速开发专题数据统计功能的需求,降低了系统对于软硬件资源的依赖,减少了系统建设部署成本。同时,本发明改变了以往统计系统中一旦变更统计条件,就需要重新开发的状况,不仅缩短了新统计功能的开发周期,并且采用可配置的方案,避免了频繁的修改系统源代码,维护了系统的稳定性。0275除说明书所述的技术特征外,均为本专业技术人员的已知技术。说明书CN101963970ACN101963971A1/2页14图1说明书附图CN101963970ACN101963971A2/2页15图2图3图4图5图6说明书附图CN101963970A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1