2011-09-26 61 views
3

我試圖正常化使用以下格式SSIS數據:Unpivoting數據在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是凌晨1點,R02是凌晨1點,R03是凌晨2點,R04是凌晨3點。我想轉換數據並將其存儲在另一個表以這種格式(換行符以提高可讀性):

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包的逆轉置轉換來完成這個最,但這個問題我我正在根據我正在使用的值的列添加小時到日期。有沒有辦法在SSIS中實現這一點?請記住,這是約3000萬條記錄的一小部分數據,因此性能是一個問題。

感謝您的幫助。

回答

3
  1. 創建SSIS包,添加一個新Data Flow Task和配置該DFT(Edit...
  2. 添加一個新的數據源
  3. 添加UNPIVOT組分並因此對其進行配置: enter image description here
  4. 添加DATA CONVERSION組分: enter image description here 臨時結果: enter image description here
  5. 添加DERIVED COLUMN組件: enter image description here 對於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」)。

    結果: enter image description here

+0

這完美地工作。非常感謝你! –