この記事では、SQL Server統合サービスパッケージを使用して、OracleデータベーステーブルのデータをExcelファイルの複数のワークシートに分割およびエクスポートする方法について説明します。
多くの場合、DBAはデータベースからアドホックレポートを生成するように要求しました。最近、データベースからレポートを生成するように依頼されました。彼らは私にExcelファイルの複数のワークシートでレポートを提供することを望んでいます。それを行うにはさまざまな方法がありますが、クエリはリソースを大量に消費していました。したがって、1回の実行でデータベースからデータを抽出したいので、SQLServer統合サービスパッケージを使用することにしました。 SQL Serverデータツールには、条件付き分割変換と呼ばれるコンポーネントが1つあります。 タスクを達成するために使用できます。
SQL Serverデータツールを使用すると、ODBC接続を使用してさまざまなデータベースプラットフォームからデータを取得できます。ほとんどのデータベースプラットフォームは、アプリケーションとデータベース間の接続を構成するために使用できる接続ドライバーを提供します。
条件付き分割変換とは
条件付き分割変換では、データの内容に応じて、データ行をさまざまな出力にルーティングできます。条件付き分割変換の実装は、プログラミング言語のCASE決定構造のようなものです。式を評価し、その結果に基づいて、データ行を指定された出力に転送します。この変換はデフォルトの出力も提供するため、行が式に一致しない場合は、デフォルトの出力に転送されます。 (MSDNリファレンス :https://docs.microsoft.com/en-us/sql/integration-services/data-flow/transformations/conditional-split-transformation?view =sql-server-2017)。
デモのセットアップ
マシンにOracle11gExpressEditionをインストールしました。 EMPLOYEESDATAというテーブルを作成しました HR XEのスキーマ データベースとAdventureWorks2014からのダミーレコードを追加しました データベース。
以下のコードはテーブルを作成します:
CREATE TABLE"HR"。"EMPLOYEE_DATA"( "BusinessEntityID" NUMBER(*、0)、 "Title" NVARCHAR2(8)、 "FirstName" NVARCHAR2(50)、 "MiddleName" NVARCHAR2(50)、 "LastName" NVARCHAR2(50)、 "Suffix" NVARCHAR2(10)、 "JobTitle" NVARCHAR2(50)、 "PhoneNumber" NVARCHAR2(25)、 "PhoneNumberType" NVARCHAR2(50)、 "EmailAddress" NVARCHAR2(50)、 "EmailPromotion" NUMBER( *、0)、 "AddressLine1" NVARCHAR2(60)、 "AddressLine2" NVARCHAR2(60)、 "City" NVARCHAR2(30)、 "StateProvinceName" NVARCHAR2(50)、 "PostalCode" NVARCHAR2(15)、 "CountryRegionName" NVARCHAR2( 50))セグメント作成即時PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULTSSDTを使用してOracleデータベースに接続するには、Oracleクライアントソフトウェアをインストールする必要があります。 SQL Serverデータツールは32ビットモードで動作するため、Oracle用の32ビットバージョンのODBCドライバーをインストールする必要があります。ここからOracleClientをダウンロードできます。
「HRData.xls」というExcelファイルを作成しました ’には、オーストラリアという2つのワークシートがあります およびカナダ 。 CountryRegionNameの値に基づいてデータが分割されます 桁。 CountryRegionNameの列の値の場合 列はカナダです その後、カナダに保存されます ワークシートとCountryRegionNameの列の値の場合 オーストラリアです その後、オーストラリアに保存されます ワークシート。
SSISパッケージの作成方法は誰もが知っているので、データフロータスクの作成方法を直接説明します。
データフロータスクの作成
データフロータスクでは、次の3つのコンポーネントを使用します。
- Oracleデータベースからデータを取り込むためのADO.NETソース。
- データを複数のセットに分割するための条件付き分割。
- 「オーストラリア」と「カナダ」という2つのワークブックがあるExcelの目的地。
ADO.NETソースの構成
ADO.NETソースをドラッグアンドドロップします SSISツールボックスから データフローへ ウィンドウに名前を付けて従業員データ 次の画像に示すように:
従業員データをダブルクリックします 。 ADO.NETソースエディタ ダイアログボックスが開きます。ここでは、まだ接続を作成していないため、ADO.NET接続マネージャー ドロップダウンボックスは空です。新しい接続を作成します。これを行うには、新規をクリックします そのダイアログボックスで。この後、別のダイアログボックス接続マネージャーの構成 下の画像に示すように開きます:
ADO.NET接続マネージャーの構成 ダイアログボックスで、[新規]をクリックします 。別のダイアログボックス、接続マネージャー 、開きます。
デフォルトでは、 .Net Providers \ SQLClient Data Provider プロバイダーで選択されます ドロップダウンボックス。 Oracleデータベースからデータを入力するため、 OracleClient Data Providerを選択します。 。
サーバー名 テキストボックスに、Oracle11gがインストールされているサーバーの名前またはIPアドレスを入力します。ユーザー名とパスワードは、Oracleデータベースへの接続に使用されます。ローカルVMにOracleをインストールしたので、サーバー名は localhostになります 。 HRを使用してデータベースに接続します ユーザー、したがってユーザー名は HRになります 。適切なパスワードを入力して、[ OK]をクリックします 。次の画像を参照してください:
構成が完了したら、[接続のテスト]をクリックします データベースとの接続を確認し、[OK]をクリックします。
ADO.NET接続マネージャーを構成したため、ADO.NET接続マネージャーでデフォルトの接続マネージャーが自動的に選択されます。 ドロップダウンリストボックス。テーブルからデータを取得するため、テーブルまたは表示を選択します [データアクセスモード]ドロップダウンボックス。すでにEMPLOYEESDATAを作成しました HRのテーブル Oracleデータベースのスキーマ。したがって、 HR.EmployeesDataを選択します。 テーブルまたはビューの名前 下の画像に示すようなドロップダウンボックス:
条件付き分割の構成
ここで、条件に基づいてExcelのさまざまなワークシートにデータをエクスポートするために、条件付き分割変換を使用します。 SSISから条件付き分割コンポーネントをドラッグします データフローへのツールボックス 下の画像に示すようなウィンドウ。
先ほど申し上げましたように、 HR.EmployeeDataのデータの出力 テーブルは、条件付き分割で定義された条件に基づいて、複数のワークシートにエクスポートされます。 コンポーネント。
まず、ADO.Netソースを条件付き分割変換に接続します。これを行うには、従業員データの下部にあるデータフローパスの青い矢印をクリックします コンポーネントをドラッグして、下の画像に示すように条件付き分割変換にドラッグします。
次に、条件付き分割変換を構成します。前述したように、HR.EmployeesDataテーブルのデータは、 CountryRegionNameの値に基づいて分割されます。 列を作成し、別のワークシートに保存します。
これを行うには、条件付き分割変換エディターをダブルクリックします 。 条件付き分割変換エディター 次の画像に示すように、ダイアログボックスが開きます。
上の画像でわかるように、条件付き分割変換エディターには、データを次のコンポーネントにルーティングする方法を決定する3つのセクションがあります。
セクションA :このセクションの列 ADO.Netソースコンポーネントから派生した出力列のフォルダーリストが一覧表示されます。これを使用して、データを分割するための条件を定義できます。
セクションB :このセクションでは、出力をさまざまな形式に変換し、データを分割するための条件を定義するために使用できるさまざまな関数をリストします。
セクションC :このセクションでは、ADO.Netソースの出力を複数の結果セットに分割できる条件を作成できます。
セクションCに条件を追加します。したがって、最初に列ノードを展開し、 CountryRegionNameをドラッグします 次の画像に示すように、列(セクションA)をグリッド(セクションC)にドロップします。
この例では、 CountryRegionNameに基づいて条件を定義します 桁。 「カナダ」の従業員のリストは、カナダという名前のExcelワークシートに保存されます。 オーストラリアの従業員のリストはオーストラリアに保存されます ワークシート。条件に基づいて、等しい(==)を使用します オペレーター。方程式は次のようになります:
[CountryRegionName]=="オーストラリア"[CountryRegionName]=="カナダ"
条件を定義したら、[ OK]をクリックします ダイアログボックスを保存して閉じます。
Excelの宛先の構成
データフローを複数のパスに分割したので、各パスの宛先を追加します。テーブルデータを異なるExcelワークシートにエクスポートするため、2つのExcel宛先を作成する必要があります。これを行うには、Excel接続をSSISツールボックスからドラッグアンドドロップします。 下の画像に示すように:
Excelの宛先を構成するには、Excelの宛先をダブルクリックします。 Excel接続マネージャー ダイアログボックスが開きます。そのダイアログボックスで、[新規]をクリックします 次の画像に示すように:
Excel Connection Managerという別のダイアログボックス 開くでしょう。このダイアログボックスでは、Excelファイルが配置されているパスを指定します。 従業員データを作成しました デスクトップ上のファイル。ファイルシステムをトラバースしてファイルを選択し、[ OK]をクリックします 下の画像に示すように:
さて、データアクセスモード ドロップダウンボックスで、テーブルまたはビューを選択します およびExcelシートの名前 ドロップダウンボックスで、 Australia $、を選択します 下の画像に示すように:
次に、データパスを構成します。これを行うには、青いデータパスの矢印を条件付き分割変換からオーストラリアの従業員にドラッグします 宛先コンポーネントに優れています。データパスをExcelの宛先に接続すると、選択した宛先に送信する出力を選択するためのダイアログボックスが表示されます。ダイアログボックスは次のようになります。
ダイアログボックスには、条件付き分割変換から利用できるドロップダウンリストのすべての出力が含まれます。この場合、ドロップダウンリストには2つのオプションが含まれます。
- オーストラリア
- カナダ
- デフォルトの出力
Excelの宛先コンポーネントをダブルクリックして、テーブルの列をExcelの列にマップします。これを行うには、Excelの宛先コンポーネントをダブルクリックし、Excelの宛先エディターでクリックします。 ダイアログボックスで、マッピングを選択します 次の画像に示すように、ダイアログボックスの左側のペインにあるオプション:
上の画像では、入力列 Oracleテーブルの列名と宛先列 Excelシートの列名になります。このデモでは、テーブルとExcelファイルの列名は同じです。つまり、 Excel Destination Editor 入力列と出力列を自動的にマッピングします。
同様に、カナダのデータフロー構成プロセスを繰り返します。 データパス。
- カナダを選択する必要があります 入出力の選択 下の画像に示すように、ダイアログボックス。
- Excel Destination Edito r、カナダ$を選択します Excelシートの名前 下の画像に示すようなドロップダウンボックス。
すべての構成が完了すると、データフロータスク全体は次のようになります。
SSISパッケージのテスト
それでは、パッケージを実行して、どのように機能するかを見てみましょう。これを行うには、開始をクリックします メニューバーのボタン。パッケージが正常に実行を完了すると、次のようになります。
上の画像が示すように、パッケージはオーストラリア地域に1つのレコードを挿入しました カナダ地域のワークシートと2つのレコード ワークシート。
概要
この記事では、単一のデータフローでSSISパッケージを作成しました。データフローに条件付き分割変換を追加して、データを複数のパスに分割しました。次に、これらの各データパスを異なるExcelワークシートに転送しました。
参照 :
SQLデータをExcelファイルの複数のワークブックにエクスポートします。
便利なツール:
Devart SSISデータフローコンポーネント– SQL ServerIntegrationServicesを介してデータベースとクラウドデータを統合できます。
Devart ODBCドライバー–ODBCベースのアプリケーションに高性能で機能豊富な接続ソリューションを提供します。