APP下载

利用多维概念设计灵活的数据汇总模块

2020-10-09胡继军

理论与创新 2020年15期
关键词:统计数据

胡继军

【摘  要】近年来统计数据处理程序汇总模块执行效率大幅提高,但灵活性还远低于用户期望。通过对统计汇总表结构的分析,发现它们与多维数据模型非常相似,汇总表是多维数据的平面化展示。因此,用业务数据库的汇总数据,作为基础数据来构建多维结构,经过一定的多维操作,最后输出平面化的统计汇总表。实践表明,此方法能够很好地满足用户对效率的需求,同时也能设计复杂的汇总表。

【关键词】多维数据模型;统计数据;汇总模块

引言

统计数据处理程序逐渐朝平台化方向发展。其汇总模块的执行效率也发生了很大变化,以地市级的数据为例,200张汇总表的执行时间从过去的十几个小时,降到现在的几个小时。虽然效率大为提高,但与用户的实际期望值还有一定的差距。用户希望在十几分钟内完成。本文从全新的角度来分析和解决此问题。

1.现有汇总模块的主要设计思路

1.1数据库端脚本汇总

早期一些汇总模块使用“游标”技术进行数据汇总,即在数据库端脚本中,通过游标查询实现较为复杂的汇总功能。这是因为一些中、小型的数据库不支持复杂的汇总功能,例如不能按地区代码的前几位进行分组汇总。游标方式虽然扩大了汇总模块的通用性,但它直接查询基础数据,没有利用数据库内置的汇总功能,执行效率很低。

1.2分解成多个子汇总的可视化设计

近年来,随着Oracle数据库在统计领域的广泛使用,凭借它在行业的领先地位,对复杂汇总的高度支持,数据库端脚本汇总方式逐渐退出历史舞台。取代的是可视化的汇总表设计。但此方法也有其缺陷,汇总表每行甚至每个单元格都是一个子汇总,结果是产生大量的汇总运算,大大降低了整体汇总效率。

2.统计汇总表与多维数据模型的统一性

2.1统计汇总表的特点

汇总表包含一个或多个汇总指标,并以一个或多个分组展示数据。分组之间可以是并列关系,如先按地区分组,再按门类分组;也可以是层次递进的关系,如第一层是省级分组,第二层是市级分组,即省的下面紧接着其所属的各市。多个分组之间也可以是上面两种方式的复杂组合。一个分组包含多个分组值,如省级分组包含各省值,分组反映汇总指标的一类属性,可以理解为维(角度)。汇总指标从不同维度表示,发现与多维数据模型非常相似。

2.2多维数据模型的特点

多维数据模型是一个逻辑概念,它主要解决如何对大量数据进行快速查询和多角度展示。该模型的应用领域主要有数据仓库、OLAP(在线分析处理)和数据挖掘3个方面。它通过引入维、维分层和度量等概念,在逻辑上将数据视为一个多维立方体(简称立方体)。

维:是人们观察数据的特定角度,是考虑问题时的一类属性,属性值构成维的成员。如时间维,上面的各分组即是维,也叫分组,有地区维、行业门类维等。

维分层:同一维度还可以存在细节程度不同的多个描述层次。如时间维,可包括年、月份和日的层次,简化起见,把维分层作为多个独立的维。

立方体:用三维或更多的维描述一个对象,各维的成员交叉点(坐标点)保存对象的数值数据。在数据汇总中,交叉点保存的是汇总指标,可以不止一个。

度量:立方体中各维的成员交叉点,是一个单元格,用以存放1个或多个数值数据,这些数据就是度量,单元格则是度量的容器。

通过比较统计汇总表和多维数据模型的特点,发现它们是可以互相转换的,都是描述多维结构的数据,是视图与模型的关系。

3.设计特色的多维汇总模块

3.1选择合适的多维数据模型

既然多維数据模型与统计汇总表能够达到如此高度的统一,那它便是汇总模块优先的选择。多维数据模型的实现有多种途径,其中主要有多维数据库、关系型数据库以及两者相结合的复合方式。用于汇总的细节数据已经存在于业务数据库中,而汇总表一般都比较复杂,如有可能要对分组值进行归并,汇总表里也可能包含多个数据汇总,这就要求我们建立起自己的多维结构来处理这些问题。因此,多维数据模型是多维与关系型相结合的第三种方式。

