论文部分内容阅读
1 引言
在数据仓库建设过程中,经常遇到无信息系统进行管理的制式EXCEL报表数据。这类数据入库常采用以下两种方法:一是开发新的信息系统重新录入数据;二是借助第三方工具,如SQLLDR、POWERBUILDER、PL/SQL DEVELOPER等导入。方法1数据重复录入,工作量大;方法2简单,速度快,但无法解决下面三个问题:
一是名称转代码问题。通常,报表只提供单位或物资名称,而名称不利于信息的查询、维护,必须转换为代码;
二是名称与代码间的多对一映射问题。同一单位或物资在不同的报表中极有可能出现名称不一致现象,如何将其映射到同一代码也是直接导入无法解决的问题;
三是交叉报表数据无法直接入库。我们在详细分析各业务部门提供的EXCEL电子表格的基础上,对其进行了准确的类别划分,通过二级映射机制,设计了C/S结构的通用数据采集工具,很好地解决了此类数据的入库问题。
2 电子表格文档分类
EXCEL电子表格可分为三种主要样式:
行列式:电子表格中的行和数据库表中的记录一一对应,列与数据库表中的字段一一对应。
卡片式:每一页(SHEET)对应库中的一条记录(RECORD),单元格对应数据库表中某一行中的某一字段。
交叉式:电子表格中的一行应转换为数据库表中的多行。
3 设计思想
针对这三种主要表格样式,以通用性、易用性为指导思想,通过“两级映射”机制,即EXCEL文件到数据库表的映射、行列到表字段的映射,映射表结构见表1、表2,设计了相应的数据采集工具。
3.1 数据采集总体流程
数据采集总体流程如下:
(1)维护文件映射表和字段映射表;
(2)数据采集是否结束,结束转(7),否则转(3);
(3)判断表格形式,如为行列式,进入(5);如为卡片式进入(6);如为交叉表进入(7);
(4)行列式信息采集,转(3);
(5)卡片式信息采集,转(3);
(6)交叉表信息采集,转(3);
(7)采集结束。
3.2 行列式信息采集
由于行列式报表与数据库表在结构上的一致性,采集相对简单,只需注意以下三点:
真实数据从第几行开始;确定需要进行代码转换的列;确定列的代码转换类型。
3.3 卡片式信息采集
卡片式信息采集算法如下:
(1)确定文件中的卡片总数CNT,该数即为将入库的记录数;
(2)循环变量I初始化为1;
(3)I大于CNT,转(8),否则转(5);
(4)将第I张卡片信息读入临时数组;
(5)名称转代码处理;
(6)数据入库;
(7)I增1,转(3);
(8)数据采集结束。
3.4 交叉表信息采集
为节省篇幅,仅给出算法基本思想:
扫描EXCEL文档确定入库数据的总行数和总列数;初始化行指针和列指针;列指针为外层循环,行指针为内层循环,开始遍历数据,同时进行有效性检查和代码转换,有效数据入库,对无效数据记录精确到行列的出错信息,直至数据处理完毕。
4 结束语
论文介绍的方法很好地解决了EXCEL数据直接入库所不能解决的三个问题,而且在很大程度上减轻了信息录入人员的工作量。该方法在我室主研的某数据仓库项目中发挥了很大的作用。
在数据仓库建设过程中,经常遇到无信息系统进行管理的制式EXCEL报表数据。这类数据入库常采用以下两种方法:一是开发新的信息系统重新录入数据;二是借助第三方工具,如SQLLDR、POWERBUILDER、PL/SQL DEVELOPER等导入。方法1数据重复录入,工作量大;方法2简单,速度快,但无法解决下面三个问题:
一是名称转代码问题。通常,报表只提供单位或物资名称,而名称不利于信息的查询、维护,必须转换为代码;
二是名称与代码间的多对一映射问题。同一单位或物资在不同的报表中极有可能出现名称不一致现象,如何将其映射到同一代码也是直接导入无法解决的问题;
三是交叉报表数据无法直接入库。我们在详细分析各业务部门提供的EXCEL电子表格的基础上,对其进行了准确的类别划分,通过二级映射机制,设计了C/S结构的通用数据采集工具,很好地解决了此类数据的入库问题。
2 电子表格文档分类
EXCEL电子表格可分为三种主要样式:
行列式:电子表格中的行和数据库表中的记录一一对应,列与数据库表中的字段一一对应。
卡片式:每一页(SHEET)对应库中的一条记录(RECORD),单元格对应数据库表中某一行中的某一字段。
交叉式:电子表格中的一行应转换为数据库表中的多行。
3 设计思想
针对这三种主要表格样式,以通用性、易用性为指导思想,通过“两级映射”机制,即EXCEL文件到数据库表的映射、行列到表字段的映射,映射表结构见表1、表2,设计了相应的数据采集工具。
3.1 数据采集总体流程
数据采集总体流程如下:
(1)维护文件映射表和字段映射表;
(2)数据采集是否结束,结束转(7),否则转(3);
(3)判断表格形式,如为行列式,进入(5);如为卡片式进入(6);如为交叉表进入(7);
(4)行列式信息采集,转(3);
(5)卡片式信息采集,转(3);
(6)交叉表信息采集,转(3);
(7)采集结束。
3.2 行列式信息采集
由于行列式报表与数据库表在结构上的一致性,采集相对简单,只需注意以下三点:
真实数据从第几行开始;确定需要进行代码转换的列;确定列的代码转换类型。
3.3 卡片式信息采集
卡片式信息采集算法如下:
(1)确定文件中的卡片总数CNT,该数即为将入库的记录数;
(2)循环变量I初始化为1;
(3)I大于CNT,转(8),否则转(5);
(4)将第I张卡片信息读入临时数组;
(5)名称转代码处理;
(6)数据入库;
(7)I增1,转(3);
(8)数据采集结束。
3.4 交叉表信息采集
为节省篇幅,仅给出算法基本思想:
扫描EXCEL文档确定入库数据的总行数和总列数;初始化行指针和列指针;列指针为外层循环,行指针为内层循环,开始遍历数据,同时进行有效性检查和代码转换,有效数据入库,对无效数据记录精确到行列的出错信息,直至数据处理完毕。
4 结束语
论文介绍的方法很好地解决了EXCEL数据直接入库所不能解决的三个问题,而且在很大程度上减轻了信息录入人员的工作量。该方法在我室主研的某数据仓库项目中发挥了很大的作用。