本文将模拟一个数据仓库系统其中有用户数据产品数据以及订单数据。根据这些数据结构建立多维数据集并且以增量更新的方式对其进行处理。之所以强调增量的方式是考虑到事实表中数据的增长假设以后增长到几十亿全量处理就变得很不现实所以方案中着重演示以增量方式处理多维数据集的方案。增量处理多维数据集的关键是要将事实数据分为两部分处理一个是增量事实表一个是历史事实表多维数据集第一次处理历史事实表中的数据以后每次周期性的处理都是处理增量表中的数据。本文中提及的SQLServer和Visual Studio都是2008版本2005版本同样也适用。数据假设:一张用户表一张产品表一张订单表订单里记录的是谁买了什么。多维数据集统计的需求就是根据订单统计谁买过什么。首先建立数据仓库在数据引擎下新建BIDemo库。接下来建立用户表结构如下此外还有产品表以及历史订单表和建立增量订单表它们的结构是一样的为了测试方便我们在用户表中加入一些测试数据然后在产品表中加入一些测试数据至于事实表手动加入测试数据就不现实了所以这里写了一个程序利用随机数来灌测试数据这个程序的代码可以在本文中找到。生成后的数据基本如下所示到此测试的数据结构以及数据就已经准备好了相当于有了一个小型的数据仓库。接下来在Visual Studio中建立BI解决方案方案下分为一个SSIS项目和一个SSAS项目。在SSAS项目下建立数据源和数据源视图这里需要注意的是事实表用历史表而不是增量表尽管其还没有数据。首先建立数据源连接刚才建立的数据库并且在数据源视图里定义好关系如下图然后根据此数据源视图建立多维数据集需要注意的是度量选择历史表维度选择用户和产品两个表。最后部署多维数据集。这里只部署就可以了不需要处理处理任务将在以后的SSIS包中处理。下面来看SSIS项目。在SSIS包里建立四个任务模块类型分别如下前两个多维数据集处理模块是用来处理多维数据集的数据流负责把增量事实表的数据导到历史事实表中最后执行一个SQL任务把增量表中的数据删除。两个多维数据集模块前一个是专门处理维度第二个是处理cube。这里之所以要把多维数据集维度处理单独拿出来放在前面是因为在笔者经验中对多维数据集的处理虽然是全部处理但是新增维度的数据不会被聚合到其中所以需要单独拿出来放在前面处理。题外话对于这个地方笔者一直也不是很理解按理说既然是全部处理那么怎么连维度都不处理呢还需要单拿出来以下是设置维度处理模块在界面中选择维度即可。然后是cube处理模块如下图。然后指定增量更新并且配置增量更新的数据表这里指定增量表。多维数据集处理完成之后就可以把增量表的数据放到历史表中了以保证第二天加入的数据都是增量数据。需要注意的是在实际的运行当中一定要保证BI的处理过程时业务系统没有发生数据否则就会造成数据遗漏而导致不平。所以BI的处理一般都是在凌晨。然后是第三步的数据流模块此部分的主要任务是将增量表的数据转移到历史表中。最后的一个SQL任务是一个Delete或者Truncate table任务把增量表里的数据清空。最终的任务流程如下图