BI之SSIS之数据流转换(渐变维度)
1 渐变维度
1.1 维度中的某些属性会随着时间的变化而变化时,我们称该维度为渐变维度。比如,用户维度中的手机号、住址等信息会随着时间变化,那么用户维度就是渐变维度。
1.2 渐变维度需要新增两个字段,DimBeginTime和DimEndTime,来记录渐变的属性的有效时间段;或者增加一个标识字段,来标识该数据是否正在使用
2 新建SSIS包
3 连接管理器-》新建OLEDB连接“LocalHost.AdventureWorks2008.sa”
4 控制流-》拖入“执行SQL任务”
4.1 Connection“LocalHost.AdventureWorks2008.sa”
4.2 SqlStatement
IF not EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[DimProduct]')AND type in (N'U')) begin
create table DimProduct
(
productKey int primary keyidentity(1,1),
productAlternateKey int,
productName nvarchar(100),
productValue int,
productType nvarchar(100),
dimBeginTime datetime,
dimEndTime datetime
)
end
4.3 确定
5 控制流-》拖入“数据流任务-》将“执行SQL任务”的控制流指向“数据流任务”-》设计打开
6 新建一个文本文件“产品维度数据”,数据如下
1,手机-iphone,10,通讯
2,打印机,100,办公
3,鼠标,1000,游戏
7 连接管理器-》新建到“产品维度数据”的文件连接
8 数据流-》拖入“平面文件源”
8.1 连接管理器名称“产品维度数据连接”
8.2 文件名为上面新建的“产品维度数据”
8.3 预览下数据是否正确
8.4 确定
9 数据流-》拖入“数据转换”
9.1 将“平面文件源”的数据流指向“数据转换”
9.2 勾选所有列
9.3 输入列0-》别名“productId”-》数据类型“DT_I4”
9.4 输入列1-》别名“productName”-》数据类型“DT_WSTR”-》长度“100”
9.5 输入列2-》别名“productValue”-》数据类型“DT_I4”
9.6 输入列1-》别名“productType”-》数据类型“DT_WSTR”-》长度“100”
10 数据流-》拖入“渐变维度”
10.1 连接管理器“LocalHost.AdventureWorks2008.sa”
10.2 表或视图“DimProduct”,这里选择的是数据要导入的维度表
10.3 输入列的“productId”对应维度列的“productAlternamteKey”-》键类型“业务键”,这里的productId为OLTP系统的主键,目的是判断该键对应的列是否发生了变化-》其它的列以名称对应-》下一步
10.4 维度列“productName”-》更改类型“历史属性”,更改类型有三种
10.4.1 固定的属性,表示该属性为固定值,不能变更
10.4.2 变化的属性,表示该属性的值会被最新的值覆盖
10.4.3 历史属性,表示属性的值的所有变化都会被记录,记录的方式有两种,一种是添加时间段属性,一种是添加标识属性
10.5 维度列“productValue”-》更改类型“变化的属性”
10.6 维度列“productType”-》更改类型“固定的属性”
10.7 选择“使用开始日期和结束日期确定当前记录和过期记录”
10.7.1 开始日期“dimBeginTime”
10.7.2 结束日期“dimEndTime”
10.7.3 用来设置日期值的变量“system:startTime”
10.8 下一步-》下一步
10.9 渐变维度设置好后会生成一串的流程
11 执行包-》全绿-》成功-》查看数据,数据有导入,beginTime也有数据,endTime为null
12 修改“产品维度数据”的文件
12.1 “手机”为“手机-iphone”
12.2 ”100“改为“101“
12.3 “游戏“改为“配件”
13 再次执行包-》报错” 如果将FailOnFixedAttributeChange属性设置为TRUE,当检测到固定的属性更改时,转换将失败。要将行发送到“固定的属性”输出,请将FailOnFixedAttributeChange 属性设置为FALSE。“-》设置“渐变维度“的FailOnFixedAttributeChange为false
14 再次执行包-》全绿-》成功-》查看数据,发现
14.1 被设为”历史记录“的手机,新增了”手机-iphone“数据行,并且将”手机“行的endTime设置了值,这样就记录了属性生效的时间段
14.2 被设为”变化的属性“的100,更新成了101
14.3 被设为”固定的属性“的游戏,没有发生变化