プログラマ38の日記

主にプログラムメモです。

【Salesforce/Excel】SOQLとビューのexplain結果を表示するExcelマクロを作成しました

Salesforceで、オブジェクトの件数が増えてくると、SOQLやビューが遅いときがあります。

そんな時は、explainの結果を見てSOQLやビューの条件を見直したり、外部IDを作成、カスタムインデックスの作成を依頼するなどの対応となります。

 

複数のexplain結果をまとめて表示できるExcelマクロを作成しました。

ダウンロードはこちらからです。

 

explainは、開発者コンソールから実行ができますが、1つずつの手動実行になるのと、実行結果をExcelの表として保存できない点が難点だと思います。そんな時にこのExcelマクロが使えると思います。

 

使い方は次の通りです。

Salesforceの接続情報を指定
②通信設定
③explainを取得するSOQL、またはビューIDを指定
④実行プランを取得ボタンをクリック

 

f:id:crmprogrammer38:20171027184223p:plain

 

explainを実行すると、複数のプランが帰ってきます。

その中からSalesforceが一番良いと判断したものを選ぶのだと思っています。

このExcelマクロでは、explainの結果でplanを5個まで表示しています。(勝手に5個までにしています)

正しく把握はできていないのですが、基本的にはplan1でleadingOperationTypeがIndexかOtherとなっていればOKかなと思っています。(件数が少ないならどんなプランでも問題ありませんが件数が多い場合はインデックスを使用した方がいいと思います)

 

ポイントとして、SOQLだけでなく、ビューIDを指定することでビューのexplainも取得できます。遅くなっていそうなビューを特定して、条件の見直しをする時にこのマクロがお役に立てると嬉しく思います。

 

最後に

SalesforceREST APIが用意されていて、基本的にSOAP APIとほぼ同じ機能です。(多少違いますが)

ですが、このexplainは、REST APIだけの機能です。

Excelマクロでは、httpのリクエストを送信するだけなので、REST APIとはとても相性がいいのですが、64bitのExcelJSONを扱うことが難しいので結局XMLで結果をもらっています。

 

後、REST APIのexplainで、SOQLはURLEncodeしてパラメータにセットします。

Excelの数式でurlencodeの関数があるのですが、Excel2010だと使えなくてあきらめました。こういったところはExcelマクロの難しさだと思います。

使うOSのバージョン、32bitか64bitか、Excelのバージョンなど意識しないといけないのでこれはこれで大変だなーと思いました。