Heroku Connect経由でSalesforceにTableau接続すると色々便利そう

#Salesforce->Heroku->Tableau
Heroku Connect経由でSalesforceにTableau接続すると色々メリットがあります。
備忘録的に記載します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/94f3fd8e-2343-5952-db9c-0fdbc61a7d7c.png)

##Salesforceからのデータの取得
Salesforceからデータを取得する場合、ETLツールやデータローダー、WorkBenchなど様々なツールを使うことが多いと思います。しかしどれも基本的にはAPI経由になるので、**Salesforce側のAPI制限やガバナ制限**に引っかかることがあります。

データ取得先としてのSalesforceを考えた場合、Heroku ConnectでSalesforceをデータベース化してしまえば色々な制限が回避でき、SQLという一般的な接続ができるようになります。

## Herokuって？
[Heroku](https://jp.heroku.com/home)とはSalesforceファミリーのPaaS（Platform as a Service）環境です。いわばHardwareやOSなどは抽象化された環境で、自分のプログラムをデプロイして動作させることができます。PaaSを使うことで**環境を気にする必要がなくなり、開発者は本来のコーディングに集中することができます。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/673659dd-4105-0a62-61c0-1b09129fdff2.png)

### Heroku Connectって？
Herokuの説明だけ聞くと、「それって開発者が使うサービスでしょ？分析者には関係ないじゃん」と思われるかと思いますが、**Herokuには[Heroku Postgres](https://jp.heroku.com/postgres)と[Heroku Connect](https://jp.heroku.com/connect)というサービスがあります。**

[Heroku Connect](https://jp.heroku.com/connect)を使うと**Heroku Postgres と Salesforce とのデータの双方向同期が実現できます。**最短2分程度で同期されるため、ほぼリアルタイムのデータ同期が実現されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/a307d6ba-ec86-7e59-8e01-ecd3a17fffad.png)

**普段慣れ親しんでいるSQLを使って、Salesforceデータの取得のみならず、Salesforceへのデータインサートや更新処理も実現できるので非常に魅力的です!**


##TableauとSalesforceの接続
SalesforceのデータをTableauで可視化する場合

1. Salesforceに直接接続する
1. Salesforceのデータを取り込んだDWHに接続する

接続がメインになってくると思います。
ただ、1.Salesforceに直接接続する場合は、抽出接続しかできないためパフォーマンス面で問題が発生することがありますし、データ量が多くなってくると２番を考慮する必要が出てきます。
2.は理想的ですがSalesforceのデータをDWHに取り込むためにはETLツールを使用したバッチ処理が必要になるので、開発・運用面での負担が大きそうです。

そこで今回はHeroku Connectを使ってSalesforceのデータをTableauで可視化してみたいと思います。

##設定手順
まずはHerokuにログインできる状態にしてある前提で進めます。

###Heroku Connect Addonのインストール
[Heroku Connect Addon Install](https://elements.heroku.com/addons/herokuconnect)からHeroku Connectを使えるようにします。

###アプリケーション作成
Heroku Postgresを格納するアプリケーションを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/448d9715-0507-a384-1ca3-a3f1957debc0.png)

###PostgresとHeroku ConnectのAdd-Onを追加
Add-onsからPostgresを検索して追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/e715ec03-6abf-932c-223f-ad40a67f0345.png)

ここでPlanを選択することができます。**Hobby版なら無料です。**
[その他のプラン](https://devcenter.heroku.com/ja/articles/heroku-postgres-plans)もあるのでパフォーマンスやバックアップなど必要に応じたプランを選択することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/2f34ee02-5420-7df2-bb7c-abb1e9783034.png)

これでアプリケーションにデータベースが作成されました。

###Heroku ConnectのAdd-On追加
同様にHeroku Connectも追加してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/136442bb-0b92-9b69-1036-263362c14878.png)

２つのAdd-Onを追加しました。Heroku Connectをクリックして設定画面に映ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/5441ffa9-ec35-2d65-4291-8dcf267ce593.png)

###Salesforce組織との認証
次にHeroku ConnectをどのSalesforce組織と連携するか設定します。
Setup Connectionボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/86cd75fe-9856-860b-393f-4d938027d9f6.png)

####スキーマ設定
スキーマ名の定義をしたら「Next」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/776c8afc-41f1-4baf-57b8-48c7799a7f90.png)

###Salesforce認証設定
環境とAPIバージョンの指定後「Authorize」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/399334cf-863e-1aaa-e225-6f1e73fc78f5.png)

おなじみの認証画面です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/d9620e33-8d8a-e8b1-4144-690fae2d4f03.png)

####同期オブジェクトの設定
設定ができたので、次にどのオブジェクトを同期させるのか指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/59d37dc2-08ed-1fab-0b58-643444336b82.png)

オブジェクト一覧から対象のオブジェクトを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/c5a3ef13-2ae1-f190-867c-27776333050f.png)


同期する方向(Salesforce->Postgres or Postgres->Salesforce)や項目、同期タイミングを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/2597c627-90a1-871f-4fa0-8e88a4aa7d1d.png)


###同期設定完了
同期設定が完了するとPostgres上にテーブルが作成され、同期されている行数を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/78bb8381-587d-82bb-4343-ad7b0baec143.png)

##Tableauから接続してみる
接続設定はDatastoreから指定のPostgresのSetting画面から確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/ca178f6b-720e-f7d2-9bba-44216e7e462f.png)

###Postgresコネクタを使用して接続
今回はTableau Onlineから接続してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/63d337ce-bfdc-0257-d9db-a2369381f643.png)

###接続先のテーブルが確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/c186c376-9347-9e5d-2835-ffed88058302.png)
項目名はPostgresなので英語になってしまいますね、ここは仕方なし。。。

###Vizの作成
Binを作成してヒストグラムを作成してみました。この程度の行数であれば特にストレスなく動作します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260655/334d5afc-d6f9-b4be-e00c-23e9dd7b5389.png)

##まとめ
今回はHeroku Connectを使用してSalesforceのデータをPostgresに同期してみました。
Tableauで接続する際にも非常にスムーズだったので、Salesforceのデータをデータベース化して取得・加工するのには非常に便利そうです。

懸念事項としてはスケールアップできるとはいえベースが所詮Postgresなので大量データの扱いになった場合のパフォーマンスは不明です。ただ元データがSalesforceなのでそこまで気にする必要はないのかもしれません。

Salesforceのデータと外部のWeb履歴データなどを組み合わせて分析したい場合は別途高速なクラウドDatabaseの利用を検討する必要があると思います。