integration services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...sql server...

49
SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 1 SQL Server 2005 自習書シリーズ ビジネス インテリジェンス編 No.7 Integration Services 応用編

Upload: others

Post on 09-Apr-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 1

SQL Server 2005 自習書シリーズ ビジネス インテリジェンス編 No.7

Integration Services 応用編

Page 2: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 2

この文章に含まれる情報は、公表の日付の時点での Microsoft Corporation の考え方を表しています。市場の変化に応える必要があるた

め、Microsoft は記載されている内容を約束しているわけではありません。この文書の内容は印刷後も正しいとは保障できません。この文章

は情報の提供のみを目的としています。

Microsoft、ActiveX、Windows NT、Windows 2000、Windows Server 2003 は Microsoft Corporation の米国およびその他の国におけ

る登録商標です。

その他、記載されている会社名および製品名は、各社の商標または登録商標です。

© Copyright 2006 Microsoft Corporation. All rights reserved.

Page 3: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 3

はじめに

この自習書では、 Integration Services の応用編として主に「反復型のデータ処理」について学習します。

Integration Services において反復型のデータ処理を行う場合は、タスクとして「Foreach ループコンテナ、For ルー

プコンテナ」が用意されています。コンテナの中で複数の動的なデータを扱う方法として、「ユーザー定義変数・システ

ム定義変数」「Expression」を利用します。この自習書を終えると Integration Services における反復型のデータ処理

に関する手法を取得できます。

この自習書で実習を行うために必要な環境は次の通りです。

OS

Windows Server 2003 もしくは

Windows XP Professional

ソフトウェア

SQL Server 2005 Enterprise Edition もしくは

SQL Server 2000 Developer Edition

この自習書での画面やテキストは、OS が Windows XP 、ソフトウェアが SQL Server 2005 Developer Edition

(SP2適用)の構成で記述されています。

実習用サンプルについて

この自習書と一緒にダウンロードした次のファイルは、実習を行う際に必要なファイルです。

ファイル名 説明

ECMarket.bak データベース ECMarket の内容がバックアップされたファイルです。ビジネスインテリジェンス

機能ダイジェスト編、Integration Services 基礎編と同じデータベースを使用します。

SSIS-TEST.zip 他システムからロードする商品マスタが格納されたファイルです。

こちらは今回の応用編のみで使用します。基礎編とは別にダウンロードする必要があります。

Page 4: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 4

バーチャルラボをご利用の方へ

実習書サンプルプログラムについて

プロジェクト名 説明

SSIS-VLB1 2 章で利用します。

C:¥VLB¥BI07¥Project¥SSIS-VLB1¥SSIS-VLB1.sln

SSIS-VLB2 3 章で利用します。

C:¥VLB¥BI07¥Project¥SSIS-VLB1¥SSIS-VLB2.sln

バーチャルラボ環境では、自習中に作成するプログラムは既に作成済みなので、ご覧になりたい方は参考にする事

ができます。

実習書サンプルデータについて

サンプルデータのデータベース、サンプルデータは既に設定済です。利用したデータの場所のみ記しておきます。

ファイル名 説明

EcMarket.bak C:¥VLB¥ BI01¥DATA に格納してあります。

SSIS-TEST.zip C:¥VLB¥BI07¥DATA に格納してあります。

Page 5: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 5

目次

1. Integration Services における 反復型データ処理 ............................................................................................ 6

1.1 反復型データ処理について ............................................................................................................................. 7

2. Foreachループ コンテナを利用した 反復型のデータ処理 ............................................................................... 9

2.1 ファイル列挙子を利用した反復処理 .............................................................................................................. 10

2.2 ADO 列挙子を使用した反復処理 ................................................................................................................ 28

3. Forループコンテナを利用した 反復型のデータ処理 ....................................................................................... 42

3.1 Forループコンテナを利用した反復処理 ....................................................................................................... 43

Page 6: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 6

1. Integration Services における

反復型データ処理

この章では、 Integration Services における反復型データ処理の概要につい

て紹介します。ここでは以下の内容について学習します。

・反復型データ処理について

・Foreach ループ コンテナについて

・For ループ コンテナについて

Page 7: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 7

1.1 反復型データ処理について

企業におけるデータの活用パターンは実に多岐にわたります。

・他システムからマスタデータを受信し、データベースにロードする場合

・クライアント別の売上データを他システム向けにテキストデータとして抽出する場合

これらの処理を考える場合、一般にはフラットファイル1つ、クエリ1つを使用することによって対応できるケースは少な

