DatasetUtilsを使ってTableau CRMのデータセットをCSVから同期する方法


今回はバッチでTableau CRMのデータセットを操作できるツールをご紹介します!

##Tableau CRM
SalesforceのBI/AIツールである、Tableau CRMはそれ自体が高速なデータベースを持っており、
その上で動作するBIと誰でも使えるAIがあります。

それだけでなく様々なWebサービスへのコネクタや、Prepやデータフローといったデータを加工するツールも付いているので、分析に必要な環境がクラウド上に一通り揃う便利ツールです。

### Tableau CRMの不満点
ただ、自分が最初Tableau　CRMを使っていてすごく不便に感じたのが
__「オンプレデータとの自動連携方法がない」__点でした。
ローカルDBからCSVファイルにExportしてきて、それをTableau　CRMに入れようとすると、手動でのアップデートが必要となり、バッチでの自動連携ができないんですよね。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/6fcc1527-c9e9-12df-8010-af15bb36e3be.png)

###オンプレデータとの連携のために

オンプレミスデータとの連携のためには下記選択がよく選ばれます。

- ETLツールを使う
- 外部データAPIを使う

ETLツールに関してはDataSpider　CloudやTalendなどを使って自動化することができます。
今回は外部データAPIに関して掘り下げてみたいと思います。

## 外部データAPIって？
[Analytics 外部データ API 開発者ガイド](https://developer.salesforce.com/docs/atlas.ja-jp.bi_dev_guide_ext_data.meta/bi_dev_guide_ext_data/bi_ext_data_overview.htm)

こちらの開発者ガイドでは外部データAPIを使う上での制限やサンプルコードなどを入手できます。
__外部データAPIを使うことでTableau　CRMのデータセットをAPI経由で作成、更新、追加、削除などデータセットの操作を自動化することが可能__です。

ただ、こちらはAPIですので、当然ながらAPIをコールする処理を記載する必要があります。
認証含め、それなりのコード量になります。

## DatasetUtils
今回ご紹介するのは、コーディングをすることなく、バッチ処理化する方法です。
[DatasetUtils](https://github.com/forcedotcom/Analytics-Cloud-Dataset-Utils)というツールを使用します。

__DatasetUtilsは外部データAPIをコーディングすることなく使用できる実行可能なプログラム__で、
環境もJavaを使えればOKなので、敷居がすごく低いのがメリットです。

ただし、__Salesforceオフィシャルなツールではないので未サポートです。__
ご利用はご自分の責任範囲でお願いします。

>DatasetUtilsは、Einstein Analytics External Data APIのリファレンス実装です。このツールは無料で使用できますが、Salesforceの公式サポートは受けられません。これはコミュニティプロジェクトであり、正式なテストや文書化は行われていません。本アプリケーションをご利用の際は、Salesforceへのサポート依頼はご遠慮ください

###入手とダウンロード
[DatasetUtils](https://github.com/forcedotcom/Analytics-Cloud-Dataset-Utils)のDownloading DatasetUtilsの[relases](https://github.com/forcedotcom/Analytics-Cloud-Dataset-Utils/releases)をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/f9c9380a-76f9-a984-fef0-65da332c8197.png)

DatasetUtilsのバージョンとダウンロードできる一覧が表示されます。
今回はMacOS上でGuiモードとコマンドモードを試してみたいと思いますので下記の２つをダウンロードしました。

- DatasetUtils.dmg
- datasetutils-48.1.0.jar

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/fc4381c2-5204-fa56-0bd0-34d14300c1ef.png)

####Javaのバージョン確認
実行に際して対応するJavaのバージョンを確認してください。
もし対応していない場合は、新しいバージョンをインストールして使えるようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/6be7e08a-63af-2641-1f43-31c3ea1b9e9a.png)

###DatasetUtils Guiモードでの実行
DatasetUtils.dmgを使ってアプリケーションを実行することができます。
DatasetUtils.dmgをダブルクリックして、DatasetUtils.appをアプリケーションに入れておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/1c1570d2-2378-435d-78f4-41ad7a22654b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/8fff856e-2e31-790f-e56e-5fca6d6a7359.png)

####DatasetUtils.appの実行
実行するとブラウザ上からアプリケーションが立ち上がりますので認証情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/24a99dd1-b6ab-f28c-c4cd-12af16be3531.png)

