この 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 は前回のジョブデータを除外し、新しいデータのみを取得します
- このプロセスは後続の実行で繰り返されます

- 増分読み込みが有効な場合、終了時刻は空白のままにします(デフォルトでは現在時刻に設定されます)
- フィルター列(デフォルトでは
modifiedon)には、null または空の値を含めることはできません
以下は、増分読み込みが有効な場合の例です。
- 前提条件/条件
- 開始時刻 = 2021-01-01T00:03:01Z
- ジョブは毎日実行するようにスケジュール
- 1回目のジョブ現在時刻 = 2021-01-15T00:03:01Z: $filter=
modifiedon> 2021-01-01T00:03:01Z andmodifiedon<= 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:00Zandmodifiedon<= 2021-01-16T00:03:01Z, $orderby = modifiedon desc. 最初のレコード結果は modifiedon = 2021-01-16T00:03:01Z3回目のジョブ現在時刻 = 2021-01-17T00:03:01Z:$filter=modifiedon>2021-01-16T00:03:01Zandmodifiedon<= 2021-01-17T00:03:01Z, $orderby = modifiedon desc. 最初のレコード結果は modifiedon = 2021-01-17T00:00:01Z...
これらの値は、Client Credentials 認証オプションを使用して接続するために必要です。OAuth オプションを使用して認証する場合は、これらはオプションです。
Microsoft のドキュメントに従って、クライアントアプリケーションを作成し、Client ID と Client Secret を取得してください。
登録したアプリケーションに対して、最小限の権限を持つカスタムセキュリティロールを作成する必要があります。以下を参照してください。
- 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)
以下の設定でインポートすることで、利用可能なすべてのエンティティを取得できます。
- Entity Type = entity
- Filter Column = overwritetime
- Start Time = 1800-06-21T00:00:00Z

この連携は、汎用的な設定でほぼすべてのエンティティをサポートしていますが、特定の設定が必要なエンティティに気づいた場合は、サポートにお問い合わせください。
クエリを実行する前に、Treasure Data でデータ接続を作成して設定する必要があります。データ接続の一部として、連携にアクセスするための認証を提供します。
TD Console を開きます。
Integrations Hub > Catalog に移動します。
Microsoft Dynamic 365 Sales を検索して選択します。

- Create Authentication を選択します。

MS Dynamics のドメイン名を入力します。
以下のいずれかの認証方法を選択します。
OAuth を選択します。

認証するための資格情報を入力します。
オプションで、「Click here and log in to Microsoft Dynamics 365 to grant consent」を選択します。
Integrations Hub > Catalog に戻ります。
Microsoft Dynamics 365 Sales を検索して選択します。
Domain の値を入力します。
OAuth Authentication Method を選択します。
新しく作成した OAuth 接続を選択します。
OAuth 接続フィールドの定義を確認します。
認証済み接続を作成すると、自動的に Authentications に移動します。
作成した接続を検索します。
New Source を選択します。
Data Transfer フィールドで Source の名前を入力します。

- Next を選択します。
Source Table ダイアログが開きます。

以下のパラメータを編集します。
| パラメーター | 説明 | 必須 |
|---|---|---|
| Entity Type | エンティティの論理名。例: contact、sales_order、account...すべての利用可能なエンティティを取得するにはfetch Entity Typeを使用してください | はい |
| 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)
- 値(データ型に基づいて適切にフォーマットする必要があります)
演算子
比較演算子
eq- 等しい:status eq 'active'ne- 等しくない:classification ne 'confidential'gt- より大きい:revenue gt 1000000ge- 以上:priority ge 2lt- より小さい:completion lt 100le- 以下:risk_level le 3
論理演算子
and- 両方の条件が真でなければならない:status eq 'active' and revenue gt 1000000or- いずれかの条件が真であればよい: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ページは必要に応じて変更できますが、ページをスキップすることもできます。


オプションで、以下のパラメーターを編集します:
| パラメーター | 説明 | 必須 |
|---|---|---|
| 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になります。 | いいえ |
- Nextを選択します。
インポートを実行する前に、Generate Preview を選択してデータのプレビューを表示できます。Data preview はオプションであり、選択した場合はダイアログの次のページに安全にスキップできます。
- Next を選択します。Data Preview ページが開きます。
- データをプレビューする場合は、Generate Preview を選択します。
- データを確認します。
データの配置について、データを配置したいターゲット database と table を選択し、インポートを実行する頻度を指定します。
Next を選択します。Storage の下で、インポートされたデータを配置する新しい database を作成するか、既存の database を選択し、新しい table を作成するか、既存の table を選択します。
Database を選択 > Select an existing または Create New Database を選択します。
オプションで、database 名を入力します。
Table を選択 > Select an existing または Create New Table を選択します。
オプションで、table 名を入力します。
データをインポートする方法を選択します。
- Append (デフォルト) - データインポートの結果は table に追加されます。 table が存在しない場合は作成されます。
- Always Replace - 既存の table の全体の内容をクエリの結果出力で置き換えます。table が存在しない場合は、新しい table が作成されます。
- Replace on New Data - 新しいデータがある場合のみ、既存の table の全体の内容をクエリの結果出力で置き換えます。
Timestamp-based Partition Key 列を選択します。 デフォルトキーとは異なるパーティションキーシードを設定したい場合は、long または timestamp 列をパーティショニング時刻として指定できます。デフォルトの時刻列として、add_time フィルターで upload_time を使用します。
データストレージの Timezone を選択します。
Schedule の下で、このクエリを実行するタイミングと頻度を選択できます。
- Off を選択します。
- Scheduling Timezone を選択します。
- Create & Run Now を選択します。
- On を選択します。
- Schedule を選択します。UI では、@hourly、@daily、@monthly、またはカスタム cron の 4 つのオプションが提供されます。
- Delay Transfer を選択して、実行時間の遅延を追加することもできます。
- Scheduling Timezone を選択します。
- Create & Run Now を選択します。
転送が実行された後、Data Workbench > Databases で転送の結果を確認できます。
ワークフローのtd_load>:オペレーターを使用して、MS Dynamics 365 Saleからデータをインポートできます。SOURCEを既に作成している場合は、それを実行できます
ソースを特定します。
一意のIDを取得するには、Sourceリストを開き、MS Dynamics 365 Salesでフィルタリングします。
メニューを開き、Copy Unique IDを選択します。

- td_load>オペレーターを使用してワークフロータスクを定義します。
+load:
td_load>: unique_id_of_your_source
database: ${td.dest_db}
table: ${td.dest_table}- ワークフローを実行します。