# Microsoft Dynamics 365 Sales インポート連携 この Treasure Data 連携により、デジタルセールス組織に最新のリモートコラボレーション機能を提供し、優れたチームワークとスムーズなエンゲージメントを実現します。 - より強固な関係を見つけ、構築する - 生産性とパフォーマンスを向上させる - 顧客の単一ビューを取得する このインポート連携により、MS Dynamics 365 から Treasure Data へ、コンタクトやトランザクションデータ(見積もりや受注を含む)を取り込むことができます。 ## 前提条件 - Treasure Data の基本知識 - **Client Credentials 認証**: Azure Active Directory および Dynamics CRM セキュリティ設定にアクセスするための管理者権限 - **OAuth 認証**: 同意を付与するための Azure「エンタープライズアプリケーション」へのアクセス権を持つテナント管理者またはユーザー ## 増分データ読み込みについて - 増分読み込みが有効な場合、Dynamics API に発行されるクエリには $filter と `$orderby` ステートメントが含まれます。$filter は目的の条件でデータをクエリし、$orderby はデータを降順で並べ替えます - 最初に受信した値は、次回のジョブフィルターの参照として保持されます。次のジョブの $filter は前回のジョブデータを除外し、新しいデータのみを取得します - このプロセスは後続の実行で繰り返されます ![](/assets/image2021-4-6_18-43-24.86d03abace4ca184c72b6857a6cc454f40bca56d8884edae922267e2da2e50bd.62ce3a79.png) - 増分読み込みが有効な場合、終了時刻は空白のままにします(デフォルトでは現在時刻に設定されます) - フィルター列(デフォルトでは **`modifiedon`**)には、null または空の値を含めることはできません ### 例 以下は、増分読み込みが有効な場合の例です。 - 前提条件/条件 - 開始時刻 = 2021-01-01T00:03:01Z - ジョブは毎日実行するようにスケジュール - 1回目のジョブ現在時刻 = 2021-01-15T00:03:01Z: $filter=**`modifiedon`** > 2021-01-01T00:03:01Z and **`modifiedon`**`<= 2021-01-15T00:03:01Z, $orderby = modifiedon desc. 最初のレコード結果は modifiedon = 2021-01-10T00:00:00Z` - `2回目のジョブ現在時刻 = 2021-01-16T00:03:01Z:` $filter=**`modifiedon`** > `2021-01-10T00:00:00Z` and **`modifiedon`**`<= 2021-01-16T00:03:01Z, $orderby = modifiedon desc. 最初のレコード結果は modifiedon = 2021-01-16T00:03:01Z` - `3回目のジョブ現在時刻 = 2021-01-17T00:03:01Z:`$filter=**`modifiedon`** > `2021-01-16T00:03:01Z` and **`modifiedon`**`<= 2021-01-17T00:03:01Z, $orderby = modifiedon desc. 最初のレコード結果は modifiedon = 2021-01-17T00:00:01Z` - `...` ## Client ID と Client Secret の取得 これらの値は、Client Credentials 認証オプションを使用して接続するために必要です。OAuth オプションを使用して認証する場合は、これらはオプションです。 Microsoft のドキュメントに従って、クライアントアプリケーションを作成し、Client ID と Client Secret を取得してください。 [https://docs.microsoft.com/en-us/powerapps/developer/data-platform/use-single-tenant-server-server-authentication#azure-application-registration](https://docs.microsoft.com/en-us/powerapps/developer/data-platform/use-single-tenant-server-server-authentication#azure-application-registration) 登録したアプリケーションに対して、最小限の権限を持つカスタムセキュリティロールを作成する必要があります。以下を参照してください。 - [https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/administering-dynamics-365/dn531130(v=crm.8)](https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/administering-dynamics-365/dn531130(v=crm.8)) - [https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/administering-dynamics-365/dn531090(v=crm.8)](https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/administering-dynamics-365/dn531090(v=crm.8)) ## エンティティタイプ 以下の設定でインポートすることで、利用可能なすべてのエンティティを取得できます。 - Entity Type = entity - Filter Column = overwritetime - Start Time = 1800-06-21T00:00:00Z ![](/assets/authentications-treasure-data.11a13b5b370adaac27023746f9b19c3899fcc425e67242f9e44738ae25d70096.62ce3a79.png) この連携は、汎用的な設定でほぼすべてのエンティティをサポートしていますが、特定の設定が必要なエンティティに気づいた場合は、サポートにお問い合わせください。 # TD Console を使用した接続の作成 ## 新しい接続の作成 クエリを実行する前に、Treasure Data でデータ接続を作成して設定する必要があります。データ接続の一部として、連携にアクセスするための認証を提供します。 1. **TD Console** を開きます。 2. **Integrations Hub** > **Catalog** に移動します。 3. Microsoft Dynamic 365 Sales を検索して選択します。 ![](/assets/image2021-3-26_13-56-23.c5debb8998238c05f8dc6b4920bfe1043fc3a53e8c1fa3d2fcf7dee26f513349.62ce3a79.png) 1. **Create Authentication** を選択します。 ![](/assets/image2021-3-26_14-1-13.6ed67e7220d4eb7c2f166835f08a39f5b1c49cbe7956d269234c12f2ba8ae6bd.62ce3a79.png) 1. MS Dynamics のドメイン名を入力します。 2. 以下のいずれかの認証方法を選択します。 OAuth 認証 1. OAuth を選択します。 ![](/assets/image2021-3-26_14-1-13.6ed67e7220d4eb7c2f166835f08a39f5b1c49cbe7956d269234c12f2ba8ae6bd.62ce3a79.png) 2. 認証するための資格情報を入力します。 3. オプションで、「Click here and log in to Microsoft Dynamics 365 to grant consent」を選択します。 4. **Integrations Hub** > **Catalog** に戻ります。 5. Microsoft Dynamics 365 Sales を検索して選択します。 6. Domain の値を入力します。 7. OAuth Authentication Method を選択します。 8. 新しく作成した OAuth 接続を選択します。 9. OAuth 接続フィールドの定義を確認します。 Client Credentials 認証 1. Client Credentials を選択します。 ![](/assets/image2021-3-26_14-3-59.8516ff9981b8c29ab4c044f3acd5271febeb25c7a31a6c4f9e8f5d5c79d4008e.62ce3a79.png) 2. Domain の値を入力します。 3. Tenant ID の値を入力します。 4. Client ID の値を入力します。 5. Client Secret を入力します。 6. **Continue** を選択します。 7. 接続の名前を入力します。 8. **Continue** を選択します。 ## Treasure Data へのデータ転送 認証済み接続を作成すると、自動的に Authentications に移動します。 1. 作成した接続を検索します。 2. **New Source** を選択します。 3. Data Transfer フィールドで **Source** の名前を入力します。 ![](/assets/image2021-3-26_14-55-0.59c9d050df7b5bee98615094570021ed08c011d22bd2c520815b92732a05ee55.62ce3a79.png) 1. **Next** を選択します。 Source Table ダイアログが開きます。 ![](/assets/microsof_365_kaizen.35a80e764a9361f72471206d38bdfe3f1248a148a24cc3fce904744a7d9fc368.62ce3a79.png) 以下のパラメータを編集します。 | パラメーター | 説明 | **必須** | | --- | --- | --- | | Entity Type | エンティティの論理名。例: contact、sales_order、account...すべての利用可能なエンティティを取得するには[fetch Entity Type](/ja/int/microsoft-dynamics-365-sales-import-integration)を使用してください | はい | | Filter Column | データをフィルタリングする列(日時列のみサポート) | いいえ | | Start Time | UTC形式 YYYY-MM-DDThh:mm:ssZ。このタイムスタンプから変更されたデータをインポートします。 - Start Timeフィールドは排他的です。つまり、この値と等しいデータはダウンロードされません。この値と等しいデータを含めたい場合は、時刻を1秒早く設定してください(End Timeは包含的です) | いいえ | | End Time | このフィールドはオプションです。指定しない場合は現在時刻が使用されます。UTC形式 YYYY-MM-DDThh:mm:ssZ。このタイムスタンプから変更されたデータをインポートします。 Incremental loadingが有効な場合は、このフィールドを空白のままにすることを推奨します。 | いいえ | | Custom Expression Filter | - データインポートを絞り込むためのカスタムフィルター式を入力できるテキストエリア - このフィルターは、ANDオペレーターを使用して時間ベースのフィルターと組み合わされます - 時間ベースのフィルタリングのみが必要な場合は空のままにします - カスタムフィルター式の作成方法の詳細については、以下の「カスタムフィルター式の構築」セクションを参照してください | | | Incremental Loading? | 有効にすると、最後の取り込みから新しいデータのみをインポートします。 | いいえ | | Skip Invalid Data? | 列のデータ型を既知の値に変換できない場合、その行はスキップされます。 処理された行の30%以上が無効な場合、ジョブは失敗ステータスで停止します。 | いいえ | ## カスタムフィルター式の構築 **基本構文** カスタムフィルター式は以下で構成されます: - フィールド名(例: revenue、classification、status) - 演算子(例: eq、ne、gt) - 値(データ型に基づいて適切にフォーマットする必要があります) **演算子** 1. **比較演算子** - `eq` - 等しい: `status eq 'active'` - `ne` - 等しくない: `classification ne 'confidential'` - `gt` - より大きい: `revenue gt 1000000` - `ge` - 以上: `priority ge 2` - `lt` - より小さい: `completion lt 100` - `le` - 以下: `risk_level le 3` 2. **論理演算子** - `and` - 両方の条件が真でなければならない: `status eq 'active' and revenue gt 1000000` - `or` - いずれかの条件が真であればよい: `type eq 'commercial' or type eq 'residential'` - `not` - 条件を否定する: `not (classification eq 'confidential')` **値のフォーマット** - テキスト: シングルクォート - `'active'`、`'confidential'` - 数値: クォートなし - `1000000`、`2.5` - 日付: `datetime'2024-01-08T00:00:00Z'` - GUID: `guid'12345678-1234-1234-1234-123456789012'` **関数** - `startswith(fieldname, 'value')` - フィールドが値で始まるかチェックします - `endswith(fieldname, 'value')` - フィールドが値で終わるかチェックします - `substringof('value', fieldname)` - フィールドに値が含まれているかチェックします #### 例 **基本的なフィルター** ``` revenue gt 1000000 and status eq 'active ``` **複雑なフィルター** ``` (classification ne 'confidential' and building_type ne 'government') or 'security_level eq 'public' and revenue gt 5000000) ``` **関数の使用** ``` not (startswith(customer_name, 'Gov')) and not (substringof('classified', description)) ``` ### **ベストプラクティス** インポートで使用する前に、Dynamics 365のAPIを使用してフィルターをテストしてください シンプルな条件から始めて、徐々に複雑さを構築してください 条件を明確にグループ化するために括弧を使用してください フィールド名がDynamics 365システムのフィールド名と正確に一致していることを確認してください フィールド名は大文字と小文字を区別します テキスト値はシングルクォートで囲む必要があります 日付値は正しいUTC形式である必要があります ### Data Settings Data Settingsページは必要に応じて変更できますが、ページをスキップすることもできます。 ![](/assets/image2021-3-26_15-2-54.a276cd1e577429c636980498d360be3f14fc315570f86dede412a82ac0382d02.62ce3a79.png)![](/assets/image2021-3-26_15-3-14.190b1c9bfdd3941e6d7ff8c6c6a32e3bc320b55fd80ef338187d673865dcef94.62ce3a79.png) オプションで、以下のパラメーターを編集します: | パラメーター | 説明 | **必須** | | --- | --- | --- | | Retry Limit | 各API呼び出しの最大再試行回数。 | いいえ | | Initial retry time wait in millis | 最初の再試行の待機時間(ミリ秒単位)。 | いいえ | | Max retry wait in mills | API呼び出しを諦める前の最大待機時間。 | いいえ | | HTTP Connect Timeout | API呼び出し時に接続がタイムアウトするまでの時間。 | いいえ | | HTTP Read Timeout | リクエストにデータを書き込むのを待つ時間。 | いいえ | | Column Settings | 結果から列を削除したり、そのデータ型を定義したりできます。 列名を更新しないでください。更新すると、その列の値がnullになります。 | いいえ | 1. **Next**を選択します。 ### Data Preview インポートを実行する前に、Generate Preview を選択してデータの[プレビュー](/products/customer-data-platform/integration-hub/batch/import/previewing-your-source-data)を表示できます。Data preview はオプションであり、選択した場合はダイアログの次のページに安全にスキップできます。 1. **Next** を選択します。Data Preview ページが開きます。 2. データをプレビューする場合は、**Generate Preview** を選択します。 3. データを確認します。 ### Data Placement データの配置について、データを配置したいターゲット database と table を選択し、インポートを実行する頻度を指定します。 1. **Next** を選択します。Storage の下で、インポートされたデータを配置する新しい database を作成するか、既存の database を選択し、新しい table を作成するか、既存の table を選択します。 2. **Database** を選択 > **Select an existing** または **Create New Database** を選択します。 3. オプションで、database 名を入力します。 4. **Table** を選択 > **Select an existing** または **Create New Table** を選択します。 5. オプションで、table 名を入力します。 6. データをインポートする方法を選択します。 - **Append** (デフォルト) - データインポートの結果は table に追加されます。 table が存在しない場合は作成されます。 - **Always Replace** - 既存の table の全体の内容をクエリの結果出力で置き換えます。table が存在しない場合は、新しい table が作成されます。 - **Replace on New Data** - 新しいデータがある場合のみ、既存の table の全体の内容をクエリの結果出力で置き換えます。 7. **Timestamp-based Partition Key** 列を選択します。 デフォルトキーとは異なるパーティションキーシードを設定したい場合は、long または timestamp 列をパーティショニング時刻として指定できます。デフォルトの時刻列として、add_time フィルターで upload_time を使用します。 8. データストレージの **Timezone** を選択します。 9. **Schedule** の下で、このクエリを実行するタイミングと頻度を選択できます。 #### 一度だけ実行 1. **Off** を選択します。 2. **Scheduling Timezone** を選択します。 3. **Create & Run Now** を選択します。 #### 定期的に繰り返す 1. **On** を選択します。 2. **Schedule** を選択します。UI では、*@hourly*、*@daily*、*@monthly*、またはカスタム *cron* の 4 つのオプションが提供されます。 3. **Delay Transfer** を選択して、実行時間の遅延を追加することもできます。 4. **Scheduling Timezone** を選択します。 5. **Create & Run Now** を選択します。 転送が実行された後、**Data Workbench** > **Databases** で転送の結果を確認できます。 # Workflowを使用したMS Dynamics 365 Salesからのインポート ワークフローのtd_load>:オペレーターを使用して、MS Dynamics 365 Saleからデータをインポートできます。SOURCEを既に作成している場合は、それを実行できます 1. ソースを特定します。 2. 一意のIDを取得するには、Sourceリストを開き、MS Dynamics 365 Salesでフィルタリングします。 3. メニューを開き、**Copy Unique ID**を選択します。 ![](/assets/image2021-10-12_12-26-58.09d9b84b0f1f752c7c95b0bc1c2d8e8b7302e5b91c6a3cb5f01309dadf53a604.62ce3a79.png) 1. td_load>オペレーターを使用してワークフロータスクを定義します。 ```yaml +load: td_load>: unique_id_of_your_source database: ${td.dest_db} table: ${td.dest_table} ``` 1. ワークフローを実行します。