いでしょう。フラットファイルやクエリに渡す引数は、複数になることが大半で、「反復型の制御フロー」が必要不可欠に

なります。Microsoft SQL Server 2005 Integration Services (SSIS) では、反復やループをパッケージへ簡単に追加

できるようになりました。本書では、こういった「反復型の制御フロー」を中心に、より実践的な Integration Servicesの

使い方を紹介します。

Foreach ループ コンテナについて

Foreach ループ コンテナは列挙子を使用してループを実行します。パッケージで Foreach ルー

プ コンテナを使用すれば、指定した列挙子の各メンバについて、制御フローを繰り返すことができま

す。Foreach ループ コンテナでは、次のものを列挙できます。

列挙子の種類 説明

Foreach ADO テーブル内の行を列挙します。たとえば、パッケージ内に変数として定義さ

れている ADO レコードセット内の行を取得できます。

Foreach ADO.NET Schema Rowset データ ソースに関するスキーマ情報を列挙します。たとえば、SQL Server

データベース内のテーブルを列挙して一覧を取得できます。

Foreach File フォルダ内のファイルを列挙します。たとえば、取得するファイル名の先頭

文字や拡張子を指定して、対象ファイルの一覧を取得できます。

Foreach From Variable 指定した変数に含まれる列挙可能なオブジェクトを列挙します。列挙可能な

オブジェクトは、配列、ADO.NET DataTable、Integration Services、列挙子

などです。

Foreach Item コレクション内のアイテムを列挙します。たとえば、プロセス実行タスクで

使用する実行可能ファイルおよび作業ディレクトリの名前を列挙できます。

Foreach Nodelist XML パス言語 (XPath) 式の結果セットを列挙します。

Foreach SMO SQL Server 管理オブジェクト (SMO) オブジェクトを列挙します。たとえ

ば、SQL Server データベース内のビューを列挙して一覧を取得できます。

Page 8: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 8

For ループ コンテナ について

For ループ コンテナは、コンテナに含まれるすべての制御フローの要素をループして実行します。

以下のオプションを利用して、指定した条件が false と評価されるまでワークフローを繰り返すルー

プを構成できます。For ループ コンテナは、オプションに変数式を設定するような形で利用します。

For ループ コンテナには、別の For ループ コンテナを含めることができるため、パッケージ内で、

入れ子になっているループを構築したり、複合型のループを実装できます。

オプション

InitExpression 必要に応じて、ループが使用する値を初期化する式を指定します。

EvalExpression ループが停止するか続行するかを評価する式を指定します。

AssignExpression 必要に応じて、ループの繰り返しごとに条件を変更する式を指定します。

抽出先データソース(複数対象) 読込先データソース(複数)

データ変換

抽出

ロード

ループ

Page 9: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 9

2. Foreachループ

コンテナを利用した

反復型のデータ処理

この章では、仮想シナリオに基づき、Foreachループコンテナを利用した反復型

のデータ処理方法について学びます。ファイルを列挙子とするケースと SQL に

よる検索結果を列挙子とするケースを学びます。

Page 10: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 10

2.1 ファイル列挙子を利用した反復処理

この章では Foreach ループ コンテナのファイル列挙子を利用した反復処理について学びます。実店舗にて商品販

売を行っている仮想企業のデータソースに対し、送られてきた商品情報テキストデータを実際にロードするまでを実習

します。なお、今回の実習で使用するデータベースはあらかじめ、この自習書と一緒にダウンロードしたデータベース

のバックアップファイル、Productマスタを格納したフラットファイルを使用します。

データ変換のシナリオ

ここでは ECMarket という実店舗にて商品販売を行っている仮想企業のデータベースを作成し、

そのデータベースに対して他システムから抽出された商品マスタデータ(フラットファイル)をロードす

るパッケージを作成します。ECMarket は SQL Server 2005 のデータベースです。

以下に ECMarket のテーブルの一覧を示します。

次に ECMarketにロードする Productマスタのファイルを示します。

テーブル名 説明

Products 商品情報を保持しているテーブル。

Shop 店舗情報を保持しているテーブル。

JournalHeaders 注文情報を保持しているテーブル。

JournalDetails 注文明細情報を保持しているテーブル。

ファイル名 説明

SSIS-TEST.zip 他システムからの商品データファイル。ECMarket の Products テーブルにロードします。

C ドライブ直下に解凍します。解凍後、以下のように配置されていることを確認してく

ださい。

Page 11: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 11

データベースの準備

1. SQL Server Management Studio を起動します。オブジェクトエクスプローラの [データベー

ス] を右クリックして [データベースの復元] をクリックします。

