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」列は、1時間の読み取り値を表します。R01は12:00AM、R02は1:00 AM、R03は2:00 AM、R04は3:00AMです。データを変換して、この形式で別のテーブルに保存したいと思います(読みやすくするために改行)。

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

これのほとんどを達成するためにSSIS2008パッケージのunpivot変換を使用していますが、私が抱えている問題は、使用している値の列に基づいて日付に時間を追加することです。SSISでこれを達成する方法はありますか?これは約3,000万レコードのデータの小さなサブセットであるため、パフォーマンスが問題になることに注意してください。

助けてくれてありがとう。

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 に答える