缓慢变化维--Slowly Changing Dimensions
2016-09-28 15:45
204 查看
在数据仓库建模中我们常常会涉及到缓慢变化维(Slowly Changing Dimensions 简称SCD)的设计, 缓慢变化维的提出是因为在现实世界中,维度的属性并不是静态的,是随着时间的流失做缓慢的变化,所以处理这种历史的变化的维度我们称之为处理缓慢变化维。特别是在数据仓库设计中,我们的重点就是设计维度表跟事实表。所以维度表设计的好坏影响着整个数据仓库的搭建和后续报表展现的灵活性和完整性。
缓慢变化维度一般有以下几种实现方式:
1、第一种方式(TYPE 1)是新值直接覆盖原值即改写属性值,这种方法最简单,但是没有历史记录,无法分析历史变化信息。
e.g.
修改前->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
修改后->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 上海
2、第二种方式(TYPE 2)是添加维度行。可以创建一个代理健,并设置成主键,这样自然健可以和原维度和新维度的都保持关联,后续的关联查询的取舍就根据需求的定义。
e.g.
修改前->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
修改后->
ID(代理键) 用户 ID 用户姓名 出生日期 住址
1 1001 张三 1987-01-01 北京
2 1001 张三 1987-01-01 上海
3、第三种方式(TYPE 3)是添加维度列。用来记录该属性变化后的值。
e.g.
修改前->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
修改后->
用户 ID 用户姓名 出生日期 原住址 现住址
1001 张三 1987-01-01 北京 上海
3、第三种方式(TYPE 3)是添加维度列。用来记录该属性变化后的值。
e.g.
修改前->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
修改后->
用户 ID 用户姓名 出生日期 原住址 现住址
1001 张三 1987-01-01 北京 上海
4、第四种方式(TYPE 4)是添加历史表。将最新的维度数据与历史维度数据分不同的表存放。
e.g.
修改前->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
修改后->
最新维度表
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 上海
历史维度表
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
5、第五种方式(TYPE 5)混合模式可预见的多重变化。
6、第六种方式(TYPE 6)非常规混合模型,新增一个标识字段,例如:flag(0 历史数据,1 最新数据)但是这类数据一般会有个创建时间搭配使用,不然历史数据的先后顺序就无法确认了。 还有一种可以加一个版本号,类似一个序列号,没增加一条就+1,数据大概是1,2,3,4,5这样版本号最大的数据即使最新的那条。
7、第七种方式(TYPE 7)混合模式之不可预见的单重变化。
e.g.
修改前->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
修改后->
ID(代理健) 用户 ID 用户姓名 出生日期 原住址(开户时间) 现住址(有效时间)
1 1001 张三 1987-01-01 北京 (2016-01-01) 上海(2016-02-01) -- 历史数据
2 1001 张三 1987-01-01 上海 (2016-02-02) 天津(2016-03-02) -- 历史数据
3 1001 张三 1987-01-01 天津 (2016-03-03) 重庆(9999-12-31) -- 最新数据
缓慢变化维度一般有以下几种实现方式:
1、第一种方式(TYPE 1)是新值直接覆盖原值即改写属性值,这种方法最简单,但是没有历史记录,无法分析历史变化信息。
e.g.
修改前->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
修改后->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 上海
2、第二种方式(TYPE 2)是添加维度行。可以创建一个代理健,并设置成主键,这样自然健可以和原维度和新维度的都保持关联,后续的关联查询的取舍就根据需求的定义。
e.g.
修改前->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
修改后->
ID(代理键) 用户 ID 用户姓名 出生日期 住址
1 1001 张三 1987-01-01 北京
2 1001 张三 1987-01-01 上海
3、第三种方式(TYPE 3)是添加维度列。用来记录该属性变化后的值。
e.g.
修改前->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
修改后->
用户 ID 用户姓名 出生日期 原住址 现住址
1001 张三 1987-01-01 北京 上海
3、第三种方式(TYPE 3)是添加维度列。用来记录该属性变化后的值。
e.g.
修改前->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
修改后->
用户 ID 用户姓名 出生日期 原住址 现住址
1001 张三 1987-01-01 北京 上海
4、第四种方式(TYPE 4)是添加历史表。将最新的维度数据与历史维度数据分不同的表存放。
e.g.
修改前->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
修改后->
最新维度表
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 上海
历史维度表
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
5、第五种方式(TYPE 5)混合模式可预见的多重变化。
6、第六种方式(TYPE 6)非常规混合模型,新增一个标识字段,例如:flag(0 历史数据,1 最新数据)但是这类数据一般会有个创建时间搭配使用,不然历史数据的先后顺序就无法确认了。 还有一种可以加一个版本号,类似一个序列号,没增加一条就+1,数据大概是1,2,3,4,5这样版本号最大的数据即使最新的那条。
7、第七种方式(TYPE 7)混合模式之不可预见的单重变化。
e.g.
修改前->
用户 ID 用户姓名 出生日期 住址
1001 张三 1987-01-01 北京
修改后->
ID(代理健) 用户 ID 用户姓名 出生日期 原住址(开户时间) 现住址(有效时间)
1 1001 张三 1987-01-01 北京 (2016-01-01) 上海(2016-02-01) -- 历史数据
2 1001 张三 1987-01-01 上海 (2016-02-02) 天津(2016-03-02) -- 历史数据
3 1001 张三 1987-01-01 天津 (2016-03-03) 重庆(9999-12-31) -- 最新数据
相关文章推荐
- 关于缓慢变化维度 slowly changing dimensions
- 关于缓慢变化维度 slowly changing dimensions [转]
- 缓慢变化维----slowly changing dimension 处理 办法
- DataStage系列教程 (Slowly Changing Dimension)缓慢变化维
- 缓慢变化维 (Slowly Changing Dimension) 常见的三种类型及原型设计(转)
- Implementing Slowly Changing Dimensions
- 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计
- SSIS+数据仓库系列--- 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计
- SSIS--- 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式
- How to handle Slowly Changing Dimensions (SCDs) in data model design?
- 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计
- Slowly Changing Dimensions
- 微软BI 之SSIS 系列 - 数据仓库中实现 Slowly Changing Dimension 缓慢渐变维度的三种方式
- jQuery Easing Plugin内容晃动,滑动,缓慢变化效果
- Kettle处理缓慢变化维度
- 3月“.我爱你”域名总量:排名有变化 整体增速缓慢
- 缓慢变化思想12
- ODI实现缓慢变化维
- 缓慢变化维
- 深入探讨数据仓库缓慢变化维的解决方案