2. データベースの復元ダイアログが表示されますので、復元先に ECMarket を指定します。復

元用のソースにはダウンロードした ECMarket のバックアップファイルを指定します。

3. 正しくデータベースが作成されているのを確認します。

Page 12: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 12

単一フラットファイルのデータロードを行うプロジェクトの作成

単一のフラットファイルから Productマスタデータを抽出し、ECMarket.Productsにロードするプロジ

ェクトを作成します。

1. Business Intelligence Development Studio を起動します。 [ファイル] メニューの [新規作

成] - [プロジェクト] をクリックして [新しいプロジェクト] ダイアログを起動させます。

2. プロジェクトの種類に [ビジネスインテリジェンスプロジェクト ] を選択し、テンプレートより

[Integration Services] プロジェクトを選択します。適当なプロジェクト名を入力してプロジェクト

を作成します。

3. 新規プロジェクトが作成されました。

ECMarket

Shop

Page 13: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 13

4. ツールボックスをクリックして [データ フロー タスク] をドラッグアンドドロップして制御フローレイ

アウトに貼り付けます。貼り付けたデータフロータスクのプロパティにおいてNameを「Productマ

スタロード」に変更します。

5. [データフロータスク] レイアウトに移動して、ツールボックスより [フラット ファイル ソース] と

[OLE DB 変換先] をドラッグアンドドロップします。[フラット ファイル ソース] と [OLE DB 変

換先] は矢印で接続します。

また、プロパティより[フラット ファイル ソース]のNameを[Productマスタ フラット ファイル ソー

ス]、[OLE DB 変換先]の Name を[ECMarketへロード]に変更します。

Page 14: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 14

6. [接続マネージャ]ペインで右クリックし、[新しいフラット ファイル接続]を選択します。[フラットファ

イル接続マネージャ エディタ]が起動します。

7. [全般]において[接続マネージャ名]を[Product マスタ フラット ファイル接続]とします。また[ファ

イル名]を[C:\SSIS-TEST\product_000.csv]に設定します。また、[先頭データ行を列名として使

用する]にチェックを入れます。

8. 次に[詳細設定]を選択します。ECMarket.Products テーブルの設定に合わせて以下のように

各列のプロパティを設定します。

Page 15: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 15

列名 設定

productcode OutputColumnWidth=32

productname OutputColumnWidth=128

productkana OutputColumnWidth=128

productcategory OutputColumnWidth=32

productcategorykana OutputColumnWidth=128

productprice DataType=通貨[DT_CY]

productcost DataType=通貨[DT_CY]

productfab OutputColumnWidth=128

productdate DataType=日付[DT_DATE]

9. 次に[プレビュー]を選択します。CSVデータがプレビューできる事を確認します。[OK] をクリック

してダイアログ ボックスを閉じます。

10. データフロータスクから[Product マスタ フラットファイル ソース]をダブルクリックして開きます。

[フラット ファイル ソースエディタ]が起動するので、[フラットファイル接続マネージャ]に作成した

ばかりの[Productマスタ フラット ファイル接続]を設定します。

Page 16: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 16

11. [プレビュー]ボタンをクリックしてプレビュー内容を確認します。[OK] をクリックしてダイアログ

ボックスを閉じます。

12. データフロータスクから[ECMarket へロード]をタスクをダブルクリックして、[OLE DB ソースエ

ディタ]を開きます。 [新規作成] ボタンを押して、接続マネージャの設定を行います

13. [OLE DB 接続マネージャの構成]がダイアログが表示されますので、 ECMarket のデータソ

ースを選択します。ECMarket のデータソースがない場合は、[新規作成]より ECMarket への接

続マネージャを作成してください。

[データ接続]において[ECMarket]が選択できている事を確認し、[OK] をクリックしてダイアログ

ボックスを閉じ[OLE DB 変換先エディタ]に戻ります。

Page 17: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 17

14. [OLE DB 変換先エディタ]において[データアクセスモード]を[テーブルまたはビュー –高速

読み込み]に、[テーブルまたはビュー名]を[dbo].[Products]に設定します。

15. [マッピング ]を選択します。入力列と変換先列のマッピングを確認します。変換先列の

productid は Produtcs テーブルにおいて IDENTITY が指定されている為、自動採番されます。

よって入力 CSVデータとマッピングさせる必要はありません。

16. [OK] をクリックしてダイアログ ボックスを閉じます。これで、データフローが完成しました。

Page 18: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 18

