[Salesforce] レポート機能を徹底的に使い倒すシリーズ(1) – カスタム集計数式項目

By |8月 14, 2014|salesforce, |


こんにちは、サポートデスクの “GT” です。

Force.com プラットフォームの大きなセールスポイントの一つに、「開発言語の高度な知識を必要とせず、ユーザインターフェース上の操作のみで、高度なアプリケーションを開発できる」という点があります。

開発言語には全く疎い「ノンコーディング・デベロッパー」の一人として、「Apex や Visualforce を使わずとも、ちょっとだけ工夫すれば、ここまで高度なカスタマイズが可能になります!」という事例を、いくつか本ブログでご紹介させていただきます。

今回のネタも、前回同様、カスタマーサービス室で好評実施中の「Salesforce 管理者向けトレーニング」から派生した内容です。

「レポート&ダッシュボード概要(基本編)」にお越しいただいたお客様よりいただいた質問は、次のようなものでした。

================================================================

<質問内容>

当社では、特定顧客の月ごとの商談件数をレポートで表示していますが、一つのレポートで、「月ごとの商談件数」を棒グラフで + 「期首から当月までのトータル商談件数の推移」を累積折れ線グラフで、同時に表示できないでしょうか?

================================================================

お客様の要件を実現するために必要な機能は、「累積折れ線グラフ」「組み合わせレポート」の二つです。
ぱっと見、簡単に実現できそうなのですが、ここで意外な壁が立ちはだかります。

【制限事項】
「 累積折れ線グラフと、異なる他のグラフ形式を組み合わせることができない」

ヘルプなどの仕様書には載っていないのですが、設定画面を見る限り明らかにこれは制限事項だと思います。


(↑ 最初に棒グラフを選択し、組み合わせグラフで折れ線を選択した場合。累積折れ線は選べない。)

(↑ 最初に折れ線グラフを選択した場合、組み合わせグラフでは「別の指標値を持った累積折れ線グラフ」以外が選べない。)

仕様に即してみると、回答は「できませんごめんなさい」となりますが、ここで諦めるのは百戦錬磨のウフル技術者として「ありえない」ことです。

「累積折れ線グラフと棒グラフが組み合わせられないんだったら、普通の折れ線グラフと棒グラフを組み合わせればいいんじゃない?」

どういうことかって?レポート側に「期初から当該月までの累計値を積み上げる項目」を持たせ、それを折れ線グラフ化する、ということです。

*************************************

元となるレポートのサンプルはこちらです。ごく一般的な「完了予定日(年月)で集計した商談の件数一覧」です。

このレポートを元に、「1月は10件、2月は10+9で19件、3月は19+12で31件・・・」と、その月までの累積値を表示する項目を追加することになります。
そのような項目を作るには、「カスタム集計数式項目」を使います。

前の月の値を引っ張ってくるには、PREVGROUPVAL という関数を使用します。
数式は以下の通りです。

PREVGROUPVAL (RowCount, CLOSE_DATE)

前の月の値がいい感じに取れました。
(1月は「前の月が無いので空欄」です。この段階では “当たり前のこと” ですが、これが後々で大ごとになる主要因となります・・・)

次は、「先月と今月の合計値」を出してみたいと思います。
数式は以下の通りです。

RowCount +PREVGROUPVAL(RowCount, CLOSE_DATE)

合計値が出せました。
1月はやっぱり空欄です・・・1月の値だけでも出てもいいのに・・・そろそろ「なんか変だ」と思い始めてきた頃です・・・。

疑問を一旦横に置いておいて、そろそろ仕上げに掛かります。

PREVGROUPVAL 関数には、「インクリメント値」のオプションがあります。
[PREVGROUPVAL(集計項目, 集計レベル, インクリメント値)] の形式で指定します。
インクリメント値とは「何レベル前の値を引用するか」を定義する値で、例えば “3” を指定すると、4月の集計レベルで3レベル前、つまり1月の値を表示します。
指定なしの場合はデフォルトとして “1” 、つまり直前の値になります。

つまり、1レベル前~11レベル前の値を全部参照させて、全体の合計値と当月の値を合算すれば、意図した数値が得られるのではないでしょうか。

早速数式を組んでみました。

