这是一个真实数据仓库项目中的案例。某公司要建立一个员工数据仓库,需要从多个业务系统集成员工相关的信息。由于历史的原因,该公司现存的四个业务系统中都包含员工数据,这四个业务系统是HR、OA、考勤和绩效考核系统。这些系统是彼此独立的,有些是采购的商业软件,有些是公司自己开发的。每个系统中都有员工和组织机构表,存储员工编号、姓名、所在部门等属性。各个系统的员工数据并不一致。例如,员工入职或离职时,HR系统会更新员工数据,但OA系统的更新可能会滞后很长时间。项目的目标是建立一个全公司唯一的、一致的人员信息库。
我们的思路是利用一系列经过仔细定义的参照表或转换表取代那些所谓硬编码的转换程序。其优点是很明显的:转换功能动态化,并能适应多变的环境。对于建立在许多不同数据源之上的数据仓库来说,这是一项非常重要的基础工作。具体方案如下:
- 建立标准码表用以辅助数据转换处理
- 建立与标准值转化有关的函数或子程序
- 建立非标准值与标准值对照的映像表,或者别名与标准名的对照表。
下面的问题是确定标准值的来源。从业务的角度看,HR系统的数据相对来说是最准确的,因为员工或组织机构的变化,最先反应到该系统的数据更新中。以HR系统中的员工表数据为标准是比较合适的选择。有了标准值后,还要建立一个映像表,把其它系统的员工数据和标准值对应起来。比方说有一个员工的编号在HR系统中为101,在其它三个系统中的编号分别是102、103、104,我们建立的映像表应该与下表类似。
DW条目名称 | DW标准值 | 业务系统 | 数据来源 | 源值 |
员工编号 | 101 | HR | HR库.表名.列名 | 101 |
员工编号 | 101 | OA | OA库.表名.列名 | 102 |
员工编号 | 101 | 考勤 | 考勤库.表名.列名 | 103 |
员工编号 | 101 | 绩效 | 绩效库.表名.列名 | 104 |
这张表建立在数据仓库的模式中,人员数据从各个系统抽取来以后,与标准值映像表关联,从而形成统一的标准数据。映像表被其它源数据引用,是数据一致性的关键,其维护应该与HR系统同步。因此在ETL过程中应该首先处理HR表和映像表。