17. [デバッグ]から[デバッグ開始]を選択します。データフローの各タスクが緑色になり、1件のロー

ドが成功したことが確認できます。[進行状況]タブにも1件のロードが成功したというメッセージが

出力されています。確認後は[デバッグ]メニューから[デバッグの停止]を選択します。

18. それでは実際にデータを確認します。[スタート] メニューから、[すべてのプログラム] -

[Microsoft SQL Server 2005 ] – [SQL Server Management Studio] をクリックして、

Management Studio ツールを起動させます。接続情報を入力後、[データベース]ツリーから

[ECMarket]を選択します。ECMarket.Productsテーブルを参照するとデータが作成されている

Page 19: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 19

ことが確認できます。productcode=2300021 の「付箋紙セット」が追加されている事が確認できま

す。

19. [制御フロー]に戻ります。これから処理に成功したファイルを退避する処理を作成します。

ツールボックスから[ファイルシステムタスク]をドラッグアンドドロップします。[Product マスタロー

ド] と [ファイルシステムタスク] は矢印で接続します。また、プロパティより[ファイルシステムタス

ク]の Name を[Productマスタ ファイル退避]に変更します。

20. [Product マスタ ファイル退避]をダブルクリックして、[ファイル システム タスク エディタ]を起

動します。 [SourceConnection]に [Product マスタフラットファイル接続 ]を指定します。

[Operation]に[ファイルの移動]、[OverWriteDestination]に[true]を設定します。

21. フ ァ イ ル の移動先 を 設定 し ま す 。 [ フ ァ イ ル シ ス テ ム タ ス ク エデ ィ タ ] の

[DestinationConnection]から[<新しい接続>]を選択します。ファイル接続マネージャエディタが

Page 20: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 20

起動するので[使用法の種類]を[既存のフォルダ]に、[フォルダ]を[C:¥SSIS-TEST¥SUCCESS]

に設定します。これでデータフロータスクを実行後、フラットファイルが所定のフォルダに退避さ

れます。

22. [デバッグ]から[デバッグ開始]を選択します。データフローの各タスクが緑色になり、1件のロー

ドが成功したことが確認できます。また処理を実行したファイルが退避されている事を確認しま

す。

Page 21: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 21

Foreachループ コンテナを利用して、複数フラットファイルをロードするパッケージの作成

これより、Foreach ループ コンテナを作成し、ユーザー定義変数を使用するように変更する方法、

およびデータ フロー タスクをこのループに追加する方法を説明します。前章で作成したパッケージ

に対し、ユーザー定義変数を使用するように設定します。Microsoft SQL Server 2005 Integration

Services (SSIS) では制御フローとデータ フローが分離されているので、制御フローにループを追

加した場合でも、データ フローを修正する必要はありません。したがって、 前章で作成したデータ

フローは変更する必要がありません。

1. Business Intelligence Development Studio を起動します。[ファイル]メニューから[開く]-[プロ

ジェクト/ソリューション]を選択し、前章で使用したプロジェクトを開きます。

2. ソリューションエクスプローラーにおいて、前章で作成したパッケージを右クリックし、コピーしま

す。コピーしたパッケージ(Package.dtsx)を[SSISパッケージ]フォルダに貼り付けます。

3. コピーしたパッケージの名前を[ForEach.dtsx]に変更します。[パッケージオブジェクト名も変更

しますか?]というダイアログが出ますが、「いいえ」を選択します。

ECMarket

Shop

Page 22: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 22

4. コピーしたパッケージ[ForEach.dtsx]を選択します。ツールボックスから[Foreach ループコンテ

ナ]をドラッグアンドドロップして制御フローレイアウトに貼り付けます。プロパティにおいて Name

を[Productマスタロード ループ処理]に変更します。

5. [Product マスタロード ループ処理]をダブルクリックして[Foreach ループエディタ]を起動しま

す。

6. [コレクション]を選択して、[Enumerator]に[Foreach File 列挙子]を選択します。[列挙子の構

成]において[フォルダ]を[C:¥SSIS-TEST]に、[ファイル]を[product_*.csv]、[ファイル名の取得]

に[完全修飾名]を設定します。

Page 23: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 23

7. 次に[変数のマッピング]を選択します。ここでは変数を定義し、マッピングします。この変数名は、

データフロータスクを含む Foreach ループ エディタの処理内にて使用できます。[変数]におい

て[<新しい変数…>]を選択します。

8. [変数の追加]ダイアログが起動します。名前]を[varFileName]に設定します。その他の項目は

