SalesforceのデータをRedshiftにETL(転送)してLookerで可視化する方法

## 概要
Salesforceを利用している方は、日々蓄積されていくデータを元に、今後の営業戦略を立てたり、営業実績をまとめてレポーティングする機会も多いのではないでしょうか。
自分で分析する際や他者に今までの実績を説明する際には、グラフなどひと目見てわかる資料が効果的です。
しかし、新しくデータが増える度にデータをダウンロードして最新の状態にし、グラフを作り直すのは手間がかかる作業です。
そこで今回は、[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_redshift)という分析基盤向けデータ統合サービスを使い、Salesforceデータの抽出自動化＋DWH(分析用データベース)への統合＋可視化までやってみようと思います。

今回、データの転送手段として採用した[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_redshift)は、Salesforceの他にも、様々な広告・CRM・DBなどのデータソースにも対応しています。
[troccoの使い方まとめ（CRM・広告・データベース他）](https://qiita.com/hiro_koba_jp/items/2b2caa040804e402bda7)
![salesforce→redshift.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/089b1dad-00ac-ba1b-8c62-7be39021277b.png)


## ゴール
↓画像のようにグラフをまとめたものを30分くらいで作り上げます（作成後は自動で最新値に更新することも可能です）
![ラスト-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/f425ec0f-048b-629a-8afd-5a9734c28fe1.png)

## こんな人におすすめ
* Salesforceのダッシュボード・レポート機能では限界を感じている方
* Salesforceを利用中で、分析基盤やDWH(データウェアハウス)へのデータ統合・ETLを考えている方
* LookerやRedshiftでSalesforceのデータを分析したい方

## 1. DWHと同期する手段の選定
### 1-1. DWHの選定
まずはデータを集約する場所である、DWH（データウェアハウス）を選定します。

* Amazon Redshift
* Google BigQuery
* MySQLやPostgreSQL

今回はAmazon Redshiftを利用することにします。

### 1-2. SalesforceのデータをAmazon Redshiftに転送する4つの方法
Amazon Redshiftにデータを集約することが決まったので、続いては転送するための手段を検討します。
**1.** Salesforceのデータを管理画面からダウンロードし、手動でAmazon Redshiftにアップロードする
**2.** SalesforceとAmazon Redshiftの各APIを用いて、プログラムを書いて連携する
**3.** Embulkを利用し、自分で環境を構築する
**4.** [trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_redshift)を利用し、画面上で設定する

**1**は単発の実行であれば問題はありませんが、定期的な取り込みを行うことを考えると毎回同じ作業を繰り返すことになり、手間と時間が取られます。
**2**は連携を始める前にAPIのキャッチアップ+プログラムを書く+環境構築の時間がかかり、エラー対応などの運用工数も継続的に発生します。
**3**も**2**と同じくEmbulkはある程度の専門知識が必要になり、自分で環境構築・運用を行うため、手間が発生します。加えてエラーの内容が少し専門的なためエラーの解消に時間が取られる可能性があります。
そこで今回はEmbulkの課題も解決し、プログラムを書かずに画面上の設定のみで作業が完結する、**4**の[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_redshift)というSaaSを利用します。

## 2. troccoでSalesforce→Redshiftの転送自動化
### 2-0. 事前準備
データの転送のためには[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_redshift)のアカウント・Salesforceのアカウントが必要です。
無料トライアルを実施しているので、事前に申し込み・登録しておいてください！
[https://trocco.io/lp/index.html](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_redshift)
（申込の際に、この記事を見た旨を記載して頂ければご案内がスムーズに行えます）
### 2-1. 転送元・転送先を決定
[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_redshift)にアクセスして、ダッシュボードから「転送設定を作成」のボタンを押します。
<img width="1792" alt="qiita_20200827_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/098f74e5-a834-6b9f-0ea2-2b9c592a6169.png">
転送元に「Salesforce」を指定し、転送先に「Redshift」を選択して転送設定作成ボタンを押します。
![転送設定作成___sf→redshift.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/26a08bd6-f854-a8be-d55e-100c0d0d1fd6.png)


すると、設定画面になるので、必要な情報を入力していきます。
### 2-2. Salesforceとの連携設定
あとで見たときに自分で分かるように転送設定の名前とメモを入力します。
![転送設定編集___名前とメモ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/72aadc87-278a-1691-47b5-bddd8ce24afa.png)
次に「転送元の設定」内の「接続情報を追加」ボタンを押します。
![転送設定作成___接続設定を追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/2241b088-3e20-2a13-f145-22a57a873b4b.png)


別タブで接続情報の新規作成画面が開きますので、必要事項を記入して保存ボタンを押します。
![接続設定を登録.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/0355adbf-2621-5efa-af8a-4825d084e7f7.png)

再度転送設定画面に戻り、接続情報の「再読込」ボタンを押すと、先ほど作成した接続情報が選択できるようになります。
![転送設定編集___接続設定選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/f7b796ad-44f0-69cd-ff6d-8d8c558e7b92.png)
これでSalesforceとの連携は完了です。

### 2-3. Salesforceからのデータ抽出設定
次に、どのようなデータを取得するかを設定していきます。
ここでは商談（Oppotunity）に関するデータを取得してみます。
オブジェクトで「Oppotunity」を指定し、グラフを作成するために必要なデータ項目をクエリで指定します。
![転送設定_salesforce.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/99184ec8-10e8-4832-2189-e1099a6119f1.png)


### 2-4. 転送先Redshiftの設定
転送元と同様に設定していきます。
転送先とするデータベース名、スキーマ、テーブルを設定します。
また、一時的にデータを保存するS3バケットとプレフィックスを指定してください。
最後に転送モードを選択します。insertとすることでテーブルにデータを追加することができます。
![転送設定＿redshift.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/5fff0ef8-1149-c143-aad0-3f6e2f485387.png)
これで入力は完了です。「保存して自動データ設定・プレビューへ」をクリックし、確認作業に進みましょう。

### 2-5. データのプレビュー
少し待つと、転送元のデータがプレビューされます。ここではSalesforceから取り込んだデータが表示されています。
![プレビュー画面-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/a395c44b-32b4-f6d5-59ce-cac4aad68980.png)
転送したいデータが取れているので、このまま「スケジュール・通知設定」に進みます。

### 2-6. スケジュール・通知設定
「スケジュール・トリガー設定」タブを開きます。
![転送設定___スケジュールトリガー設定ボタン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/806bbcd8-1cc6-0b5d-ec8c-d23e7319090b.png)
「スケジュールを追加」ボタンを押すと、以下の画像のような入力欄が出てきます。ここで実行スケジュールを設定することで、転送を定期的に実行し自動化することが出来ます。
![転送設定詳細_スケジュール登録.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/73349fcc-e05d-9ff4-2fca-d66be00fc6f0.png)

### 2-7. データ転送ジョブの実行
設定は以上です。最後に、手動で転送ジョブを実行し、Redshiftにデータを送ります。
手動で実行する場合はジョブ詳細画面の「実行」ボタンを押します。
![転送設定___ジョブ実行直前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/183d6de9-2ee2-b68e-b574-ebab2995147c.png)
これで転送は完了です！

## 3. Redshiftの設定
特に設定することありません。データが転送されているので、今すぐに分析・可視化を行うことが出来ます。
データがきちんと送られているかをプレビューで確認してみます。
![Redshift_preview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/a3cc556a-9e89-d225-adb9-3c786d14b82a.png)
転送されていることが確認できました！
## 4. Lookerで可視化
それでは、これらのデータをLookerで可視化していきます。  
まずはRedshiftとLookerを接続の設定を行います。
管理タブを開いて「Database」の「Connections」を開きます。
![貼り付けた画像_2020_11_02_16_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/1c49b7cb-6134-5b40-b443-6c6eb80301a4.png)

接続しているデータベース一覧が表示されています。ここで「Add Connection」→「Database Connection」から接続するデータベース情報を入力します。
![貼り付けた画像_2020_11_02_16_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/758e541a-32d6-3c71-1f25-39a8083f46bb.png)

![貼り付けた画像_2020_11_02_16_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/820f9990-216b-52d5-b436-51de296832f4.png)

Redshiftのデータベースに接続できたら、次はデータを可視化するために必要なLookMLプロジェクトを作成していきます。

開発タブを開いて「LookMLプロジェクトの管理」に移動します。
![貼り付けた画像_2020_11_02_16_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/53220d80-d1c7-34a2-64d3-6a503c9e0726.png)

「New LookML Project」から新しいLookMLプロジェクトを作成します。
![貼り付けた画像_2020_11_02_15_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/0c186535-04b5-4578-aa37-148ae49f3a7d.png)
![New_Project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/3b5a2818-c619-1e23-9bb6-2e596e713eeb.png)


「Create Project」を押したら、エディタでmodelとviewを定義します。
後々必要になるので、modelの中ではexploreを設定しておきましょう。
(書き方が分からない場合はLookerの[公式ドキュメント](https://docs.looker.com/ja/data-modeling/getting-started/model-development#adding_a_new_view_from_an_existing_database_table)を参照してください)
![qiita_salesforce_model_–_qiita_salesforce.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/1d8208d7-9a7c-eedf-e364-78680eb3bdf9.png)
![salesforce_oppotunity_report_view_–_qiita_salesforce-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/42a4dfdd-170f-ae6f-8f96-9df51b924516.png)


これでグラフを作る準備が整いました。
トップページに戻って「New」からDashboardを作成します。
![貼り付けた画像_2020_11_02_16_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673168/cf8f2f71-b374-ba31-0d65-7cad45ce2068.png)

白紙のダッシュボードができました。ここに各種グラフを追加していきます。「新しいTILE」を押します。
![Qiita_Salesforce_空.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/8f12a0a8-0003-ff9c-46c0-1108acab76ff.png)


先ほどのmodel内で定義したExploreを選択します。
![Qiita_Salesforce_exploreの選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/bff86f12-530f-4b77-2696-630871158d48.png)



DIMENSIONSにグラフの横軸に表示したいデータ、MEASURESにグラフの縦軸に表示したいデータを設定し、Tileに表示したいデータをプロットします。ここでは日毎の契約数をまとめてみます。
![加工後-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/2401c14c-702a-df42-9f1b-7ae3d6bb47f1.png)

これで一つTileが完成しました。この調子で他のTileも作成すると、今回のゴールであるSalesforceのデータダッシュボードが出来上がります。
![全画面_2020_11_28_3_12-2-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/c9eed3cb-9c4d-bc0f-aa28-65325f47db96.png)
![ラスト-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/15a2cbc6-4021-5ffa-8542-5ec4b85d3964.png)


## まとめ
いかがでしたでしょうか。[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_redshift)を使うとSalesforceの管理画面を触ることなく、簡単にデータを取得し、DWH(Redshift)に貯めることが出来ます。
Redshiftにデータを貯めると、Lookerと連携することでデータを使ってグラフを作り、可視化できます。
実際に弊社サービスの[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_redshift)においても、マーケティングKPI等をこのような流れで収集・分析しています。
ぜひ広告データ分析の際にはご活用ください。
[https://trocco.io/lp/index.html](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_redshift)

実際に試してみたい場合は、[無料トライアル](https://trocco.io/inquiry_trial/new?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_redshift)を実施しているので、この機会にぜひ一度お試しください。（申込時に、この記事を見た旨を記載して頂ければスムーズにご案内することができます）

その他にも広告やデータベースなど、様々な分析データをETL・転送した事例をまとめました。
[troccoの使い方まとめ（CRM・広告・データベース他）](https://qiita.com/hiro_koba_jp/items/2b2caa040804e402bda7)