3

我正在尝试使用以下格式的 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 万条记录的一小部分数据,因此性能是一个问题。

谢谢您的帮助。

4

1 回答 1

3
  1. 创建一个SSIS包并添加一个新的Data Flow Task并配置此 DFT ( Edit...)
  2. 添加新数据源
  3. 添加UNPIVOT组件并对其进行配置: 在此处输入图像描述
  4. 添加DATA CONVERSION组件: 在此处输入图像描述 临时结果: 在此处输入图像描述
  5. 添加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”)。

    结果: 在此处输入图像描述

于 2011-09-26T18:25:07.193 回答