Salesforce導入時の重要課題の一つが、他システムとの連携設計です。この設計判断はシステム全体のアーキテクチャに大きな影響を与えます。特に、経営判断に必要な情報をタイムリーに提供するためのデータ分析基盤の構築は、極めて重要な要素となります。
本稿では、SnowflakeとTableauを活用した高度な分析基盤のSalesforce統合について、実践的な知見を解説します。具体的には、以下のダッシュボード構成を通じて、Salesforce単独では算出困難な利益・利益率の情報を、Salesforce画面上でシームレスに表示する方法を詳述します。
Salesforceの画面からシステム外のデータも含めた「利益・利益率」を閲覧したい。
現状のシステム構成
多くの企業において、業務データは複数のシステムに分散して保管されています。弊社の事例(過去の記事でも紹介)では、以下のようなシステム構成を採用していました。このような構成では、Salesforce内のデータのみでは利益率の算出が困難です。
- Salesforce:取引先情報と商談管理
- TeamSpirit:プロジェクトの稼働管理データ
- Board:請求管理システム(freee会計連携)
すべてのデータをSalesforce内に集約するという選択肢も考えられますが、このアプローチには以下の課題があり、中長期的な運用の観点では最適解とは言えません。
- データストレージの制限
- Salesforceには、レコード件数に関する上限が設定されており、詳細な分析データをすべて格納することは現実的ではありません
- データ加工の柔軟性の制約
- 一括更新やDelete等のDML操作が実行できません。
- 主従関係や参照関係で関連付いていない項目間でのJoin検索が実質的に実行できません。
- このように、RDBMSと比較して、データ加工の自由度が低くなります
解決アプローチ
これらの課題を解決するため、SalesforceにSnowflakeとTableauを組み合わせた以下のシステム構成・アーキテクチャを採用しました。前述の『データストレージの制限』および『データ加工の柔軟性』の課題は、Snowflakeの活用により解消されています。
- Snowflakeによるデータ統合
- 各システムのデータをSnowflakeに集約
- ノーコードでのデータ連携が可能
- SQLビューによる柔軟な集計・分析
- Tableauによる可視化
- Snowflake上のデータを直接可視化
- 高度な分析・レポーティング機能を提供
新たな課題:ユーザー体験の統合
しかし、このアーキテクチャには、SalesforceとTableauのシステム分断という課題が残ります。ユーザビリティの観点から、業務用画面は統合されていることが望ましく、画面の分断は利用率低下のリスク要因となります。
具体例として、Salesforceの取引先一覧から収益性の低いプロジェクトや進行上の問題がある取引先を特定するケースを考えてみましょう。システムが分断されている場合、以下のような煩雑な操作が必要となります:
- Salesforceで株式会社ABCを選択
- 別画面でTableauを起動
- Tableau内で株式会社ABCを再度検索
この課題に対し、『Salesforce画面へのTableau埋め込み』というアプローチを採用しました。具体的には、以下の実装により、シームレスなユーザー体験を実現します。
- iframeを使用した画面統合
- Salesforceの取引先選択状態をTableauへ自動連携
このアーキテクチャを実現する上で、特に重要な2つの技術要素があります。
- BI製品の埋め込みダッシュボード機能
- シングルサインオン(SSO)による認証統合
以降の章では、これらの技術要素について詳しく解説していきます。
画面内に他のWebサービスの画面を埋め込むためには
Webアプリケーションに外部サービスの画面を埋め込む方法として、一般的にiframeが使用されます。しかし、実際にはセキュリティ上の理由から、多くのWebサービスではiframeでの埋め込みが制限されています。
X-Frame-Optionsによる制限
X-Frame-Options
は HTTP のレスポンスヘッダーで、ブラウザーがページを <frame>
、<iframe>
、<embed>
、<object>
の中に表示することを許可するかどうかを示すために使用します。サイトはコンテンツが他のサイトに埋め込まれないよう保証することで、クリックジャッキング攻撃を防ぐために使用することができます。こちらはmozillaのサイトからの引用なのですが、多くのWebサービスではこのクリックジャッキング攻撃への対策として、X-Frame-Optionsヘッダーを設定しているため、iframeでの埋め込みが制限されています。この制限下でiframeによってWebサイトを埋め込もうとしても、画面が空白となり表示できません。
Embedded Dashboard URL(埋め込みダッシュボードURL)
一方で、BIツールが提供する分析ダッシュボードを他のWebサービスに埋め込みたいというニーズは高まっています。この課題に対し、Tableau、Redash、LookerなどのBIツールでは、ダッシュボードの埋め込み表示に特化したURLを提供しています。本システムでもこの埋め込みダッシュボードURLを活用して実装を行います。
通常のURL
https://prod-apnortheast-a.online.tableau.com/t/prazto/views/PJProfit_SF_/01
埋め込み用のURL(末尾にパラメータを追加)
https://prod-apnortheast-a.online.tableau.com/t/prazto/views/PJProfit_SF_/01?%3Aembed=y
ログインを二重にさせないための技術と設定
SAMLやOpenID Connectによるシングルサインオン
複数のサービスを統合する際の主要な課題の一つが認証の問題です。ユーザーが各サービスに個別にログインする必要がある場合、利便性が大きく損なわれます。
この課題に対して、SSO(シングルサインオン)の仕組みを活用できます。SAMLやOpenID Connectなどの標準規格を利用することで、一方のシステムでの認証を基に、他方のシステムへの自動ログインが実現可能です。
一般的に、SSOの構成要素は以下の役割に分類されます:
- IdP(Identity Provider)
- ユーザー認証を行う主体
- ユーザー情報を管理
- 認証結果をSPに通知
- SP(Service Provider)
- 実際のサービスを提供
- IdPからの認証情報に基づきアクセス制御
SalesforceはSAMLとOpenID Connect両規格のIdPとして、Tableauは両規格のSPとして対応しているため、このSSO機能を活用することで、重複したログインなしでTableauダッシュボードをシームレスに利用できます。
Salesforceのプラットフォームとしての支援機能(技術的設定の抽象化)
上図のような認証フローは独自実装も可能ですが、標準規格に準拠している場合、Salesforceはプラットフォームとしてこれらの技術的要素を抽象化し、GUI設定での実装を可能にしています。この機能を活用しない理由はありません。
OpenID Connect ID プロバイダーとしての Salesforce
これらのプラットフォーム機能を利用することで、複雑なプログラミングを必要とせず、SSO(シングルサインオン)環境を構築できます。
SalesforceとTableau専用の認証統合の仕組み
SalesforceとTableauの連携については、Tableauが Salesforce社の製品であることから、さらに簡便な設定方法が提供されています。今回はこの仕組みを使用して認証を統合します。
2024年10月時点において、Salesforce内に『Tableau組み込み』という設定画面が実装されており、この機能を通じてSSO(シングルサインオン)の設定が可能です。また、Tableauユーザーとの紐付けに使用する識別子も選択できます。今回はメールアドレスを用いて両システムのユーザーアカウントを関連付けています。
Salesforceの取引先画面に、その取引先でフィルターしたTableauダッシュボードを表示させるには
事前準備が完了しましたので、実際の埋め込み設定に進みます。本実装では、『Salesforceの取引先レコード画面を開いた際に、その取引先に関連するプロジェクトの売上・利益・利益率を一目で確認できるようにする』という機能を実現します。
ただし、SalesforceとTableauは同一画面上にiframeで表示されているものの、異なるシステムとして動作しており、サーバーサイドの処理も独立しています。このような状況下で、以下の技術的課題に対応する必要があります:
- Salesforceの取引先レコード情報をTableauダッシュボードにどのように連携するか
- 連携された情報を基に、Tableauダッシュボード側でどのようにフィルタリングを実装するか
【実装方針】iframeに設定するURLパラメータとして取引先の情報を連携する
この実装は、URLパラメータを介してSalesforceとTableau間で情報を連携する方式で実現可能です。
https://*********/PJProfit_SF_/01?:embed=true&企業名=XXXXXXXXXXX
この仕組みは以下の流れで動作します:
- Salesforceでレコードを開くと、自動的に上記形式のURLが生成される
- Tableau側で、受け取ったURLパラメータに基づき自動的にフィルタリングが実行される
これにより、ユーザーは特別な操作を必要とせず、Salesforce画面の遷移に連動してTableauの表示内容が自動的に更新されます。
【実際の設定作業①】Salesforce側の設定
実際の埋め込み設定に進みます。Salesforceの画面設定から進みます。
取引先レコードのLightningページの編集画面で、左の範囲の“Tableauビュー”をドラッグして配置します。
“Tableauビュー”の設定値として、以下を設定します。
- Tableau ビューの URL : 対象のTableauダッシュボードの埋め込み用のURLを記載します。
- サイトID : 対象のTableauのサイトIDを記載します。
- Tableau の詳細な検索条件 : 後続のTableauのフィルタに使用する項目名を記載します。今回は企業名で絞り込みを行うため、”企業名”と設定します。
- Salesforce の詳細な検索条件 : 上の”企業名”に対して、取引先レコードのどの値を対応させるかを指定します。今回は取引先名(Name)を指定します。
この設定により、以下のURLが自動的に発行されるようになりました。
https://*********/PJProfit_SF_/01?:embed=true&企業名=XXXXXXXXXXX
【実際の設定作業②】Tableau側の設定
Tableau Cloudでは、ダッシュボードのURLにパラメータを付加することでフィルタリングを実行できます。この機能を活用するには、企業名とフィールド名の設定を一致させる必要があります。
フィルタリングの実装手順:
- 初期状態の設定
- すべての取引先データが表示される基本URLを設定
- https://xxxxxxx.tableau.com/t/prazto/authoring/PJProfit_SF_/sheet8
- フィルタパラメータの追加
URLに付与した企業名がフィルタに適用されていることがわかります。
より詳細には、URLに指定したパラメータは以下のように動作します。
- 基本的な動作として「ディメンションフィルタ」として適用される。
- パラメータに指定したフィールドが、既にコンテキストフィルタとして設定されている場合は、そのシートの「コンテキストフィルタ」として適用される。
これをすべてのシートに行うことにより、ダッシュボード全体がURLパラメータにより絞り込まれるような動作になるというわけです。
このように、Tableauダッシュボード自体はすべての取引先で表示されるようにしておき、
Salesforce画面から確認した際には、その取引先に限定されるようにできました。
まとめ
本稿では、『Salesforceの画面からシステム外のデータも含めた分析結果を閲覧したい』というニーズに対し、以下のアプローチをご紹介しました:
- バックエンドのSnowflakeでデータを統合
- TableauダッシュボードをSalesforce画面に組み込み、シームレスに表示
今回はプロジェクトの利益率分析を例として取り上げましたが、この構成は様々なユースケースに応用可能です。
- Salesforceによる顧客を360度の視点で管理するCRMと同一画面での機能提供
- Snowflakeによる多様なデータの統合
- Tableauを活用した高度な分析結果の可視化
このアプローチは別のユースケースでも大きな価値をもたらすと考えており、また別の記事でご紹介をいたしますので、ご興味がございましたら、ぜひご覧ください。