レポートの表示が重たいことをきっかけに、一度システムの見直しをしてみませんか?
目次
Salesforceに蓄積したデータを用いてグラフや表を作成することができる「レポート機能」。せっかく作成したレポートが表示されるまでに長時間かかり、イライラしてしまうことはありませんか?
Salesforceが現場に定着しはじめ、システム管理者であるあなたもレポートを作成することにようやく慣れ、SFAの威力とともに、改善の可能性に手応えを感じていることでしょう。
「これからもっとSalesforceの中にある大量データを使って分析や評価をしていきたい!」
「自分が作成した価値あるレポートを日々確認し、現場での意思決定に役立ててほしい!」
と考えているあなたにとって、レポートが表示されるまでに長時間かかってしまうことはなんとも耐えがたい事態であることはいうまでもありません。
本記事では、そんな事態を改善する方法の一つとして有効なスキニーテーブルという機能を概念からご紹介します。
スキニーテーブルをきっかけに、Salesforceにおける数ある処理速度を改善する取り組みを理解していきましょう。
Salesforceのスキニーテーブルとは
スキニーテーブルは、Salesforceで通常使用しているオブジェクトのDBとは別でSalesforceプラットフォーム内に作成するテーブルのことを指します。
スキニーテーブルでパフォーマンスが改善する理由
まず初めにSalesforceのテーブルの構造を代表的な標準オブジェクトを例に理解していきましょう。
実は、Salesforceの標準項目とカスタム項目は以下、それぞれ別のテーブルに格納されています。以下、取引先での一例です。
そのため、標準項目とカスタム項目の両方を表示するレポートでは、レポートを実行する度に2つのテーブルを結合する処理が発生します。
そこで、実際のDBで分かれてしまっている標準オブジェクトの標準項目とカスタム項目のテーブル情報を事前に1つのスキニーテーブルとして保持することで、都度テーブルを結合する処理の発生を防ぎ、レポートの実行含めた処理の高速化に貢献します。リストビューによる表示やSOQLで結果を取得する際も同様です。
また、スキニーテーブルにはオブジェクトで使用するデータ項目のみに限定して保持することもできるため、通常はテーブル内で取得する参照先のデータを読み込む必要がなくなりストレージ効率向上にも寄与します。
スキニーテーブルの作成方法
スキニーテーブルは、Salesforceの設定画面から作成出来ません。
スキニーテーブルを作成するためには、Salesforceのカスタマーサポートに都度依頼する必要があります。また、作成したスキニーテーブルに項目を追加したい場合も自分で設定を変更することは出来ないため、都度Salesforceサポートへの依頼が必要です。
次から、Salesforceサポートへの依頼方法を具体的にみていくことにしましょう。
Salesforceサポートへの依頼方法
メールではどんな風に問い合わせしたらいいのか?と迷う方もおられるでしょう。
Salesforceのサポートには、下記の手順で簡単に依頼できます。
- ご自身の環境からSalesforceのサポートにアクセスします。
- 画面右上の《お問い合わせ》ボタンをクリックします。
- 《お問い合わせを作成》ボタンをクリックします。
- 依頼に必要事項を入力し、《お問い合わせを作成する》ボタンをクリックします。
(事前にTrailblazerアカウントの作成が必須です。)
説明欄には下記の内容を入力してください。
スキニーテーブル作成を依頼する組織Id
● SOQL (変数を使用している場合には静的な値を入力して下さい)
● チューニングを実施出来ない理由 または変更できない理由
● オブジェクト設計の見直し、カスタムインデックスの付与、SOQL の変更、レポートの検索条件の見直しなど実施したチューニングの内容
● タイムアウトが発生した直近の日時
● 処理を行ったユーザ Id (メールアドレス形式)
● Bulk API やウィークリーエクスポートサービスを使用出来ない理由
上記の内容に加え、スキニーテーブルを作成するためには、オブジェクト・列数・データ型に各種制限があります。まずはスキニーテーブルを作成できる対象であるか具体的に確認していましょう。
スキニーテーブルの作成対象
スキニーテーブル作成には以下の内容を満たす必要があります。
オブジェクト
カスタムオブジェクト
取引先、取引先責任者、商談、リード、ケースの計5種類の標準オブジェクト
テーブルの列数
1つのスキニーテーブルに対して最大で100列まで用意することができます。
追加可能な項目のデータ型
● チェックボックス
● 日付
● 日付と時刻
● メール
● 数値
● パーセント
● 電話
● 選択リスト (複数選択)
● テキスト
● テキストエリア
● ロングテキストエリア
● URL
(暗号化されたデータも含めることが出来ます。)
上記までの内容は、おそらく貴方の組織でも要件を満たしていることでしょう。
しかし、スキニーテーブルは先ほどの問い合わせ内容に記載したとおり他の手段で処理速度の改善が見込まれない場合の対応であるため、以下の観点で見直しが必要です。
①オブジェクト設計が複雑になりすぎていないか
②標準インデックス、カスタムインデックスの付与で処理速度の改善が見込まれないか
③SOQL を変更出来ないか
④レポートの検索条件を変更できないか
次からは、処理速度が向上する①から④の代表的な取り組みについて、それぞれ簡単にポイントを説明していきます。
処理速度が向上する取り組みのご紹介
- オブジェクト設計の見直し
- 標準インデックス、カスタムインデックスの付与
- SOQL の変更
- レポートの検索条件の見直し
Salesforceでは通常のリレーショナルデータベースのように正規化しすぎないことが重要です。具体的には、以下の観点で設計を見直してみることをおすすめします。
A)業務の目的が共通するオブジェクトが複数存在しないか
B)レコードタイプを利用することでオブジェクトを集約できそうな箇所がないか
C)親に連結する子オブジェクトの数が多くなりすぎていないか
以下、Salesforceにおけるオブジェクト設計のイメージです。
オブジェクト間をつなぐリレーションが平易であるといえるでしょう。
クエリの処理速度向上するため、インデックスの利用は欠かせません。
検索がインデックスにヒットしない場合はテーブルをフルスキャンすることになるため、パフォーマンスが劣化する原因にもなりえます。
特に、標準インデックス、カスタムインデックスで異なる検索条件が現在でも基準を満たしているか確認を行いましょう。
【標準インデックス】
● 検索条件が合計レコード数の 30% 未満
● 最大で 1,000,000 件
(検索条件のみで返される合計レコード数で考慮する必要があります。LIMIT 句で絞り込みを行ってもインデックスは使用されません。)
【カスタムインデックス】
● 検索条件が合計レコード数の 10% 未満
● 最大で 333,333 件
(検索条件のみで返される合計レコード数で考慮する必要があります。LIMIT 句で絞り込みを行ってもインデックスは使用されません。)
SOQLで最高のパフォーマンスを得るためには、セレクティブ(選択的)であることが必須であるため一度SOQLの内容を確認しましょう。
セレクティブ(選択的)にならない検索条件
A)クエリの対象が特定の閾値を超える
② 標準インデックス、カスタムインデックスの付与の検索条件を満たさない場合を指します。
B)検索条件の演算子が「非セレクティブ」
該当する非セレクティブの演算子は下記の通りです。
否定演算子
NOT EQUAL TO , !=
NOT CONTAINS
NOT LIKE
EXCLUDES
テキストとの比較演算子
text_field
text_field =
後方/中間一致 ( 頭に% )
LIKE ‘%string%’
非決定数式項目
時間関数
C)検索条件に “CONTAINS”が含まれる、かつスキャン行数が333,000 を超えてしまう
D)空の値と比較する (Name = ‘’)
検索条件を使用して、必要なデータのみが表示されるようにレポートを絞り込むことも有効です。
まとめ
いかがだったでしょうか?
今回はスキニーテーブルの位置づけ、利用することで何故処理速度の向上に寄与するか
代表的なSalesforceのオブジェクトから理解することが出来たかと思います。しかしスキニーテーブルを活用するためには、カスタムインデックスの付与等いくつか処理速度向上の取り組みを事前に行う必要があることをお伝えしました。あなたが、今回起きた事象が解決する頃には、業務全体を俯瞰して適切なアクションを起こすことができる市場価値の高いシステム管理者となっていることでしょう。
<Salesforce>
弊社ではSalesforceをはじめとするさまざまな無料オンラインセミナーを実施しています!
>>セミナー一覧はこちら
また、弊社ではSalesforceの導入支援のサポートも行っています。ぜひお気軽にお問い合わせください。
>>Salesforceについての詳細はこちら
>>Salesforceの導入支援実績はこちらからご覧いただけます!
医療業界に特化した営業支援、顧客管理(SFA/CRM)のコンサルティングも提供しております。こちらもぜひお気軽にお問い合わせください。
>>顧客管理(SFA/CRM)のコンサルティングの詳細はこちら