ピボット変換

ピボット変換は、入力データを列の値でピボットすることにより、正規化されたデータを、正規化の度合は低いがより圧縮された形に設定します。たとえば、顧客名、製品、購入した数量を一覧表示する、正規化された Orders データセットには、通常、複数の製品を購入した顧客に対して複数の行があり、その顧客に対する各行には製品ごとに注文の詳細が示されています。ピボット変換では、データセットを製品列でピボットすることにより、各顧客のデータセットを単一行で出力できます。その行では顧客のすべての購入情報が一覧となり、列名に製品名が表示され、製品列の値には購入した数量が表示されます。すべての顧客がすべての製品を購入するわけではないので、多くの列に NULL 値が含まれることがあります。

データセットがピボットされる場合、ピボット処理において入力列はさまざまに機能します。列が果たす役割には、次のものがあります。

  • 列は、変更されずに出力に渡されます。入力行は 1 つの出力行のみに渡される場合が多いため、変換により列の最初の入力値のみがコピーされます。

  • 列は、レコードのセットを識別するためのキーまたはキーの一部として機能します。

  • 列は、ピボットを定義します。この列の値は、ピボットされたデータセットの列に関連付けられます。

  • 列には、ピボットにより作成される列に配置する値が含まれます。

次の図は、データが Product 列でピボットされる前のデータセットを示しています。

ピボット処理後のデータセット

次の図は、データが Product 列でピボットされた後のデータセットを示しています。

ピボット処理前のデータセット

データを効率よくピボットする、つまり、出力データセットで作成されるレコード数をできるだけ少なくするには、入力データをピボット列で並べ替える必要があります。データが並べ替えられていない場合、ピボットの変換では、設定キーの各値に対して複数のレコードが生成されることがあります。ここで設定キーとは、設定されたメンバーシップを定義する列のことです。たとえば、データセットを Name 列でピボットする際に名前が並べ替えられていない場合、出力データセットには、各顧客の行が複数含まれることがあります。これは、Name 列の値が変わるたびにピボットが発生するためです。

入力データには重複する行が含まれる場合があります。重複する行があると、ピボット変換は失敗します。"重複する行" とは、設定キー列およびピボット列に同じ値を持つ行のことです。たとえば、図に示すように、データが Product 列でピボットされる前にデータセットを使用し、Cust 列に Kate、Product 列に Soda という値で行を追加する場合、Qty 列の値に関係なく、重複する値によってピボット変換は失敗します。エラーを回避するには、エラー行をエラー出力にリダイレクトするように変換を構成するか、重複する行が存在しないように値を事前に集計しておくことができます。たとえば、サンプル データセットでは、顧客および製品ごとに Qty 列の値を合計することができます。

ピボットの変換は、入力列と出力列のプロパティを使用して、ピボット操作を定義します。

ピボット変換には、PivotKeyValue カスタム プロパティがあります。このプロパティは、パッケージの読み込み時にプロパティ式で更新できます。詳細については、「Integration Services の式のリファレンス」、「パッケージでのプロパティ式の使用」、および「変換のカスタム プロパティ」を参照してください。

この変換は、1 つの入力、1 つの標準出力、および 1 つのエラー出力をとります。

サンプル データセットの構成

図に示されているサンプル データセットは、次のように構成されたものです。Cust 列の PivotUsage プロパティは 1 に設定され、この列が設定キー列であることを示しています。Product 入力列の PivotUsage プロパティは 2 に設定され、この列を製品ごとに作成する必要があることを示しています。Qty 入力列の PivotUsage プロパティは 3 に設定され、数量の値がピボット列に配置されることを示しています。

変換出力には、6 つの列が含まれるように構成されています。列には、CustHamSodaMilkBeer、および Chips という名前が付けられています。列を追加するには、[詳細エディター] ダイアログ ボックスを使用します。Ham 列の PivotKeyValue プロパティは Ham に設定され、変換により、この値がこの入力列から検索されることを示しています。同様に、Soda 列の PivotKeyValue プロパティは Soda に設定され、以下の列も、同様に設定されています。

次に、変換入力の列が、出力の列にマップされています。

Cust 列の SourceColumn プロパティは、Cust 入力列の系列 ID を使用するように構成されています。HamSodaMilkBeer、および Chips 列の SourceColumn プロパティは、Qty 入力列の系列 ID を使用するように構成されています。別の構成方法として、HamSodaMilkBeer、および Chips 列の SourceColumn プロパティに -1 を設定することもできます。この場合、データ値の代わりに値 True が挿入されます。たとえば、Beer 列に 12 や 24 という購入数量の値ではなく、値 True が含まれ、その顧客が製品を購入したという事実だけが示されます。

変換出力の行には、CustQty 入力列の値が含まれます。

ピボットのオプション

入力列の PivotUsage プロパティを設定すると、ピボット処理で各列が果たす役割を指定できます。PivotUsage の有効な値は、0、1、2、および 3 です。

次の表では、PivotUsage オプションについて説明します。

オプション

説明

0

列はピボットされず、列の値は変換出力に渡されます。

1

列は、1 つ以上の行を 1 つのセットの部分として識別するための設定キーとなります。同じ設定キーを持つすべての入力行が、1 つの出力行に結合されます。

2

列はピボット列となります。各列の値から、少なくとも 1 つの列が作成されます。

3

この列の値は、ピボットの結果として作成された列に配置されます。

ピボット変換の構成

プロパティを設定するには SSIS デザイナーから行うか、またはプログラムによって設定します。

[詳細エディター] ダイアログ ボックスまたはプログラムを使用して設定できるプロパティの詳細については、次のトピックのいずれかを参照してください。

プロパティの設定方法の詳細については、「データ フロー コンポーネントのプロパティを設定する方法」を参照してください。

Integration Services のアイコン (小) 最新の Integration Services の入手

マイクロソフトが提供する最新のダウンロード、アーティクル、サンプル、ビデオ、およびコミュニティで選択されたソリューションについては、MSDN または TechNet の Integration Services のページを参照してください。

これらの更新が自動で通知されるようにするには、ページの RSS フィードを定期受信します。