すべて関連している xml ファイルのセットを取得し、これらのファイルからレコードのサブセットを選択し、いくつかの列を変換し、別の形式を使用して単一の xml ファイルにエクスポートする必要があるタスクがあります。
私は SSIS を初めて使用しますが、これまでのところ、最初に 2 つの xml ファイルをインポートすることができました (簡単にするために、2 つのファイルから始めます)。
「アイテム」と呼ぶことができる最初のファイルには、2 番目のファイル「マイルストーン」で関連するレコードを識別するために使用される ID の中にいくつかの基本的なメタデータが含まれています。データフローでルックアップ変換を使用して「有効なレコード」をフィルタリングしました。これで、必要なレコードを取得するための有効なアイテム ID が得られました。これらの有効な ID を (Item.xml の残りの列と共に、Sort を介して、次にマージ結合に注ぎ込みます。
2 番目のファイルは 2 つの出力で構成されており、1 つには 2 つの列 (ItemID と RowID) が含まれています。2 つ目は、マイルストーン関連のすべてのデータと RowID を含みます。これらを RowID に基づいて内部マージ結合に通したので、マイルストーン データに ItemID が含まれています。次に、ItemID を使用して、両方のファイルに対して完全な外部結合マージ結合を実行します。
これにより、次のようなデータが得られます。
- ItemID[1] - MilestoneData[2]
- ItemID[1] - MilestoneData[3]
- ItemID[1] - MilestoneData[4]
- ItemID[1] - MilestoneData[5]
- ItemID[2] - MilestoneData[6]
- ItemID[2] - MilestoneData[7]
- ItemID[2] - MilestoneData[8]
このデータを派生列変換に通して、実際に必要なデータの列を作成できますが、これをリレーショナルな方法で構造化する/別の xml 形式に正規化する方法がわかりません。
アイデアは、次のようなものを出力することです:
<item id="1">
<Milestone id="2">
<Milestone />
<Milestone id="3">
<Milestone />
</item>
誰かが私を正しい方向に向けることができますか?
更新: 私が持っているもののもう少し詳細な図と、私が達成したいこと:
アイテム.xml:
<Items>
<Item ItemID="1">
<Title>
Data
</Title>
</Item>
<Item ItemID="2">
...
</Item>
...
</Items>
Milestone.xml:
<Milestones>
<Item ItemID="2">
<MS id="3">
<MS_DATA>
Data
</MS_DATA>
</MS>
<MS id="4">
<MS_DATA>
Data
</MS_DATA>
</MS>
</Item>
<Item ItemID="3">
<MS id="5">
<MS_DATA>
Data
</MS_DATA>
</MS>
</item>
</Milestones>
XML ソースを使用するときに SSIS で表示される方法は完全に直感的ではありません。つまり、Item 行と MS 行は 2 つの別個の出力です。特定のアイテムに対応するマイルストーンを取得するために、結合を介してこれらを実行する必要がありました。ここでは問題ありません。アイテムとの完全な外部結合を実行すると、明らかにアイテムの同じデータと MS の異なるデータを含む複数の行を持つ平坦化されたテーブルが得られます。基本的に、テーブルに表示しようとしたもの、つまり一意の MilestoneData ごとに多くの冗長な Item データを取得します。
最終的には次のようになります。
<NewItems>
<myNewItem ItemID="2">
<SomeDataDirectlyFromItem>
e.g. Title
</SomeDataDirectlyFromItem>
<DataConstructedFromMultipleColumnsInItem>
<MyMilestones>
<MS_DATA_TRANSFORMED MSID="3">
data
</MS_DATA_TRANSFORMED>
<MS_DATA_TRANSFORMED MSID="4">
data
</MS_DATA_TRANSFORMED>
</MyMilestones>
</DataConstructedFromMultipleColumnsInItem>
<myNewItem ItemID="3">
<SomeDataDirectlyFromItem>
e.g. Title
</SomeDataDirectlyFromItem>
<DataConstructedFromMultipleColumnsInItem>
<MyMilestones>
<MS_DATA_TRANSFORMED MSID="5">
data
</MS_DATA_TRANSFORMED>
</MyMilestones>
</DataConstructedFromMultipleColumnsInItem>
</myNewItem>
<myNewItem ItemID="4">
<SomeDataDirectlyFromItem>
e.g. Title
</SomeDataDirectlyFromItem>
<DataConstructedFromMultipleColumnsInItem>
<MyMilestones></MyMilestones>
</DataConstructedFromMultipleColumnsInItem>
</myNewItem>
</NewItems>