在 SSIS 中反透视数据
Posted
技术标签:
【中文标题】在 SSIS 中反透视数据【英文标题】:Unpivoting Data in SSIS 【发布时间】:2011-09-26 14:41:19 【问题描述】:我正在尝试使用以下格式的 SSIS 规范化数据:
SerialNumber Date R01 R02 R03 R04
-------------------------------------------
1 9/25/2011 9 6 1 2
1 9/26/2011 4 1 3 5
2 9/25/2011 7 3 2 1
2 9/26/2011 2 4 10 6
每个“R”列代表一个小时的读数。 R01 是凌晨 12:00,R02 是凌晨 1:00,R03 是凌晨 2:00,R04 是凌晨 3:00。我想转换数据并以这种格式将其存储在另一个表中(换行符以提高可读性):
SerialNumber Date Reading
-----------------------------------------
1 9/25/2011 12:00 AM 9
1 9/25/2011 1:00 AM 6
1 9/25/2011 2:00 AM 1
1 9/25/2011 3:00 AM 2
1 9/26/2011 12:00 AM 4
1 9/26/2011 1:00 AM 1
1 9/26/2011 2:00 AM 3
1 9/26/2011 3:00 AM 5
2 9/25/2011 12:00 AM 7
2 9/25/2011 1:00 AM 3
2 9/25/2011 2:00 AM 2
2 9/25/2011 3:00 AM 1
2 9/26/2011 12:00 AM 2
2 9/26/2011 1:00 AM 4
2 9/26/2011 2:00 AM 10
2 9/26/2011 3:00 AM 6
我在 SSIS 2008 包中使用 unpivot 转换来完成大部分工作,但我遇到的问题是根据我正在使用的值的列将小时添加到日期。有没有办法在 SSIS 中实现这一点?请记住,这是大约 3000 万条记录的一小部分数据,因此性能是一个问题。
感谢您的帮助。
【问题讨论】:
【参考方案1】:-
创建一个
SSIS
包并添加一个新的Data Flow Task
并配置此DFT (Edit...
)
添加新数据源
添加UNPIVOT
组件并进行如下配置:
添加DATA CONVERSION
组件:
临时结果:
添加DERIVED COLUMN
组件:
对于NewData
派生列,您可以使用此表达式:DATEADD("HOUR",(Type == "R01" ? 0 : (Type == "R02" ? 1 : (Type == "R03" ? 2 : 3))),Date)
。 «boolean_expression» ? «when_true» : «when_false»
运算符类似于 IIF()
函数(来自 VBA/VB),用于计算要添加的小时数:对于“R01”-> 0 小时,对于“R02”-> 1 小时,对于“R03”- > 2 小时或 3 小时(对于“R04”)。
结果:
【讨论】:
以上是关于在 SSIS 中反透视数据的主要内容,如果未能解决你的问题,请参考以下文章