【Salesforce】フローで月按分の売上データを自動生成する方法-前編【定点データの作成】
1.定点データがほしい
毎週月曜日に各部門・チームでweeklyMTGを実施しています。
Salesforceではその時点の売上は見ることができますが、先週月曜日時点の売上を見ることはできません。
今週と先週時点の売上で何が伸びたのか、売上の差分を確認することができません。そのため、毎週差分を手書きでスプレッドシートに記載しているとのこと…
これが結構厄介で、ただでさえ忙しいプレイヤーの工数を圧迫しています。
2.スナップショットは使いたくない
Salesforceには定点データを取得するために「スナップショット」という機能が備わっています。以前、弊社も使用していましたが、データ容量を圧迫し、従量課金が発生したので、なるべく開発でカバーし、スナップショットは使用しない方向になりました。(容量が95%あたりを超えると営業さんからアナウンスがあります)
スナップショットが使用できないとなると、フローぐらいしか思いつきません。フローには一括作成や一括更新・削除といったことができると聞いたことがありますが、参考記事を検索してもなかなか思うものがありません。
ミジンコレベルの知識ではありますが、下記要件を満たすものをフローで作成してみました。
3.要件定義
商談の受注予定日を起点に、フェーズがCommit以下の場合は、商談の見込金額と月数を使用して月按分の売上データを生成、フェーズがFirm以上の場合は、納品レコードからデータを生成
商談オブジェクトに【フェーズ】項目があります。
フェーズがヒアリング~Commitまでの場合は、商談の受注予定日を起点に見込金額を月数で按分します。
フェーズがFirm以降の場合は、納品オブジェクトからレコードを生成します。
生成したレコードは【売上履歴】オブジェクトへ格納します。
今回のポイントは、ヒアリング~Commitまでの売上履歴レコードの複数一括作成です。商談の月数項目に入力される数値は「12」までなので、12パターンのフロー分岐が必要となります。
<売上履歴レコードの1つめ>
・計上日に受注予定日を反映
・金額は、月数で按分した見込金額を反映するが、端数が出た場合は初月にのせる
<売上履歴2つめ以上>
・2つめの計上日は初月レコードから1つき追加して反映
4.売上履歴オブジェクトの作成
売上履歴は、要件に沿ったレコードを格納するためのカスタムオブジェクトです。商談オブジェクトと主従関係で作成しました。
5.フローの作成(前編)
Commit以下の場合と、Firm以上の場合で2種類のフローを作成します。
同じフロー内でできる気もしますが、管理がしやすいため2つ作成しました。まずはCommit以下の場合です。
①設定>フロー>新規フローを押下し、スケジュールトリガフローを選択>作成を押下します。
②開始を押下し、スケジュールを設定します。
毎週月曜11:00にフローを起動させたいため、下記のスケジュールに設定しています。
開始に「オブジェクトを選択」とありますが、こちらは省略します。
はじめにこちらを使用して商談オブジェクトを選択していましたがうまくいきませんでした…
③【レコード取得要素を追加】+押下>レコードを取得>を押下します。
表示ラベル・API参照名を入力し、商談オブジェクトを選択します。
フローで取得する商談レコードを絞り込みます。(こちらには一部を記載)
保存するレコード数は「すべてのレコード」、保存方法は「自動的に保存」を選択して完了を押下します。
④【ループ要素の追加】③で追加した要素の下に、ループ要素を追加します。
表示ラベル・API参照名を入力し、コレクション変数を選択します。
コレクション変数は、③で追加した要素を入力します。(リソース作成しない)
⑤【決定要素の追加】④で追加したループ要素の下に、決定要素を追加します。
月数が1のときはTrueの分岐、Faleseのときは、続いて作成する決定要素に進むフローにします。
要素自体の表示ラベルとAPI参照名を入力し、結果の詳細の表示ラベルとAPI参照名も入力します。リソースは④で作成したループ要素の中の「月数」を選択し、値は「1」とします。
⑥【割り当て要素の追加】月数1の分岐の下に、割り当て要素を追加します。
表示ラベルとAPI参照名を入力します。
変数は、レコード単一変数を作成します。
データ型はレコード、オブジェクトは売上履歴を選択します。この変数は、取得した商談項目を売上履歴の項目に反映するための変数です。変数の作成が完了したら、割り当て要素に追加します。
new_opp>計上日と一致する値は、④で作成したループの中にある商談の受注予定日を選択します。
売上履歴レコードに反映する項目を、ひたすら変数を作成し、ループの中にある商談の項目に充てていきます。
⑦【割り当て要素の追加】⑥で作成した割り当て要素の下にコレクション変数を追加します。
表示ラベルとAPI参照名を入力し、変数を追加します。ここで入力する変数はコレクション変数です。リソースの追加からコレクション変数を作成します。
ここで重要なのが、「複数の値を許可」にチェックを入れることです。チェックを入れると単一変数ではなく、コレクション変数にすることができます。
作成したコレクション変数を割り当ての変数に入力し、演算子「追加」を選択します。値は⑥で作成した「new_opp」を選択します。
ここまでが月数1の場合のフローです。
月数2以上の場合も、⑤~⑦を繰り返し設定していきます。
6.月数2以上のフロー作成(後編)
月数1の決定要素の右側に、「デフォルトの結果」分岐があります。その下に⑤で作成した決定要素の月数2バージョンを作成します。
「月数が2」の分岐の下に、割り当て要素を追加します。
ただし、月数1のときに作成した割り当てとは少し異なります。
new_opp>金額と一致する変数はループ要素の変数ではなく、リソース追加から作成した数式変数に変更します。
{!Loop_Opptunity.Amount}-{!Amount_months}
→ループ要素の商談の見込金額
{!Loop_Opptunity.Amount}-{!Amount_months}
→{!Amount_months}は通貨型の数式変数です。
FLOOR({!Loop_Opptunity.Amount}/{!Loop_Opptunity.months__c})
→ループ要素の商談の見込金額FLOOR({!Loop_Opptunity.Amount}/{!Loop_Opptunity.months__c})
→ループ要素の商談の月数
FLOOR関数は、数値を切り捨てて、0に最も近い整数に丸めるため使用しています。(月数が2以上の場合は見込金額/月数を行うと見込金額に端数がでる可能性があるため)
端数が出た場合は、初月のレコードに計上したいため、このような数式と変数を使用しました。
ここで作成した割り当て要素の下にコレクション変数の割り当て要素を追加します。
月数2の場合は、レコードも2つ必要です。
そのため、コレクション変数の割り当て要素の下に再度割り当て要素を追加します。
new>opp>計上日に一致する値は、Addmonths日付型の数式変数です。
ADDMONTHS({!Loop_Opptunity.CloseDate},1)
→月数を追加する関数
ADDMONTHS({!Loop_Opptunity.CloseDate},1)
→ループ要素の商談の受注予定日
ADDMONTHS({!Loop_Opptunity.CloseDate},1)
→ループ要素の商談の受注予定日に追加する月数(月数2の場合は「1」)
new>opp>金額に一致する値は、Amount_monthsにします。
そうすることで、月数2の場合の2つめのレコードは、
・計上日:1つ目のレコードから受注予定日に月数を1足した日付
・金額:見込金額/月数をした金額
を反映することができます。
以上を月数3~12までフローを分岐して作成し、できた結果が下記です。
長すぎて一部しか切り取れませんでした…
フローを有効化する前に、一度デバックして問題ないかどうか見た方が良いかと思います。問題なければ有効化し、レコードの作成状況を確認してみてください。
7.売上履歴の確認
商談の関連リストにある売上履歴が(10+)になっています。ということは…
はい!問題なく生成されています!
この商談は下記の状況でした。
・フェーズ:ヒアリング
・見込金額:8,000,000
・月数:11
・受注予定日:2022/5/1
売上履歴の最初のレコードの計上日は「2022/5/1」ですが、次のレコードから月数が1ずつ増えています。
金額も端数が初月に上乗せされています。
売上履歴レコードをレポート化し、作成日順にすれば週ごとの推移を確認することができます。また、現時点の売上と前週の売上を比較する場合は、結合レポート、もしくはTCRMでレシピ作成すればいけそうです!
長くなってしまったので、次回はFirm以上の場合、納品レコードから売上履歴オブジェクトにレコードを生成する方法をまとめようと思います。
あくまで自己流のため、他に良い方法があるかもしれません!
その点、ご承知おきいただければと思います。