初期値通りにします。※パッケージは[Package]、名前空間は[User]、値の型は[String]、値はブ

ランクとします。

9. 作成した変数[varFileName]のインデックスは 0 とします。[OK] をクリックしてダイアログ ボックス

を閉じます。

Page 24: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 24

10. 前章でフラット ファイル接続マネージャを作成した当初は、1 つのファイルを静的に読み込む

ように構成しました。反復処理として、フラット ファイル接続マネージャで繰り返しファイルを読み

込むには、フラットファイル接続マネージャの ConnectionString プロパティを修正し、ユーザー

定義変数 (User::varFileName) を動的に読み込めるようにする必要があります。

11. 接続マネージャ ペインで、[Product マスタ フラットファイル接続] を右クリックして [プロパテ

ィ] をクリックします。[プロパティ]ウィンドウの [Expressions] で、空のセルをクリックし、参照ボタ

ン ([...]) をクリックします。

12. [プロパティ式エディタ] ダイアログ ボックスの [プロパティ] 列で[ConnectionString]を選択し

ます。続いて[式] 列の参照ボタン ([...]) をクリックし、[式ビルダ] ダイアログ ボックスを開きま

す。

Page 25: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 25

13. [式ビルダ]が起動します。[変数] ノードを展開します。[User::varFileName] 変数を [式] ボッ

クスにドラッグします。[OK] をクリックし、[式ビルダ]ウィンドウを閉じます。

14. [プロパティ式エディタ]に[User::varFileName]が設定されていることを確認します。Foreach ル

ープコンテナがデータフローに対し、ファイル名をユーザー定義変数として渡せるようになりま

す。

15. [Poductマスタロード]タスクと[Productマスタファイル退避]タスクを[Productマスタロードループ

処理]の中にドラッグアンドドロップします。制御フローがループ処理されるようになります。

[Ctrl]キーを押しながら 2つのタスクを選択すると、2つのタスクをまとめて移動できます。

Page 26: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 26

16. C:\SSIS-TEST\SAMPLE フォルダにある [product_001.csv~ product_005.csv]ファイルを

C:\SSIS-TEST直下にコピーします。

17. [デバッグ]から[デバッグ開始]を選択します。Product で始まる CSV ファイルがループコンテナ

に読み込まれ、データベースにロードされます。完了すると、データフローの各タスクが緑色にな

り、ロードが成功したことが確認できます。

Page 27: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 27

18. [進行状況]タブにも 5 件分、ロードが成功したというメッセージが出力されています。確認後は

[デバッグ]メニューから[デバッグの停止]を選択します。

19. SQL Server Management Studio から ECMarket.Productsテーブルを参照するとデータが

作成されていることが確認できます。

20. また処理を実行した 5件のファイルが退避されている事を確認します。

Page 28: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 28

2.2 ADO 列挙子を使用した反復処理

この章では Foreach ループ コンテナのADO列挙子を利用した反復処理について学びます。実店舗にて商品販売

を行っている仮想企業のデータベースから、Shopid のリストを取得し、Shop 別に売上のサマリーデータを出力します。

なお、今回の実習で使用するデータベースやフォルダ構成は 2.1章で設定した環境を使います。

データ変換のシナリオ

ここでは ECMarket という実店舗にて商品販売を行っている仮想企業のデータベースから Shopマ

スタの shopid を一覧で取得します。その shopid 別に売上データを抽出し、日別に集計・並び替え

を行い、CSV 出力します。

1. Business Intelligence Development Studio を起動します。 [ファイル] メニューの [新規作

成] - [プロジェクト] をクリックして [新しいプロジェクト] ダイアログを起動させます。

2. プロジェクトの種類に [ビジネスインテリジェンスプロジェクト ] を選択し、テンプレートより

[Integration Services] プロジェクトを選択します。適当なプロジェクト名を入力してプロジェクト

を作成します。

3. 新規プロジェクトが作成されました。

Page 29: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 29

4. ツールボックスをクリックして [SQL 実行 タスク]、[Foreach ループ コンテナ]、[データフロータス

ク] をドラッグアンドドロップして制御フローレイアウトに貼り付けます。 [SQL 実行 タスク] と

[Foreachループコンテナ] は矢印で接続します。

また、プロパティより[データフロータスク]を [Foreach ループ コンテナ]の中に配置します。

5. [SQL 実行タスク]をダブルクリックして[SQL 実行タスク エディタ]を開きます。[全般]において

プロパティを以下のように設定します。

列名 設定

Connection (local).ECMarket

※OLEDB 接続マネージャの構成にて設定

