SalesforceのデータをSnowflakeに自動同期し、Tableauで可視化する

## 概要
Salesforce（セールスフォース）はいまや世界中で利用されているCRM（顧客関係管理）ツールであり、クラウド上で動作するためツール導入にあたって専用のサーバー構築といったコストが不要となる、いわゆるSaaSに分類されるサービスです。なかでもSalesforceはSaaSの代表的なものの一つではないでしょうか。  
Salesforceの強みの一つはこのクラウド上で動作するという点にあり、Salesforceに登録された顧客情報はクラウドを経由してリアルタイムでアカウントを持つ全社員に共有されます。またSalesforceは単なる顧客情報の管理と共有にとどまらず、その活用によりマーケティング支援や営業支援も行います。  
通例このようなSaaSサービスは保守運用をベンダーが行ってくれる代わりに実装される機能もベンダーに依存します。しかしSalesforceは標準で提供されている機能に加え、顧客のどのような情報を登録するのか、またその情報をどのように利活用していくかなど自社の事業や戦略に合わせ機能をカスタマイズできる点も魅力です。  
Salesforceには登録されたデータを分析するためにそのデータの可視化、エクスポートを行うレポート機能がある程度標準の機能として備わっています。ですが何千、何万という単位のデータをリアルタイムで分析したい場合や、Salesforce以外のサービスで集積しているデータと絡めた高度な分析を行いたい場合は別途DWH（データウェアハウス）へデータを統合、Looker・TableauといったBIツールでデータの可視化・分析を行うという流れが有効ではないでしょうか。そしてこのようなデータ統合に役立つのがETLツールと呼ばれるサービスです。なおETLツールという名称は  
E：Extract(抽出)  
T：Transform(変換)  
L：Load(格納)）  
の頭文字に由来しています。
今回は[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)（トロッコ）という分析基盤向けデータ統合サービスを使い、SalesforceのデータをSnowflakeというDWHへ統合し、TableauというBIツールを用いてデータの可視化を行います。  
なお今回データの転送手段として使用する[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)は、Salesforceの他にも、様々な広告・CRM・DBなどのデータソースに対応しています。    
[trocco®の使い方まとめ（CRM・広告・データベース他）](https://qiita.com/hiro_koba_jp/items/2b2caa040804e402bda7)
![Troccoアイコン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/57c87ba6-5bbe-f7e5-e994-7186925c5cd4.png)
## ゴール
今回はSalesforceに登録されたサンプルの顧客データをSnowflakeへ転送し、そのデータをこのようなグラフに可視化することを目標にします。  
また今回はデータベースに関する専門的な知識がない方でもデータ分析が行えるようほぼコードをかかずに分析基盤を構築し、またデータの更新を自動化します。  
![qiita_salesforce: ダッシュボード 1 - Tableau Online 2022-03-14 17-41-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/03c5a159-30c3-8973-4023-f8194aa2a95d.png)
## こんな人におすすめ
* Salesforceのデータ分析機能に不満を感じている
* Salesforceに登録したデータの件数が多すぎて分析ができない
* Salesforceのデータを自動的に可視化する環境を構築したい
## 1. trocco®での設定
### 1-0. 事前準備
今回のデータ転送に使用する[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)のアカウントが必要になります。  
[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)は現在無料のトライアルを実施しているため、事前に申し込みをしてアカウントを作成しておきましょう。  
[https://trocco.io/lp/index.html](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)  
（トライアル申込の際にこちらの記事を見たという旨を記載していただければその後のご案内がスムーズに行えます）   
またデータ元となるSalesforceのアカウントや、データの転送先となるSnowflakeのアカウント、データの可視化を行うためのTableauのアカウントなども前もってご用意ください。  
### 1-1. 転送元・転送先の決定
[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)にアクセスして、ダッシュボードから「転送設定を作成」ボタンを押します。  
![スクリーンショット 2022-03-02 13.25.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/2c0af2fa-2d2f-7fc4-9eed-ea0b869bf6e5.png)
転送元と転送先となるツールを選択する画面になります。  
![スクリーンショット 2022-03-02 13.29.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/8ff1b868-0783-ba37-23f4-4a0cf4fabd86.png)
[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)は多くのサービスと連携しています。今回は転送元に「Salesforce」、転送先には「Snowflake」をそれぞれ選択し、「この内容で作成」ボタンを押します。  
![スクリーンショット 2022-03-14 16.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/cf67b2cd-d2ae-c86f-8f6f-84acde9137dc.png)
### 2-1. Salesforceからの転送設定
まずは右上の「接続情報を追加」ボタンを押します。  
![転送設定の新規作成 | trocco 2022-03-14 17-59-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/df252ae8-8e8c-cf0a-3326-5af075c5606b.png)
別のタブでSalesforceへの接続情報を入力する画面が開きます。SalesforceアカウントのユーザーIDやパスワード、[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)がSalesforceにアクセスするために必要なセキュリティトークンを入力します。  なおセキュリティトークンの作成手順については[こちらのヘルプ](https://documents.trocco.io/docs/connection-configuration-salesforce?highlight=Salesforce)を参考にしてください。  
転送設定画面に戻り、「接続情報を読み込む」ボタンを押すと右の▽マークから入力した接続情報を読み込めます。  
※トップページの「接続情報」タブから事前に接続設定を済ませておくことも可能です。  
接続情報が読み込めたらオブジェクトを選択します。このように接続したSalesforceアカウントで取得可能なオブジェクトが一覧で表示されるためその中から選択するだけで済みます。  
![スクリーンショット 2022-03-14 16.53.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/8d2815bc-a8f5-61df-00bb-09fa19f93c31.png)
また取得するデータが文字列であるか、数値であるかといったデータ型の設定についても型推測機能の結果を使用することで簡単に済ませることが可能です。  
![スクリーンショット 2022-03-14 16.56.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/af584e9f-b78c-25c9-c3a5-9b66a3fc145f.png)
### 2-2. Snowflakeへの転送設定
転送元のSalesforceと同じく接続情報の設定をしていきます。Snowflakeについても「接続情報を追加」ボタンから別のタブで接続情報の設定画面を開きます。接続先ホスト名やアカウントのユーザー名やパスワードを入力します。  
※トップページの「接続情報」タブから事前に接続設定を済ませておくことも可能です。
![Snowflake接続情報の新規作成 | trocco 2022-03-14 17-00-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/bfe2202d-e1bb-ed2e-6dad-86ea6c7e2601.png)
Salesforceの設定と同様に接続情報を読み込み、ウェアハウス、データベース、スキーマ、テーブルの名前をそれぞれ入力します（事前にSnowflake側でこれらを作成しておく必要があります。）
![スクリーンショット 2022-03-14 17.02.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/b318d243-274b-2026-7d58-8b7ca3bc077d.png)
入力が済んだらページ最後の「次のSTEPへ」ボタンを押します。
### 2-3. データのプレビュー・詳細設定
設定にしたがって転送のレビューが作成されます。
![スクリーンショット 2022-03-14 17.06.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/be7f44b9-5e33-26a7-19c7-267c1d880a27.png)
プレビュー画面では転送元からどのようにデータが取得されるのかが確認できます。取得したいデータがプレビュー画面に表示されなければ再度転送元と転送先の設定に戻り、設定を修正します。  
今回は特に問題なく取得できていそうなのでプレビュー画面下部の「確認画面へ」ボタンを押します。  
![データプレビュー・詳細設定 | trocco 2022-03-14 17-08-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/450d9d4f-f8b0-65dd-54a8-ada1b695877a.png)
なおプレビュー画面下部の詳細設定では転送の際に特定のデータをマスキング処理する、転送時刻のカラムを追加するといったデータの加工設定ができます。  
![データプレビュー・詳細設定 | trocco 2022-03-14 17-12-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/007ac1b3-384b-4d30-081b-802bbe0b2bfb.png)
### 2-4. 確認・適用
転送設定の内容が確認できます。過去に作成した転送設定の内容を編集した際にはこの画面でその差分がハイライト表示され、確認をすることが可能です。  
今回は設定の新規作成なので、特に確認することはありません。右下の「保存して適用」ボタンを押します。  
![転送設定詳細 (Qiitaテスト) - 内容の確認 | trocco 2022-03-14 17-11-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/817c1bb6-0b8c-7b99-1745-1654c7ac18d0.png)
[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)には既存の転送設定を変更した際、変更後も過去の設定内容の履歴を保存して転送設定の変更によって転送が失敗するようになった際などにその履歴から設定を復元するロールバック機能があります。  
[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)を共有して使用し、チームでデータ分析にあたる場合などは、転送設定の変更についてこの画面で簡単なメモを残しておきましょう。  
![スクリーンショット 2022-03-07 13.56.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/06ddb76a-8c23-2cf3-7b0e-f4931ff77026.png)
### 2-5. スケジュール・通知設定
転送設定の詳細設定画面に移動します。まず「転送設定概要」タブでは設定の内容が大まかに確認できます。  
![スクリーンショット 2022-03-14 17.18.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/6269cdb6-eb0e-32d5-64d3-a76d71164ba1.png)
[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)にはデータの転送を定期的に自動で行う「スケジュール・トリガー機能」があります。今回はいちいち人の手でデータを更新しなくともグラフが最新の状態に更新されていくことが目標の一つなので、「スケジュール・トリガー設定」タブを開いて定期的な転送スケジュールの設定を行いましょう。  
「スケジュールを追加」ボタンを押すと、設定のモーダルが出てくるので、希望に応じて実行スケジュールを設定し、転送の自動化を行います。（今回は毎日０時に転送を行うよう設定しました。）
![転送設定詳細 (Qiitaテスト) - スケジュール・トリガー設定 | trocco 2022-03-14 17-22-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/c4a4059e-4fcc-e79e-4e31-c1455787d451.png)
![転送設定詳細 (Qiitaテスト) - スケジュール・トリガー設定 | trocco 2022-03-14 17-23-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/caca44bc-7884-a280-af99-fc03ea335f35.png)
### 2-7. データ転送ジョブの実行
設定は以上で終わりです。データの転送は以後自動的に行われますが、今回はこのまま右上の「実行」ボタンから手動で転送を実行します。  
![転送設定詳細 (Qiitaテスト) - スケジュール・トリガー設定 | trocco 2022-03-14 17-24-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/306aae05-d6b8-f09a-4487-4ec805a7afc4.png)
転送の実行に際し、その目的などをメモとして残しておくことができます。特に書くことがなければ再び「実行」ボタンを押します。  
![新規転送ジョブの実行 | trocco 2022-03-14 17-25-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/6f820e39-c580-e530-8e77-c3fef449b958.png)
ジョブが実行されます。  
![転送ジョブ詳細 | trocco 2022-03-14 17-26-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/eb83a582-ead8-ce4b-3941-a6d3faaf22c1.png)
しばらく待つとジョブが終了します。  
![転送ジョブ詳細 | trocco 2022-03-14 17-27-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/13aee093-b957-40eb-7200-2c391c13b7e7.png)
## 3. Snowflakeの設定
Snowflake側でなにか設定を行う必要はありません。プレビュー画面を転送結果を確認すると、たしかにデータが転送されていることが確認できます。  
![2022-03-11 3:11pm - Snowflake 2022-03-14 17-30-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/ebc284b9-6c40-0d11-0b2d-c455a0c50f78.png)
## 4. Tableauでの可視化
最後にTableauでのデータ可視化を行います。まずはトップ画面の「新規」から新しいワークブックを作成しましょう。   
![スクリーンショット 2022-03-02 14.01.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/baa3d405-c49d-063b-9fe9-f85b44f71b82.png)
自動的にデータの接続先を選ぶ画面になるので、コネクタからSnowflakeを選択します。  
（先ほど行ったようにホスト名やユーザー名、パスワードの入力が必要です。）  
![編集 | 新しいワークブック 2022-03-14 17-31-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/a8156fa8-3b9d-c565-8e79-5cee561101ef.png)
画面左側でデータを転送したウェアハウス、データセット、スキーマを選び、Tableau側で読み込んだテーブルをドラッグ＆ドロップでワークブックに追加します。
![編集 | 新しいワークブック 2022-03-14 17-35-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/4bcd51f0-6d3d-85c2-6e3e-f534bd6111ba.png)
新しいシートに移動します。
画面の左側にはSnowflakeから読み込まれたカラム名がフィールドとして表示されています。これらを行と列に配置し、グラフを作成していきます。右上の「表示設定」には予めメジャーなグラフが用意されており、これらのグラフを選択することで簡単にグラフを作成可能です。
![編集 | 新しいワークブック 2022-03-14 17-36-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/be3ad2a3-cd39-809b-3a57-4bbdca2c274c.png)
同様にしていくつかグラフを作成し、それらをダッシュボードに配置して完成です！
![qiita_salesforce: ダッシュボード 1 - Tableau Online 2022-03-14 17-41-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1071783/b50a33c0-4a98-0b83-284b-ea9fe9e981ff.png)
## まとめ
ほぼ画面上の設定のみでSalesforceのデータをSnowflakeへ統合し、Tableauで可視化＋自動化してみました。また[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)の「スケジュール・トリガー機能」の設定を行ったため、以後はSalesforceに新しく追加されたデータはそのスケジュール設定に従って自動的にSnowflakeへ転送され、また連携するTableauのダッシュボードも自動更新機能によって常に最新の状態に維持されていくという流れになっています。
今回は30件程度のごく簡単なサンプルのデータを用いた転送を行いましたが、[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)を利用し、何千、何万件、何億という件数のデータをSnowflakeへと統合することでSnowflakeの強みであるデータの高速処理が活かされてきます。
実際に弊社サービスの[trocco®](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)においても、マーケティングKPI等といった各種データはこのような流れで収集し、分析を行っております。
データ分析の際にはぜひご活用ください。
[https://trocco.io/lp/index.html](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)
実際にデータ統合を体験してみたい方は、[無料トライアル](https://trocco.io/inquiry_trial/new?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake_tableau)を実施しているので、この機会にぜひ一度お試しください。（申込時に、この記事を見たという旨を記載していただければその後のご案内がスムーズ行えます。）
その他にも広告やデータベースなど、様々な分析データをETL・転送した事例をまとめました。
[trocco®の使い方まとめ（CRM・広告・データベース他）](https://qiita.com/hiro_koba_jp/items/2b2caa040804e402bda7)