当前位置: 首页 > news >正文

渐变维度(Slowly Changing Dimension)及其处理方法

渐变维度(Slowly Changing Dimension)及其处理方法

要讨论什么是渐变维度,或者缓慢变化维度,就要先说说什么是维度。虽然经常挂在嘴边的词,但解释起来确实有难度,更不要说给出一个概念了。我们 平时提到的0维的点,一维的线,二维平面,三维的立体空间已经挺复杂了,撇开不提,我们看看BI领域的维度是什么意思。
个人的理解,维度就是观察数据的不同角度。比如有一个魔方,我们从一个面看是绿色,转个角度,看起来就是红色了。现在举一个具体业务的例子,有 一个超市的销售数据,我们就可以有不同的角度去看,从时间角度看,一个月来每天的销售额是上升的,还是下降的;从产品角度看,那种产品占销售分额最多,是 食品还是日用品。这个例子中的时间和产品就分别是观察销售数据的维度,与此类似,也可以有营业员维度,价格维度,折扣维度等等。存储维度信息的表就叫做维 度表。
维度分为三类,固定维度,渐变维度,和快变维度,今天我们仅介绍渐变维度,顾名思义,渐变维度就是在业务进行过程中,会发生变化,但又不会频繁 变化的维度。比如我们企业中的部门,可能不时地会有机构调整,部门就会发生变化,但是又不会天天进行机构调整,因此我们可以把部门这个维度看作缓慢变化 维。把存放部门这个维度的表,叫做缓慢变化维度表。
那么在数据仓库的ETL过程中应该怎么处理这种渐变的维度表呢?就以前面提到的维度表为例,我们创建表如下:
   Dept (Dept_id, Dept_name)
有数据如下:
              1         财务部
              2         市场部
              3         人事部
那么我们部门调整的时候,把3改为人力资源部了,那么第一种处理方法就是,直接修改Dept表,修改后的表中数据如下:
              1         财务部
              2         市场部
              3         人力资源部
这样处理的好处是,处理简单快捷,减少空间消耗和管理难度。但是其缺点是不能记录维度历史,需要分期部门变化前的数据情况的时候便无从下手了, 因此有了第二种处理办法,增加一个列,把部门变化的历史记录下来,修改以后的数据如下:
             Dept_id  Dept_name  Dept_name_new
              1           财务部          财务部
              2           市场部          市场部
              3           人事部          人力资源部
这种方法的好处是,可以记录下来维度变化的历史,方便分析历史数据,但其缺点是需要修改表结构,增加新列,那么每当部门变化的时候都需要变更 表,维护的工作量很大。那么我们现在看一下第三种方法。
我们可以在表中增加列,部门的状态,状态时间如下
      Dept_id  Dept_name  Status   Status_time            Dept_pre_id
                1         财务部           A          2009-1-1              
                2         市场部           A          2009-1-1
                3         人事部           U          2009-2-26
                4         人力 资源部      A          2009-2-26                3
这样就能记录到维度改变的历史,并且不用经常的修改表结构,只需要在维度变化的时候,更改表中数据就可以了。 这种方法的缺点是当维表数据量大的时候,会导致访问效率降低和存储空间的消耗增加。

转自:http://blog.csdn.net/xiaoxu0123/archive/2010/03/25/5417894.aspx

相关文章:

  • 获取url值
  • 1.Angular框架-angular介绍与基本使用,MVC模式介绍
  • Oracle性能调优-优化排序操作
  • 鲜为人知的软件项目管理原则
  • 业界经典语录
  • 数据仓库设计的思考
  • ubuntu下安装Java并设置环境变量
  • arguments、this指针、call和apply、bind语法
  • ubuntu修改主机名
  • SSH设置不输入密码登陆方式
  • vb编程代码大全
  • ubuntu安装配置hadoop和hive
  • 励志
  • C#时间操作类
  • BZOJ 3437 小P的牧场(斜率优化DP)
  • 收藏网友的 源程序下载网
  • 07.Android之多媒体问题
  • EventListener原理
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • OSS Web直传 (文件图片)
  • PHP面试之三:MySQL数据库
  • rabbitmq延迟消息示例
  • RxJS: 简单入门
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • SpiderData 2019年2月25日 DApp数据排行榜
  • SQLServer之创建数据库快照
  • WebSocket使用
  • 百度地图API标注+时间轴组件
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 前端面试题总结
  • 在Docker Swarm上部署Apache Storm:第1部分
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​Linux·i2c驱动架构​
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • (2015)JS ES6 必知的十个 特性
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (arch)linux 转换文件编码格式
  • (WSI分类)WSI分类文献小综述 2024
  • (阿里云万网)-域名注册购买实名流程
  • (二十四)Flask之flask-session组件
  • (分类)KNN算法- 参数调优
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)appium-desktop定位元素原理
  • (一)基于IDEA的JAVA基础10
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • ./configure、make、make install 命令
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .Net mvc总结
  • .Net 高效开发之不可错过的实用工具