3.2设计自定义的多维结构

从上面的分析来看,多维汇总模块需要设计自定义的多维结构。套用多维数据模型中的概念,一次从业务数据库返回的汇总数据,都应创建一个相应的立方体。由于统计汇总表往往包含多个数据汇总,因此多维结构也应包含多个立方体。

在实践中,考虑到汇总表有主栏和宾栏之分,多维结构也应把分组维分成主栏维和宾栏维两部分。为了方便统一处理,把汇总指标看作一个特殊的维,叫度量维。度量维的成员与各汇总指标名称一一对应。这样每一个汇总指标的具体值都有其唯一的维坐标,这为后续的多维操作奠定了基础。

3.3需要定义的多维操作

(1)立方体的合并。如果汇总表包含多个立方体,这时合并操作是必需的。常用的合并操作是加操作,即在两个立方体中,对于相同的维坐标,如果都有汇总数据,则其和作为此坐标上的新值;如果只有一个,则此值就是新值;否则为空。合并操作也可以是减操作、最大值操作等。

(2)维成员的排序。排序方式有:无排序、升序和降序,还可以提供自定义的排序。一般情况下,根据基本汇总数据创建的立方体,其各维的成员是有序的。但如果它是合并生成的,维成员的有序一般会打破,就需要重新排序。排序时应考虑成员“合计”的特殊性,因为合计一般放在最前面(或最后面),如果作为普通的成员处理,有可能排在中间。

(3)维成员的操作。其主要有维成员的增加、删除和合并。在地区分组中,有时需要 “直辖区”一栏,但直辖区在行政区划中没有对应的级别,它是部分子地区的合计。常规的办法是针对直辖区再汇总一次。如果支持增加操作,则第二次的汇总就可省略,这大大提高了效率。合并操作实际上是先增加产生新成员,后删除对应的原始成员,这在业务数据库不支持复杂的分组汇总时,特别有用。

3.4其他方面的设计

有了核心的多维结构,其他方面的设计就容易多了,这里只作简单的介绍。对于具体的汇总应用,模块首先需要定义数据源、汇总的分组以及汇总指标。数据源是汇总的数据来源,也是业务数据库中的一个或多个数据表。XML文件是定义汇总表的最佳选择,一个文件可以定义多个基本汇总,还可以定义这些汇总的合并方式。每个汇总的定义又包含主栏分组、宾栏分组和汇总指标的定义。

#号开始的是全局变量或者前面定义的局部变量,首先定义的是汇总字段定义HS1,即度量维,接着定义业务数据库需汇总的数据,模块则根据返回的数据,在系统中建立名为“主立方体”的立方体,立方体中定义了两个分组。配置文件可以手动编写,也可以开发可视化的汇总表设计。

4.多维汇总模块的执行效率及优化

本汇总模块已经用于台州市第三次经济普查的简要本和资料本汇总,以及第二次R&D资源清查的汇总开发。普查的简要本包含200余张汇总表,汇总时间约为70秒;普查资料本包含400余张汇总表,汇总的时间约为150秒。从上面数据可知,本模块的汇总效率远远高于10分钟200张的要求。前面的数据是在单线程中计算的,如果在多线程下,速度将提升至少一倍。

本模块能取得目前的效率,主要取决于两个方面:一是不从业务数据库中直接查询细节数据,而是利用业务数据库的汇总数据建立多维结构。这既能避免大量基础数据的传输,又能利用业务数据库内部汇总的高效优点;二是尽量减少对业务数据库的汇总次数。如不要把汇总分成过多的子汇总,多使用多维操作减少汇总的次数。

猜你喜欢

统计数据
2017年居民消费统计数据资料
加强统计基础建设保障统计数据的真实性和准确性
浅析统计数据质量
统计数据安全问题及其对策研究
计量模型在民用汽车拥有量中的分析应用
高校统计数据质量问题若干问题
统计数据