SQLSourceType 直接入力

SQLStatement SELECT shopid FROM shop

ResultSet 完全な結果セット

Name SQL Shop マスタ取得

Page 30: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 30

6. [結果セット]において[追加]をクリックし、[結果名]を[0]、[変数名]で<新しい変数…>を選択し、

[変数の追加]ダイアログを起動します。

7. [変数の追加]ダイアログが起動します。[名前]などを以下のように設定します。注意点として、[完

全な結果セット]を取得する場合は、取得する型を [Object]にする必要があります。設定後、

[OK]をクリックして、[変数の追加]を閉じます

列名 設定

コンテナ Package

名前 objShopidList

名前空間 User

値の型 Object

値 ブランク

Page 31: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 31

8. [OK]をクリックして、[SQL 実行タスク エディタ]を閉じます。

9. [Foreach ループコンテナ]をダブルクリックして[Foreach ループエディタ]を起動します。[全般]

において Name を「Shopid ループ処理」に設定します。

10. [コレクション]を選択して、[Enumerator]に[Foreach ADO 列挙子]を選択します。[列挙子の

構成]において[ADO オブジェクトソース変数]を[User::objShopidList]に、[列挙モード]を[全て

のテーブル内の行]に設定します。

Page 32: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 32

11. 次に SQL実行タスクの処理結果である Shop.shopid を受け取る変数を取得する受け皿を作り

ます。[変数のマッピング]を選択し、 [変数]において[<新しい変数…>]を選択します。

12. [変数の追加]ダイアログが起動します。名前]を[strShopid]に設定します。その他の項目は初

期値通りにします。※パッケージは[Package]、名前空間は[User]、値の型は[String]、値はブラ

ンクとします。

13. 作成した変数[User::strShopid]のインデックスは 0 とします。これで Foreach ループコンテナ内

Page 33: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 33

にて、shopid を利用できるようになります。[OK] をクリックしてダイアログ ボックスを閉じます。

14. [データフロータスク] レイアウトに移動して、ツールボックスより [OLE DB ソース] と [集

計] 、[並べ替え]、[フラットファイル変換先]をドラッグアンドドロップします。[OLE DB ソース] ⇒

[集計] ⇒[並べ替え]⇒[フラットファイル変換先] の順に矢印で接続します。

15. 各タスクの名前を以下の通りに設定します。

タスクの種類 名前

OLE DB ソース Shop 別売上明細

集計 日別集計

並べ替え 日付昇順ソート

フラットファイル変換先 Shop 別売上データ出力

Page 34: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 34

16. 抽出するデータの条件を設定します。[OLE DB ソース]をダブルクリックして、[OLE DB ソー

ス エディタ]を起動します。[接続マネージャ]において以下のように設定します。

項目 設定

OLE DB 接続マネージャ (local).ECMarket

データアクセスモード SQL コマンド

SQL コマンド SELECT

JournalHeaders.jhshopid,

JournalHeaders.jhshopname,

JournalDetails.jdsubtotal,

CONVERT(varchar,JournalDetails.jddate,111) as sumdate

FROM

JournalDetails

INNER JOIN JournalHeaders

ON JournalDetails.jdjhno = JournalHeaders.jhno

WHERE

(JournalHeaders.jhshopid = ?)

Page 35: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 35

17. 続いてクエリとパラメータのマッピングを行います。[クエリ パラメータ]の設定をクリックすると[ク

エリパラメータの設定]ウィンドウが起動すします。SQL コマンド上の「?」に対する変数のマッピン

グを行います。[パラメータ 0]に[User::strShopid]をマッピングします。

18. [OK] をクリックしてダイアログ ボックスを閉じます。これで Foreach ループ内で、「shopid」を

取得し、「shopid」毎にクエリが発行できるようになりました。

19. [日別集計]をダブルクリックして[集計変換エディタ]を開きます。[集計]タブにおいて、[使用で

Page 36: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 36

きる入力列]にチェックを入れ、以下のように設定します。設定後、[OK] をクリックしてダイアログ

ボックスを閉じます。

入力列 出力の別名 操作

jhshopid jhshopid グループ化

jhshopname jhshopname グループ化

sumdate sumdate グループ化

jdsubtotal jdsubtotal 合計

20. [日付順ソート]をダブルクリックして[並べ替え変換エディタ]を開きます。[使用出来る入力列]で

sumdate にチェックを入れ、並べ替えの順序を昇順に設定します。設定後、[OK] をクリックして

ダイアログ ボックスを閉じます。

