在ETL过程中,对于渐变维度的处理,一直是大家比较关注的问题。关于渐变维度的概念,我们在2007年8月的“渐变维度转换及其实现”一文中有所介绍。本文将在实际应用的对比中,提供三种处理渐变维度的方法,并比较其效率。

      第一代:SSIS控件时代
      对于一些会在原业务系统中进行修改/添加维度,不需要记录记录历史属性的维度,我们通常会选择SSIS中控件“渐变维度”来完成这项工作。应对这种情况我们选用Type2。

Type2:变化的属性
说明:如果更改后的值应当覆盖现有值,则选择该类型。
解析:既需要更改又不用记录历史属性的类型。

选择好数据源,设置好“业务键”和“非键列”之后(如图1),我们再对需要进行更新的“非键列”设置“更改类型”即可,如图2。

 
图1

 
图2

之后SSIS会帮我们生成数据流。简单快捷,3分钟完成一张表格,如图3。

 
图3

      第二代:SQL语句时代
      但是,对于稍微大一些的数据量,源1万条,目标几万条的时候就会非常的慢。对于这种情况,我们可以采用自己手写渐变维度的方式完成。需要分为两部分——更新原有数据和添加新增数据。如表1、表2所示。


表1


表2

1、更新原有数据
使用控件“执行SQL任务”。直接实行SQL语句:

以下是代码片段:

Update Dim_Team set Team_DisplayName = ss. Team_DisplayName

, Sort_ID = ss. Sort_ID

From Dim_Team dim inner join SS_Team ss

On ss. Team_InternalName = dim. Team_InternalName

2、添加新增数据
使用控件“数据流任务”。数据源使用如下语句:

以下是代码片段:

Select Team_InternalName , Team_DisplayName , Sort_ID

from SS_Team

Where Team_InternalName not in (

select distinct Team_InternalName from Dim_Team )

然后将结果输入到Dim_Team即可。
插曲:有的表格业务建不止一个,并且not in的效率也不够高,所以采用not exists
则使用如下语句作为数据源:

以下是代码片段:

Select Team_InternalName , Team_DisplayName , Sort_ID ,a

from SS_Team ss

