Tableau CRM (Einstein Analytics)のCSVエクスポート機能を試してみた

##Einstein Analytics が Tableau CRM に！
SalesforceのBI/AIツールであるEinstein AnalyticsがTableau CRMにリブランディングされました。
これからはTableauとTableau CRMの間でいろいろな機能統合が期待出来ますね！
特にEinstein Analyticsが持っているAI機能や高速なデータベースをTableauから利用できるようになってくると楽しみですね！

## Tableau CRMのデータエクスポート機能
Salesforceは年に3回新機能をリリースしていますが、Spring21（2021年2月）のリリースでTableau CRMのエクスポート機能が強化されています。

+ [Sync Out を使用した Snowflake の Salesforce データの最新の状態の維持 (正式リリース)](https://help.salesforce.com/articleView?id=release-notes.rn_bi_integrate_snowflake_sync_out.htm&type=5&release=230)
+ [データプレップ出力ノードを使用した .csv へのデータセットのエクスポート](https://help.salesforce.com/articleView?id=release-notes.rn_bi_integrate_output_csv.htm&type=5&release=230)
+ [Salesforce 出力コネクタを使用した Salesforce への準備した Tableau CRM データのマージ (ベータ)](https://help.salesforce.com/articleView?id=release-notes.rn_bi_integrate_salesforce_output_beta.htm&type=5&release=230)
+ [追加の分析のための Tableau Online への Tableau CRM データのエクスポート (ベータ)](https://help.salesforce.com/articleView?id=release-notes.rn_bi_integrate_tableau_output_beta.htm&type=5&release=230)


今までデータをエクスポートするためにはクエリの「共有」機能からしか出来なかったので、システム化しづらかったのですが、今回からCSVファイルなどでもエクスポートできるようになっているので、今回はCSVファイルでのエクスポートを試してみました。

※現時点で試しているのは検証環境ですので、GUIや動作などリリース時と比較すると変更される可能性があります。
## CSVエクスポート
レシピに「出力」オペレータがあり、こちらで加工したデータをデータセットなどにすることが出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/ffa96dca-27be-1f97-3074-8de5426031c9.png)

この出力先として「データセット」以外にも登録済みの「出力接続」（SnowflakeやTableau Onlineもこちら）や「CSV」が選択出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/1947ffed-49db-3de8-a987-0e68b7b9a829.png)

このようにシンプルなレシピを使ってCSVファイルへEinstein Discoveryの予測結果を出力してみます。
ちなみに出力オペレータは非常にシンプルで設定項目としてはユーザーやCSVパーティーション設定（出力ファイルのサイズをどれくらいで区切るか？）くらいしか無いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/01a1c0e6-5261-fd05-ed26-2c7638578616.png)

### 出力ファイルは何処にある？
レシピで作成されたファイルですが、データはsObjectにエクスポートされ、48時間保存されます。
その前にデータを取得する必要があります。
データセットが32MBを超える場合、データセットはいくつかのパートに分割されるため、すべてのデータを取得するにはすべてのパートを取得する必要があります。

####オブジェクト構成
構成というほどでも無いですが、エクスポートされたデータはDatasetExportオブジェクトから検索出来ます。
また、データの構成ファイル情報はDatasetExportPartオブジェクトにあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/65d71eb3-7821-fa0c-ff1a-30dd78c2f81a.png)

ですので、エクスポート情報をDatasetExportから検索し、そのIDを元にDatasetExportPartを取得する流れになります。

### APIで使用するIDを調べる
APIを使用するので[Workbench](https://workbench.developerforce.com/)を使って行きましょう。
まずはDatasetExportのIDを知りたいです。

#### DatasetExport
SOQL Queryを使って
```SELECT CreatedDate,Id,PublisherInfo,Status FROM DatasetExport ORDER BY CreatedDate DESC NULLS FIRST
```
の用に実行するとDatasetExport.IDを取得できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/f4249949-7d43-0ae1-5766-a08620a296ad.png)

#### DatasetExportPart
この取得したId "0PxB0000000L0YkKAK"に対応するファイルをDatasetExportPartから検索します。
```SELECT Id,CreatedDate,DataFile,PartNumber FROM DatasetExportPart WHERE DatasetExportId = '0PxB0000000L0YkKAK' ORDER BY CreatedDate DESC NULLS FIRST```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/560e0cd4-2b2f-5126-075d-debfcb8a9adc.png)

この得られたID（0PyB0000000L0prKAC）をAPIで指定して実行出来ます。

### APIの実行
Workbenchの「Utility」→「Rest Explorer」からAPIを実行出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/d868f666-4210-f846-2465-5328b8e1f6b2.png)

GETでAPIバージョンのあとに
```/sobjects/DatasetExportPart/[DatasetExportPartID]/DataFile```
をつけて実行します。

#### 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/be19d734-3ec0-bcf6-a6ae-8bc711ea7e5c.png)

※Exportに対してファイルが複数存在する場合は同様の処理を繰り返してください。

#### データフローでの実行方法
ちなみに今回レシピでCSVエクスポートが追加になりましたが、この機能自体はデータフローで以前から利用可能でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/c156b09f-3db5-2cf8-f196-aeadc565aa2e.png)
Exportオペレータを使うことにより可能だったのですが、なぜか対象が「Einstein Discovery」になっていたので分かりづらいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/ac0e749e-2890-1e95-870a-96d9753986bc.png)

使い方はほぼ同じですが、データフローからの出力だとヘッダーがAPI名になるという仕様になっているようです。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/0171615d-e60d-6669-861e-21a59053ff6c.png)

この辺は用途によって使い分けて行きたいですね。
###まとめ
いかがだったでしょうか？ちょっとAPIが絡むので直感的ではないかもしれないですが、Discoveryの予測結果を付与するなど、Tableau CRMのデータをシステム的にエクスポートすることができるというのは大きなベネフィットがあると思います。今後はTableauを含め、より外部連携の進化に期待します！