####データセット一覧
ログイン後データセットの一覧が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/91c0569d-019b-2f1a-1d1d-819d47ef9983.png)

それぞれのデータセット名をクリックするとSAQLを実行できたりCSVファイルダウンロード！出来たりします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/7785452b-57e3-c243-5e13-c5fa2d698904.png)

####File　Upload
今回は手元のCSVファイルをアップロードしてみたいと思います。
「File Upload」を選択して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/6e717736-b7a7-0865-2e31-e04a1e469d0d.png)

データセット名や保存するアプリケーション名、オペレーション（Overwrite,Append,Upsert,Delete)、CSVファイル名を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/4dd013f7-1e7a-1056-939d-8e6f473a4e0b.png)

これでUpload CSVをクリックすると処理が走り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/44c83598-77a8-a75b-0961-46dbf5da9696.png)

データセットが作成されたことが確認できたのでAnalytics Studioから確認してみました。問題なく実行されたようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/2ab4ea73-ebe2-1bdf-084c-dc283adff2d8.png)

GUIモードでの実行ですが、基本的にはAnalytics Studioでできることと同じです。ただ、こちらは外部データAPIを元に作成されているアプリケーションですので、外部データAPIを使うとどのような事が出来るのか、おおよそ理解出来るかと思います。

###コマンドモード
次は本筋のコマンドモードでの実行です。
ダウンロードしたdatasetutils-xx.x.x.jarをご準備ください。

ターミナルを開いて以下のコマンドで実行可能です。
> java -jar datasetutil-<version>.jar --action <action> --u user@domain.com --dataset datasetnama --app appname --inputFile inputFilename --endpoint endPointname

###パラメータの設定
action:"load"、"downloadxmd"、"uploadxmd"、"detectEncoding"、"downloadErrorFile"のいずれか

- load: CSVロード
- downloadxmd: XMDファイルのダウンロード
- uploadxmd: user.xmd.jsonのアップロード
- detectEncoding:Inputファイルのエンコーディング検出
- downloadErrorFile: CSVアップロード時のエラーファイルのダウンロード

--u : SalesforceのログインユーザーID
--p : (オプション) Salesforceのパスワード、省略時はプロンプト入力
--token : (オプション) Salesforceのトークン
--endpoint: (オプション)Salesforceのsoap api エンドポイント (test/prod) デフォルトは: https://login.salesforce.com
--dataset : (オプション) データセットAPI名、アクションがLoadの時は必須
--datasetLabel : (オプション) データセット表示名
--app : (オプション) データセットを作成するアプリケーション名
--operation : (オプション) Load時のオペレーション (Overwrite/Upsert/Append/Delete) デフォルトはOverwrite
--inputFile : (オプション) インプットCSVファイル、Load時は必須
--rootObject: (オプション) 抽出のルートSObject
--rowLimit: (オプション) 抽出時の行制限, -1=all, default=1000
--sessionId : (オプション) SalesforceのsessionId
--fileEncoding : (オプション) インプットファイルのエンコーディング、規定はUTF-8

###実行コマンドサンプル
Production領域にファイルをアップロードする
java -jar datasetutils-48.1.0.jar --action load --u pgupta@force.com --p @#@#@# --inputFile Opportunity.csv --dataset puntest

データセットにファイルを追加する。
java -jar datasetutils-48.1.0.jar --action load --operation append --u pgupta@force.com --p @#@#@# --inputFile Opportunity.csv --dataset puntest

Sandboxにデータをロードする
java -jar datasetutils-48.1.0.jar --action load --u pgupta@force.com --p @#@#@# --inputFile Opportunity.csv --dataset puntest --endpoint https://test.salesforce.com/services/Soap/u/48.0

####実行後の確認
コマンドプロンプトからメッセージが表示され、無事に実行完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/b8c90d5d-c549-d03f-7eee-e5c5dee27df3.png)

Analytics　Studioからもデータセットを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/e3ada212-b475-2617-6661-6420726b1e83.png)

##まとめ
今回はCSVファイルをTableau CRMに自動連携できるツールをご紹介しました。
DatasetUtilsを使用する事でコネクタがないデータソースもどんどん連携できます！
データセットにしてしまえば、あとはTCRM上で加工、分析ができますので、こちらのツールを使ってデータの利活用、データを利用した意思決定を行える組織作りを目指してみてください！