Where not exists ( select distinct Team_InternalName

      第三代:Lookup时代
      虽然上述语句可以高效地完成渐变维度Type2的运行,但是在实际运行中,发现由于目标表被用在了数据源表中,导致数据流产生了死锁。
解决方法1:在目标表中去掉表锁。选择“数据访问模式”为“表或试图-快速加载”,将“检查约束”钩选去掉,如图4。

 
图4

解决方法2:利用lookup的错误输出,如图5。


图5

SS_Dimteam:

以下是代码片段:

Select Team_InternalName , Team_DisplayName , Sort_ID

from SS_Team

Lookup:

以下是代码片段:

__select distinct  Team_InternalName from Dim_Team

设置Lookup错误输出为重新定向,如图6。


图6

输入目标:Dim_Team
至此,完成了渐变维度Type2的“进化”。效率也提高了不少。

[原创]微软BI专题-渐变维度Type2进化三部曲相关推荐

  1. 数据仓库系列 - 缓慢渐变维度SCD (Slowly Changing Dimension) 常见的三种类型及原型设计

    开篇介绍 在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是在第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓 ...

  2. 微软bi 架构 服务器,微软BI体系结构.

    <微软BI体系结构.>由会员分享,可在线阅读,更多相关<微软BI体系结构.(41页珍藏版)>请在人人文库网上搜索. 1.Data Warehouse Data Access 前 ...

  3. 【原创】BI解决方案选型之ETL数据整合工具对比

    [原创]BI解决方案选型之ETL数据整合工具对比 参考文章: (1)[原创]BI解决方案选型之ETL数据整合工具对比 (2)https://www.cnblogs.com/xiongnanbin/p/ ...

  4. 微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug

    开篇介绍 前些天自己在整理 SSIS 2012 资料的时候发现了一个功能设计上的疑似Bug,在 Script Task 中是可以给只读列表中的变量赋值.我记得以前在 2008 的版本中为了弄明白这个配 ...

  5. 微软BI 之SSRS 系列 - 解决Pie Chart 中控制标签外部显示与标签重叠的问题

    微软BI 之SSRS 系列 - 解决Pie Chart 中控制标签外部显示与标签重叠的问题 参考文章: (1)微软BI 之SSRS 系列 - 解决Pie Chart 中控制标签外部显示与标签重叠的问题 ...

  6. BIDS Helper (Free)微软BI开发辅助工具--非常棒

    用了就知道,非常好,分享给微软BI开发的同仁们. /Files/sxfmol/BIDSHelper2005Setup.rar /Files/sxfmol/BIDSHelper2008Setup.rar ...

  7. 记忆的天空:智能进化三部曲

    作者:钟振余,宁波大学 相对于人工智能的快速发展,人类对于生命智能的理解显得很肤浅.由于缺失大脑活动原理的理论指导,人们只能用知识考试去评判一个人的智能,用相当于几岁孩子的智能去比对某些高级动物的智能 ...

  8. 进化三部曲,从互联网大脑发育看产业互联网的未来

    导言:从互联网的左右大脑发育看,产业互联网可以看做互联网的下半场,但从互联网大脑的长远发育看,互联网依然处于大脑尚未发育成熟的婴儿时期,未来还需要漫长的时间发育.参考互联网右大脑的发育历程,可以判断产 ...

  9. 为移动通信争一先:Massive MIMO的进化三部曲

    在围棋中,"先手"是一个十分重要的概念.谁先落子就具有颇大的优势,由此产生了"让先""执先"等概念,也引申出了"敢于争先" ...

最新文章

  1. 爬虫爬取https://www.exploit-db.com/老是跳过一个
  2. EasyDSS高性能流媒体服务器前端重构(六)- webpack-dev-server 支持手机端访问
  3. vue中使用moment来实现导出excel时添加格式化的时间戳
  4. 将您重定向的次数过多什么意思_电池循环次数是什么意思?怎么计算的?
  5. Js调用游览器的外部方法(设首页,收藏夹等游览器操作)
  6. ActiveMQ 权限
  7. c++中delete和析构函数之间的区别
  8. 进来看下你的工资水平
  9. PHP-MYSQL中文乱码问题.
  10. 'gbk' codec can't decode byte 0x9d in position 7674: illegal multibyte sequence
  11. c#明华rf读卡器_深圳明华URF-R330读卡器 M1卡读写程序(C#版)
  12. 生成条码 -- jsbarcode
  13. windows域用户切换本地用户
  14. energy plus matlab,Energyplus教程系列1—Energyplus到底能干啥.ppt
  15. kafka集群搭建(三台服务器)
  16. 学习Dart语言,看这一篇文章就够了!(详细介绍)
  17. mini_magick
  18. 关于PCB与设备外壳接地问题
  19. hbase 报:Java::JavautilConcurrent::TimeoutException:The procedure 1 is still running
  20. 《开源安全运维平台-OSSIM最佳实践》于2016年1月出版

热门文章

  1. WordPress页面和搜索页伪静态方法
  2. android 7.0 官方网址,安卓7.0
  3. Oracle设置常用的快捷键
  4. Win11:Windows无法访问指定设备,路径或文件,您可能没有合适的权限访问这个项目。
  5. 西安电子科技大学研究生计算机专业王宇平教授学生就业岗位,西安电子科技大学计算机学院硕导介绍:王宇平...
  6. 靠软色情博出位?20分钟赚3000万,揭秘JK制服的隐秘与疯狂
  7. CSDN修改用户名、昵称
  8. 将两个嵌套for循环写成一个列表生成式
  9. 全国联考 | PostgreSQL认证专家-PGCM(高级)考试回顾
  10. 核心库aud$过大清理