21. [接続マネージャ]ペインで右クリックし、[新しいフラット ファイル接続]を選択します。[フラットフ

ァイル接続マネージャ エディタ]が起動します。

Page 37: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 37

22. ファイル名の設定を行います。[全般]において[接続マネージャ名]を[Shop 別売上データ CSV

出力]とします。また[ファイル名]を[C:\SSIS-TEST\xxx_yyyymmdd.csv]に設定します。

※この[ファイル名]は支店別に出力する必要があるので、後ほど変数化します。

23. 次に[詳細設定]を選択します。[新規作成]ボタンを4回クリックして、出力列を 4 つ追加します。

その後、出力結果に合わせる為に各列のプロパティを以下の通りに設定します。設定後、[OK]

をクリックしてダイアログ ボックスを閉じます。

列名 設定

列 0 Name=jhshopid

列 1 Name=jhshopname

列 2 Name=sumdate DataType=日付[DT_DATE]

列 3 Name=jdsubtotal DataType=日付[DT_NUMERIC]

Page 38: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 38

24. [接続マネージャ]ペインにて、ただ今作成した[Shop 別売上データ CSV 出力]を選択します。

右クリックして、[プロパティ] をクリックします。[プロパティ]ウィンドウの [Expressions] で、空のセ

ルをクリックし、参照ボタン ([...]) をクリックします。

25. [プロパティ式エディタ] ダイアログ ボックスの [プロパティ] 列に「ConnectionString」を選択し

ます。続いて[式] 列の参照ボタン ([...]) をクリックし、[式ビルダ] ダイアログ ボックスを開きま

す。

26. [式ビルダ]が起動します。[変数] ノードを展開します。User 定義 変数や、関数を用い下記の

ように式を設定します。[式の評価]を押して問題なく、[評価結果]が表示されれば、[OK] をクリッ

クし、[式ビルダ]ダイアログを閉じます。

Page 39: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 39

式 "C:¥¥SSIS-TEST¥¥SUCCESS¥¥"+ @[User::strShopid] + "_" + SUBSTRING( (DT_WSTR, 40) GETDATE(), 1, 10 )

+"sum.csv"

27. [プロパティ式エディタ]に式が設定されていることを確認します。[OK] をクリックし、ダイアログ

を閉じます。

28. [データフロータスク]の[Shop 別売上データ出力]をダブルクリックして[フラットファイル変換先エ

ディタ]を開きます。[フラットファイル接続マネージャ]を[Shop 別売上データ CSV 出力]に設定し

ます。

Page 40: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 40

29. [マッピング]にて、[入力列]と[変換先列]がマッピングしている事を確認します。[OK] をクリック

し、ウィンドウを閉じます。

30. [デバッグ]から[デバッグ開始]を選択します。データフローにおいてループ回数分実行されま

す。各タスクが緑色になり、データ出力が成功したことが確認できます。

31. 出力先フォルダにて shopid別にデータが出力されているのが確認できます。

Page 41: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 41

32. 出力された CSVファイルを開くと、該当 shopidの日別の売上合計が、日付の昇順で表示され

ている事が確認できます。

Page 42: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 42

3. Forループコンテナを利用した

反復型のデータ処理

この章では、For ループコンテナを利用した反復型のデータ処理方法について

学びます。

Page 43: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 43

3.1 Forループコンテナを利用した反復処理

今度は For ループコンテナについて学習します。Foreach ループ コンテナ同様に、パッケージ内で繰り返す制御フ

ローを定義します。ループの実装は、プログラミング言語の For ループ構造と同じです。For ループ コンテナは、ル

ープの各繰り返しで式を評価し、式が False に評価されるまでそのワークフローを繰り返します。

Forループコンテナのループ条件は、3つの要素から構成されます。

・ループ カウンタに値を割り当てる、省略可能な初期化式。

・ループの停止または続行のテストに使用する式を含む、評価式。

・ループ カウンタを増減する、省略可能な初期化式。

ループの条件式をユーザー定義変数やシステム定義変数を用いて設定するのが主な作業になります。

Forループコンテナを利用したパッケージの作成

For ループコンテナを利用した反復処理を前章 2.2 で作成したパッケージ(Shop 別の CSV 出力)に

追加します。

1. Business Intelligence Development Studio を起動します。[ファイル]メニューから[開く]-[プロ

ジェクト/ソリューション]を選択し、2.2章で使用したプロジェクトを開きます。

2. ソリューションエクスプローラーにおいて、前章で作成したパッケージ[Packge.dtsx]を右クリック

