3.1 源数据的预处理
数据预处理指在源数据存入数据仓库之前,对源数据进行正确的抽取、清洗、转换、装载,对异构数据进行梳理整合,将分散的数据统一装载到目标数据源,以适合于数据仓库存储和查询分析的一系列的过程和方法。必须进行数据预处理的原因在于:源数据存储于彼此差异极大的数据库系统或表格中,这些数据库系统或表格依赖于不同的操作系统;很多源系统本身及所采用的技术均已过时;对数据仓库极为重要的信息可能并未存储于操作型数据库中,而是以不同的格式产来自于企业外部;旧系统中的数据质量参差不齐,不进行整理无法直接存储于数据仓库中;新的管理需求会导致源系统的结构发生改变,不进行预处理无法直接储存于已经定义好数据结构和加载规则的数据仓库中;源系统之间缺乏一致性,相同的数据以不同的格式或形式存储;很多源系统的数据格式和类型对用户而言是以晦涩的语义存储的,或者对用户而言是多余的。因此,为便于数据仓库存储和对数据进行查询分析,在源数据存入数据仓库之前,必须对源数据进行预处理。
3.2 中间数据库数据的形成
数据抽取、转换、装载作为数据预处理的主要组成部份,其功能是为向中间数据库提供信息内容做前期准备。在确定中间数据库需要的目标数据,根据目标数据查找并具体选定数据源表后,就可以建立从数据源到中间数据库的数据映像关系,并以此确定数据抽取、转换和清洗规则。在胶囊公司中间数据库的形成中,考虑到某些源表数据比较固定或是记录较少,决定采用简单的删除目标表纪录再添加的批量复制方法;而对于销售记录源表数据,就必须采取增量添加的办法来提高数据ETL效率。
3.3 销售数据仓库数据装载
完成了中间数据库数据的填充,销售数据仓库的数据源也就准备好了。接下来就要使用Microsoft SQL Server 2005 Integration Services (SSIS)来完成销售数据仓库的数据装载了。
SSIS是生成高性能数据集成解决方案(包括数据仓库的提取、转换和加载 (ETL)包)的平台。它包含用于生成和调试包的图形工具及向导;用于执行工作流功能的任务,例如 FTP 操作、SQL 语句执行和电子邮件消息处理;用于提取和加载数据的数据源和目标;用于清理、聚合、合并和复制数据的转换;用于管理 Integration Services 的管理服务 Integration Services;以及对 Integration Services 对象模型进行编程的应用程序编程接口 (API)。
3.3.1 填充数据仓库
当中间库的数据生成后,就可以利用SSIS来设计控制流来将相应的数据从中间表填充到销售数据仓库中。下图3-1虚框中所示为该步骤所要完成的任务。
图3-1 利用SSIS来填充数据仓库
(1)产品维度表DimItem的数据填充。
在初次填充时,可使用如下脚本通过SSIS来将数据从中间表传送到产品维度表,以后进行增量更新时,可通过判定产品数据更新的日期(时间戳)来添加新增的纪录。
SELECT ItemMaster.ItemCode, ItemMaster.ItemDescription,
SalesOLAP.DimItemCategory.PK_DimItemCategory
FROM SalesOLAP.DimItemCategory INNER JOIN ItemMaster ON SalesOLAP.DimItemCategory.ItemCategoryName = ItemMaster.ProductCode COLLATE Chinese_PRC_BIN
图3-2 产品表数据流及列映射
(2)客户维度表DimCustomer的数据填充
SELECT Customer.CustCode,Customer.CustName,
SalesOLAP.DimSalesTerritory.PK_DimSalesTerritory
FROM Customer INNER JOIN SalesOLAP.DimSalesTerritory ON
Customer.CompanyCode=SalesOLAP.DimSalesTerritory.SalesTerritoryName COLLATE SQL_Latin1_General_CP1_CS_AS
客户表数据流及列映射如图3-3:
(3)销售历史事实表SalesHistory的数据填充
SELECT SalesHistory.InvoiceNo,SalesOLAP.DimTime.PK_Date,
SalesOLAP.DimItem.PK_DimItem,SalesOLAP.DimItem.ItemCategoryKey,
SalesOLAP.DimCustomer.PK_DimCustomer,SalesHistory.InvoiceNetQty,
SalesOLAP.DimSalesTerritory.PK_DimSalesTerritory,
SalesHistory.InvoiceUnitPrice,SalesHistory.InvoiceNetPriceLocal
FROM SalesOLAP.DimTime INNER JOIN SalesHistory ON
SalesOLAP.DimTime.FullDate = SalesHistory.Date INNER JOIN
SalesOLAP.DimItem ON SalesHistory.ItemCode = SalesOLAP.
DimItem.ItemkeyName COLLATE SQL_Latin1_General_CP1_CS_AS INNER JOIN
SalesOLAP.DimCustomer ON
SalesHistory.CustCode = SalesOLAP.DimCustomer.CustomerAlternateKey
COLLATE SQL_Latin1_General_CP1_CS_AS INNER JOIN SalesOLAP.DimSalesTerritory ON
SalesHistory.CompanyCode = SalesOLAP.DimSalesTerritory.SalesTerritoryName
COLLATE SQL_Latin1_General_CP1_CS_AS
销售历史表数据流及列映射如图3-4:
其他表的数据由于比较少且固定,所以可直接从Excel表中拷贝到相应的数据仓库表中,这里不一一介绍。总之,当数据仓库所必需的数据都被填充到物理表中后,就可以利用SQL Server Analysis Services 来做数据分析了。
浙公网安备 33010602011771号