我正尝试使用以下格式的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 AM,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万条记录的一小部分数据,因此性能是一个问题。
感谢您的帮助。
答案 0 :(得分:3)
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”)。
结果: