最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

关于数据仓库中缓慢变化维的总结

[复制链接]
跳转到指定楼层
楼主
发表于 2019-1-22 21:15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
首先说一下概念,缓慢变化维(Slowly Changing Dimensions)指的是:维度表里面的数据并非是始终不变的,总会随着时间发生变化:
假设我们有一张我们公司的销售员维度表如下,记录了每个销售员的一些基本信息,那么随着时间的变化销售员可能会在各省公司间调岗,如将周杰伦调入北京分公司,针对这种变化,业务系统会直接将业务数据库中周杰伦的地址直接update为北京,而不会考虑历史变化,不过在数据仓库中由于有时我们需要进行历史变化分析,或者防止销售数据记录错误,所以需要对这种变化进行相应的处理,主要有以下三种办法:
1、TYPE1
与业务数据保持一直,同样为直接update。这样就难以记录历史变化,如果周杰伦于15年7月调入北京,那么我们想要知道北京销售员在15年的销售数据时,就会将周杰伦的业绩算入北京分公司下,实际上周杰伦7月份以前的销售数据均应算在台北,所以为了避免这样的问题就有了TYPE2的处理方式。
2、TYPE2
保留历史变化,如下图:
不过带来一个问题,当事实表中的销售数据与此维度表进行关联时,由于存在customer_id的数据有两条100的,所以会关联出两个数据,这样是有问题的,那么就引入了一个代理键的概念,相当于数据仓库为维度表分配一个主键,而不用当初业务数据库中的主键,如下:
不过此时又带来了另外一个问题,当业务事实表中有新的销售业绩数据插入的时候,需要在外键列中插入维度表的dw_customer_id,那么此刻需要先找到维度表中的customer_id,然后再找到最大的dw_customer_id插入进去(因为主键往往是自增的,最大的肯定是最新的),但是某些情况下如果向事实表中插入历史数据的情况,就无法判断具体是哪个台北周杰伦还是北京周杰伦的业绩了,所以往往在维度表中同样加入时间列,如2000/1/1-2015/7/1来记录周杰伦在台北,而周杰伦在北京时间字段起始为2015/7/2,末尾时间字段可以记录空值或用9999/9/9替代,有新变化再进行更新。
3、TYPE3
有时需求中并非所有字段的变化都进行记录并且不需要每次变化都记录,比如我们可能只关心address(所在地)的最近两次变化,那么可以这样记录:
这样做只可以记录少量的变化次数,需要的话也可以相应加上时间列,这种方式一般用到的比较少,多数均为TYPE1,TYPE2,根据是否有必要记录历史变化进行选择。

楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-5-8 08:17

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表