樞紐轉換
「樞紐」轉換可藉由樞紐資料行值上的輸入資料,將正規化的資料集轉換為較不正規但更精簡的版本。例如,列出客戶名稱、產品及購買數量的正規化 Orders 資料集,對於購買多個產品的客戶一般都具有多個資料列,且該客戶的每個資料列都顯示不同產品的訂單詳細資料。藉由樞紐產品資料行上的資料集,「樞紐」轉換可以為每位客戶輸出含單一資料列的資料集。該單一資料列會列出客戶購買的所有產品,產品名稱顯示為資料行名稱,而數量則顯示為產品資料行中的值。因為不是每位客戶都會購買所有產品,所以許多資料行可能包含 Null 值。
當樞紐資料集時,輸入資料行會在樞紐處理中執行不同的角色。資料行的參與方式如下:
資料行未經變更便傳送至輸出。因為許多輸入資料列只產生一個輸出資料列,所以轉換僅複製資料行的第一個輸入值。
資料行用作識別一組記錄的索引鍵或索引鍵的一部分。
資料行定義樞紐。此資料行中的值與已樞紐之資料集中的資料行關聯。
資料行包含樞紐建立之資料行中的值。
下圖顯示資料在 Product 資料行上進行樞紐之前的資料集。
下圖顯示資料在 Product 資料行上進行樞紐之後的資料集。
若要有效地樞紐資料 (即在輸出資料集中建立盡可能少的記錄),輸入資料必須根據樞紐資料行進行排序。如果資料未排序,「樞紐」轉換可能會為集索引鍵 (定義集成員資格的資料行) 中的每個值產生多筆記錄。例如,如果資料集在 Name 資料行上進行樞紐但名稱未排序,則輸出資料集中的每位客戶可能會一個以上的資料列,因為 Name 中的值在每次變更時都會進行樞紐。
輸入資料可能會包含重複資料列,因而造成「樞紐」轉換失敗。「重複資料列」表示集索引鍵資料行及樞紐資料行中有相同值的資料列。例如,如果您在 Product 資料行上對資料進行樞紐之前使用資料集 (如圖表所示),然後在 Cust 資料行及 Product 資料行中分別加入 Kate 及 Soda,不論 Qty 資料行的數量為何,這些重複值會使得「樞紐」轉換失敗。若要避免失敗,您可以設定轉換,而將錯誤資料列重新導向至錯誤輸出,也可以預先彙總值,以確定沒有重複資料列。例如,在範例資料集中,您可以依客戶及產品計算 Qty 資料行的總值。
「樞紐」轉換使用其輸入及輸出資料行上的屬性來定義樞紐作業。
樞紐轉換包括 PivotKeyValue 自訂屬性。屬性運算式可以在載入封裝時更新這個屬性。如需詳細資訊,請參閱<Integration Services 運算式參考>、<在封裝中使用屬性運算式>和<轉換自訂屬性>。
這個轉換有一個輸入、一個規則輸出及一個錯誤輸出。
設定範例資料集
圖中顯示的範例資料集設定如下:Cust 資料行的 PivotUsage 屬性設為 1,以指示它是集索引鍵資料行;Product 輸入資料行的 PivotUsage 屬性設為 2,以指示必須為每個產品建立資料行;Qty 輸入資料行的 PivotUsage 屬性設為 3,以指示數量值置於樞紐資料行。
設定轉換輸出包含六個資料行。使用 [進階編輯器] 對話方塊加入下列各資料行:Cust、Ham、Soda、Milk、Beer 及 Chips。Ham 資料行的 PivotKeyValue 屬性設為 Ham,以指示轉換應該在輸入資料行中尋找該值。同樣地,Soda 資料行的 PivotKeyValue 屬性會設為 Soda,依此類推。
然後,將轉換輸入中的資料行對應至輸出中的資料行。
設定 Cust 資料行的 SourceColumn 屬性,以使用 Cust 輸入資料行的歷程識別碼。設定 Ham、Soda、Milk、Beer 及 Chips 資料行的 SourceColumn 屬性,以使用 Qty 輸入資料行的歷程識別碼。進行此項設定的另一種方式是將 Ham、Soda、Milk、Beer 及 Chips 資料行的 SourceColumn 屬性設為 -1,這會插入值 True 而非資料值。例如,不使用值 12 及 24,Beer 資料行隨後便會包含值 True,以僅指示客戶已購買產品,而不顯示購買的數量。
轉換輸出中的資料列會包含 Cust 及 Qty 輸入資料行的值。
樞紐選項
您可以設定輸入資料行的 PivotUsage 屬性,以指定每個資料行在樞紐處理中執行的角色。PivotUsage 的有效值為 0、1、2 和 3。
下表描述 PivotUsage 選項。
選項 |
描述 |
---|---|
0 |
資料行未經樞紐,且資料行值已傳送至轉換輸出。 |
1 |
資料行是集索引鍵的一部分,可識別一個集中的一或多個資料列。具有相同集索引鍵的所有輸入資料列會組合成一個輸出資料列。 |
2 |
資料行為樞紐資料行。至少應從每個資料行值建立一個資料行。 |
3 |
此資料行的值會置於樞紐後建立的資料行中。 |
設定樞紐轉換
您可以透過「SSIS 設計師」或以程式設計方式設定屬性。
如需有關可以在 [進階編輯器] 對話方塊中或以程式設計方式設定之屬性的詳細資訊,請按一下下列其中一個主題:
如需有關如何設定其屬性的詳細資訊,請參閱<如何:設定資料流程元件的屬性>。
|