し、コピーします。コピーしたパッケージを[SSISパッケージ]フォルダに貼り付けます。

3. コピーしたパッケージの名前を[For.dtsx]に変更します。[パッケージオブジェクト名も変更します

Page 44: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 44

か?]というダイアログが出ますが、「いいえ」を選択します。

4. コピーしたパッケージ[For.dtsx]を選択します。ツールボックスから[For ループ コンテナ]をドラ

ッグアンドドロップして制御フローレイアウトに貼り付けます。プロパティにおいて Name を

[Shopid For ループ]に変更します。

5. [データフロータスク]はそのまま利用するので[Shopid For ループ]の中にドラッグアンドドロップ

します。[SQL Shopマスタ取得]とそれに連結している[Shopid ループ処理]タスクは、今回利用

しないので削除します。

6. For ループコンテナの中で利用する変数を追加します。[制御フロー]上でタスクが置かれていな

い部分を右クリックして[変数]を選択し、[変数]ウィンドウを起動します。

Page 45: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 45

7. For ループコンテナの中で利用する変数を追加します。パッケージを右クリックして[変数]を選択

し、変数を追加します。1 つめの変数は、名前が[intLoopCnt]、データ型を[Int32]、値を[0]に設

定します。2 つめの変数は、名前が[intLoopCntMax]、データ型を[Int32]、値を[500]に設定し

ます。

8. [Shopid For ループ]をダブルクリックし、[Forループエディタ]を開きます。

Page 46: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 46

9. [Forループ] のループ条件を設定します。項目を以下のように設定します。

項目名 値の意味 設定値

InitExpression ループ内で使用される変数値の初

期化

@intLoopCnt=100

EvalExpression ループ終了の評価式 @intLoopCnt<=@intLoopCntMax

AssignExpression ループ時の条件変化 @intLoopCnt=@intLoopCnt+100

10. クエリに対して渡す引数を Shopid から intLoopCnt に変更します。[データフロー]レイアウトに

遷移して、[Shop 別売上明細取得]をダブルクリックします。[OLE DB ソース エディタ]が開くの

で[接続マネージャ]において[パラメータ]をクリックします。パラメータの変数取得元を変更しま

す。

Page 47: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 47

11. [ ク エ リ パ ラ メ ー タ の設定 ] において 、 [ パ ラ メ ー タ 0] を [User::strShopid] か ら

[User::intLoopCnt]に変更します。[OK]をクリックして、ダイアログを閉じます。

12. 次に動的に生成している CSVのファイル名を変更します。接続マネージャ ペインで、[Shop別

売上データ CSV 出力] を右クリックして [プロパティ] をクリックします。[プロパティ]ウィンドウの

[Expressions] で、[+]をクリックすると[ConnectionString]が表示されます。前章で設定した、CSV

ファイル名になります。

13. [ConnectionString]の設定値をクリックすると参照ボタン ([...]) が表示されるのでクリックしま

す。[式ビルダ]が起動します。

Page 48: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 48

14. 変数の値を利用 し て 、 動的に 生成 し て い る フ ァ イ ル名 を [User::strShopid] か ら

[User::intLoopCnt]に変更します。変更後、[User::intLoopCnt]を文字列にキャストします。

“sum.csv”と固定していた部分を”for.csv”に変更します。式は以下を使用してください。

式 "C:¥¥SSIS-TEST¥¥SUCCESS¥¥"+ (DT_WSTR, 40) @[User::intLoopCnt] + "_" + SUBSTRING( (DT_WSTR, 40)

GETDATE(), 1, 10 ) +"for.csv"

15. 変更後、[式の評価]ボタンをクリックします。[評価結果]に式が設定されていることを確認しま

す。[OK] をクリックし、ダイアログを閉じます。

16. [デバッグ]から[デバッグ開始]を選択します。 [intLoopCnt]の初期値が 100 で、上限が

500、 1 ループ毎に +100 と設定しているので、計 5 回タスクが実行されます。各タスクが緑色

になり、データ出力が成功したことが確認できます。

Page 49: Integration Services 応用編download.microsoft.com/download/a/3/5/a354e691-55bf-4333...SQL Server 2005 自習書 ビジネス 4インテリジェンス編 No.7 バーチャルラボをご利用の方へ

SQL Server 2005 自習書 ビジネス インテリジェンス編 No.7 49

17. 出力先フォルダにて shopid 別にデータが出力されているのが確認できます。今回は

shopid100~500 までのデータが出力されます。shopid= 600, 700 のレコードは forループコン

テナで指定した評価式により表示されないことが確認できます。