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


## 概要
売上データを分析する際、Salseforceに蓄積された顧客情報・商談状況などを他のデータと紐付けて分析することが非常に重要です。
しかし、それらのデータを分析基盤に統合する作業に苦戦することも多いでしょう。
そこで今回は、[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake)という分析基盤向けデータ統合サービスを使い、Salesforceデータの抽出自動化＋DWH(データウェアハウス)への統合＋可視化までやってみようと思います。

今回、データの転送手段として採用した[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake)は、Salesforceの他にも、様々な広告・CRM・DBなどのデータソースにも対応しています。
[troccoの使い方まとめ（CRM・広告・データベース他）](https://qiita.com/hiro_koba_jp/items/2b2caa040804e402bda7)
![イメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/d79141e1-1e88-2832-03b9-bc5e3a5fcb32.png)




## ゴール

Salesforceのデータを下のようにSnowflakeに統合し

![snowflakeプレビュー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/f978b298-e7da-6cfa-e39d-99fe731c7439.png)

Lookerで可視化します(作成後は自動で最新値に更新することも可能です）
![データ完成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/3b6a9fd4-f3e9-97a0-bc69-005922a93bf5.png)

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


## 1. troccoでSalesforce→Snowflakeの転送自動化
### 1-0. 事前準備
データの転送のためには[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake)のアカウント・Salesforceのアカウントが必要です。
無料トライアルを実施しているので、事前に申し込み・登録しておいてください！
[https://trocco.io/lp/index.html](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake)
（申込の際に、この記事を見た旨を記載して頂ければご案内がスムーズに行えます）
### 1-1. 転送元・転送先を決定
[trocco](https://trocco.io/lp/index.html?utm_medium=social&utm_source=qiita&utm_campaign=salesforce_to_snowflake)にアクセスして、ダッシュボードから「転送設定を作成」のボタンを押します。
![ダッシュボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/9da76a65-4f0e-1a7b-98f1-c435752ff2b3.png)

転送元に「Salesforce」を指定し、転送先に「Snowflake」を選択して転送設定作成ボタンを押します。
![新規転送設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/c17f5ba7-0b22-b48c-ede5-96f2a0ad02c5.png)



すると、設定画面になるので、必要な情報を入力していきます。
### 1-2. Salesforceとの連携設定
あとで見たときに自分で分かるように転送設定の名前とメモを入力します。
![概要設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/42e75061-1f07-5067-abbc-6c7607a7b316.png)

次に「転送元の設定」内の「接続情報を追加」ボタンを押します。
![転送設定作成___接続設定を追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697569/2241b088-3e20-2a13-f145-22a57a873b4b.png)


別タブで接続情報の新規作成画面が開きますので、必要事項を記入して保存ボタンを押します。
![salesforce設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/a11de80e-e022-2359-8f35-0122d7a22b03.png)



再度転送設定画面に戻り、接続情報の「再読込」ボタンを押すと、先ほど作成した接続情報が選択できるようになります。
![qiitaサンプル追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/27c8f83b-d2bb-8764-3592-8ee1568e0ad4.png)

これでSalesforceとの連携は完了です。

### 1-3. Salesforceからのデータ抽出設定
次に、どのようなデータを取得するかを設定していきます。
ここでは商談（`Oppotunity`）に関するデータを取得してみます。
オブジェクトで`Oppotunity`を指定し、グラフを作成するために必要なデータ項目をクエリで指定します。

<dl>
  <dt>オブジェクト</dt>
  <dd>レポートデータが格納されているオブジェクト名を指定してください。</dd>
  <br/>
  <dt>クエリ</dt>
  <dd>SOQL（Salesforce Object Query Language）を指定してください。<br/>
SOQLは<a href=https://docs.trocco.io/s/article/開発者コンソールからSOQLを作成する方法>開発者コンソール</a>の<a href=https://docs.trocco.io/s/article/開発者コンソールからSOQLを作成する方法>クエリエディタ</a>から作成できます。<br/>
※ SOQLの構文については<a href=https://developer.salesforce.com/docs/atlas.ja-jp.220.0.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_sosl_intro.htm>こちら</a>を参照してください。</dd>
</dl>


![salesforce設定完了.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/ef143b13-e725-c6bd-b2aa-dae0f64ab3d7.png)



### 1-4. 転送先Snowflakeの設定
転送元と同様に設定していきます。Snowflakeの接続情報を作成していきます。
転送先となるSnowflakeの接続先ホスト、ユーザー名、及びパスワードが必要になります。

![snowflake追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/1fa11954-2168-7e2d-879c-042a36d080d9.png)

先ほど作成した接続情報を選択し、転送先とするウェアハウス、データベース名、スキーマ名を設定します。
転送モードに関しては`replace`を選択します。各転送モードの詳細は[こちら](https://docs.trocco.io/s/article/転送先-Snowflake)の「転送モードについて」をご確認ください。

![転送先snowflake.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/d45fd6f7-b2fb-dfa9-1cde-45e4501e299d.png)

これで入力は完了です。「保存して自動データ設定・プレビューへ」をクリックし、確認作業に進みましょう。

### 1-5. データのプレビュー
少し待つと、転送元のデータがプレビューされます。ここではSalesforceから取り込んだデータが表示されています。
![スキーマプレビュー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/8886477d-530f-d38a-4d88-c6b82e2ee2a9.png)

転送したいデータが取れているので、このまま「スケジュール・通知設定」に進みます。

### 1-6. スケジュール・通知設定
「スケジュール・トリガー設定」タブを開きます。
![スケジュールトリガー設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/e31a9990-ba0c-eeb9-afc6-452171e167df.png)

「スケジュールを追加」ボタンを押すと、以下の画像のような入力欄が出てきます。ここで実行スケジュールを設定することで、転送を定期的に実行し自動化することが出来ます。
![スケジュールの保存.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/fd4d4643-1e34-ad1f-b095-9bf6eb8df36a.png)


### 1-7. データ転送ジョブの実行
設定は以上です。最後に、手動で転送ジョブを実行し、Snowflakeにデータを送ります。
手動で実行する場合はジョブ詳細画面の「実行」ボタンを押します。
![実行する.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/995bab23-7fc6-9d60-213a-0702757a299b.png)


これで転送は完了です！

## 2. Snowflakeの設定
特に設定することありません。データが転送されているので、今すぐに分析・可視化を行うことが出来ます。
データがきちんと送られているかは「データをプレビュー」押すことで確認してみます。
![snowflakeプレビュー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/dba8ffd5-7bfe-886d-f4de-9ca3cac8c0d1.png)

転送されていることが確認できました！
## 3. Lookerで可視化
それでは、これらのデータをLookerで可視化していきます。  
まずはSnowflakeとLookerを接続の設定を行います。
管理タブを開いて「データベース」の「接続」を開きます。
![接続選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/7fab6490-acee-6690-a728-d3742491d9f3.png)


接続しているデータベース一覧が表示されています。ここで「Add Connection」→「Database Connection」から接続するデータベース情報を入力します。
![addconnection.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/0fb758d6-073d-48db-47a7-28ba6b6fe234.png)
![connections.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/c6c9bfc6-44be-5b60-f94c-414b9908b6f5.png)

Snowflakeのデータベースに接続できたら、次はデータを可視化するために必要なLookMLプロジェクトを作成していきます。 開発タブを開いて「LookMLプロジェクトの管理」に移動します。 

![プロジェクトの管理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/4a6bf16b-e4e2-5b4a-401f-4b7ba6c7f9ab.png)

「New LookML Project」からLookMLプロジェクトを作成します。 
![newlookerml.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/04bb62b5-3bbc-b6b3-4508-96a35ee93f53.png)

![newproject.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/50c1aefb-aec3-e843-6671-574fab44f12e.png)


「Create Project」を押したら、エディタでmodelとviewを定義します。 後々必要になるので、modelの中ではexploreを設定しておきましょう。 (書き方が分からない場合はLookerの[公式ドキュメント](https://docs.looker.com/ja/data-modeling/getting-started/model-development)を参照してください)
![model.views.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/b54a800f-72a4-45c6-d397-98dcc3e630a9.png)
![test.views.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/df31afcc-ed7d-5425-3a4f-97e0f11df3d8.png)



これで下準備が整いました。 トップページに戻って「New」からDashboardを作成します。 
![newdash.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/9bf025e6-72f2-b47d-0614-fd1256d87c20.png)

白紙のダッシュボードが作成されるので「Qiita_Salesforce_ダッシュボード」と名前をつけます。
そして「Dashborardの編集」→「タイルの追加」を選択し、先ほどのmodel内で定義したExploreを選択します。

![explorer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/e6f72edd-e85c-4548-6e67-eb4bd49a8f97.png)


ディメンションとメジャーを設定し、Tileに表示したいデータをプロットします。今回は各項目における期待利益について分析したいとき、ディメンションに「Name」とメジャーに「Expected Revenue」を選択します。

![各項目における期待利益.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/0bd167fc-c055-d31b-a187-cd0a2b6be6db.png)


ダッシュボードに表示します。
![データ完成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121252/5dab3054-9868-0ab3-5a0d-6b1e859c5949.png)

完成しました！


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

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

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