RowCount +
PREVGROUPVAL(RowCount, CLOSE_DATE) +
PREVGROUPVAL(RowCount, CLOSE_DATE, 2 ) +
PREVGROUPVAL(RowCount, CLOSE_DATE, 3 ) +
PREVGROUPVAL(RowCount, CLOSE_DATE, 4 ) +
PREVGROUPVAL(RowCount, CLOSE_DATE, 5 ) +
PREVGROUPVAL(RowCount, CLOSE_DATE, 6 ) +
PREVGROUPVAL(RowCount, CLOSE_DATE, 7 ) +
PREVGROUPVAL(RowCount, CLOSE_DATE, 8 ) +
PREVGROUPVAL(RowCount, CLOSE_DATE, 9) +
PREVGROUPVAL(RowCount, CLOSE_DATE, 10 ) +
PREVGROUPVAL(RowCount, CLOSE_DATE, 11 )

嫌な予感が的中しました。12月以外全部空欄です。何故だぁーーー。

こういう場合は、あせらず落ち着いて、数式ビルダー画面の関数挿入メニューの表示を今一度確認します。

「前のグルーピングがなければ、Null を返します。」

そうか、これか。
「前の月」だけを出すときは、「1月の前の月は無いから空欄は当然だよね」とスルーしてましたが、「前月 + 当月」で当月の値さえ出てこなかったのは、「10 + Null = 10」ではなく、「10 + Null = Null」になる、からなのですね。 その時点で疑問を解消できないのは、デベロッパーとして「まだまだ修行が足りません!」と言わざるを得ません。

先ほど組んだ数式で、「戻り値が Null になる箇所一つ一つに対し、Null ではなく “0” (ゼロです、ぜろ。) が戻るようにする」変更を施します。

RowCount +
IF (ISNULL (PREVGROUPVAL(RowCount, CLOSE_DATE)), 0, PREVGROUPVAL(RowCount, CLOSE_DATE))+
IF (ISNULL (PREVGROUPVAL(RowCount, CLOSE_DATE, 2)), 0, PREVGROUPVAL(RowCount, CLOSE_DATE, 2))+
IF (ISNULL (PREVGROUPVAL(RowCount, CLOSE_DATE, 3)), 0, PREVGROUPVAL(RowCount, CLOSE_DATE, 3))+
IF (ISNULL (PREVGROUPVAL(RowCount, CLOSE_DATE, 4)), 0, PREVGROUPVAL(RowCount, CLOSE_DATE, 4))+
IF (ISNULL (PREVGROUPVAL(RowCount, CLOSE_DATE, 5)), 0, PREVGROUPVAL(RowCount, CLOSE_DATE, 5))+
IF (ISNULL (PREVGROUPVAL(RowCount, CLOSE_DATE, 6)), 0, PREVGROUPVAL(RowCount, CLOSE_DATE, 6))+
IF (ISNULL (PREVGROUPVAL(RowCount, CLOSE_DATE, 7)), 0, PREVGROUPVAL(RowCount, CLOSE_DATE, 7))+
IF (ISNULL (PREVGROUPVAL(RowCount, CLOSE_DATE, 8)), 0, PREVGROUPVAL(RowCount, CLOSE_DATE, 8))+
IF (ISNULL (PREVGROUPVAL(RowCount, CLOSE_DATE, 9)), 0, PREVGROUPVAL(RowCount, CLOSE_DATE, 9))+
IF (ISNULL (PREVGROUPVAL(RowCount, CLOSE_DATE, 10)), 0, PREVGROUPVAL(RowCount, CLOSE_DATE, 10))+
IF (ISNULL (PREVGROUPVAL(RowCount, CLOSE_DATE, 11)), 0, PREVGROUPVAL(RowCount, CLOSE_DATE, 11))

さあどうだ。

すばらしい!今度は上手くいきました!

これを元にグラフを作ってみましょう。

狙ったとおりのグラフができました!

Salesforce のレポート機能では、一見「出来なさそう」なことも、ほんのちょっとの創意工夫で実現できることが結構多いです。
「発想力」がものを言うので、「ノンコーディング・デベロッパー」としては、まさにセンスの見せ所だと思います。

*********************************

【再び宣伝ターイム!!!】

弊社カスタマーサービス室では、「トレーニング体験キャンペーン」を実施中です。

Salesforce 認定アドミニストレータ/デベロッパー資格を有したコンサルタントが、お客様のニーズに合わせたきめ細かいカリキュラムにて、Salesforce 基本操作のトレーニングを行っております。
もちろん、レポート&ダッシュボードの使いこなしに関するコースもあります。今回のブログ記事のような「裏技的なお話」も聞けちゃうかも!?

その「お墨付きのハイクオリティなトレーニング」が、今なら初回無料で受けられます!

さあ!以下のページから今すぐお申込を!!

https://uhuru.co.jp/products/service/salesforce/support