取引先階層の最上位の取引先の表示とグループ全体の売上集計
関連会社のグループ全体での取引金額を積み上げ集計したいとご相談を受けますが、そのままではレポートで集計したり、積み上げ集計項目のように集計したりはできません。
取引先階層を設定しても、階層が一覧で表示できるだけです。
今回はレコード詳細画面に「最上位の取引先名」のリンクを表示させる数式項目の作成と、レコード詳細画面に「グループ全体の売上金額」を自動挿入するフローの設定をご紹介いたします。
グループ全体の売上金額をレコード詳細画面ではなく、レポートで表示できれば良い組織であれば、今回作成する数式項目をグルーピング化するだけで設定は完了です。
1.数式項目の作成
1.最上位の取引先を表示するハイパーリンク数式項目を作成します。数式の戻り値のデータ型は「テキスト」にし、以下の数式で数式項目を作成します。
サンプルではこのような数式にしています。自身を含めた6階層分になりますので、それ以上の場合はユーザへメッセージ表示がされるようにしています。
こちらの数式では、別タブを開かずに最上位の取引先ページを開きますが、別タブで開きたい場合は、数式の「,"_top"」を削除するか、「"_top"」を「"_blank"」に置き換えてください。
IF(ISBLANK(Parent.Name),HYPERLINK("/"&Id,Name,"_top"), IF(ISBLANK(Parent.Parent.Name),HYPERLINK("/"&Parent.Id,Parent.Name,"_top"), IF(ISBLANK(Parent.Parent.Parent.Name),HYPERLINK("/"&Parent.Parent.Id,Parent.Parent.Name,"_top"), IF(ISBLANK(Parent.Parent.Parent.Parent.Name),HYPERLINK("/"&Parent.Parent.Parent.Id,Parent.Parent.Parent.Name,"_top"), IF(ISBLANK(Parent.Parent.Parent.Parent.Parent.Name),HYPERLINK("/"&Parent.Parent.Parent.Parent.Id,Parent.Parent.Parent.Parent.Name,"_top"), IF(ISBLANK(Parent.Parent.Parent.Parent.Parent.Parent.Name), HYPERLINK("/"&Parent.Parent.Parent.Parent.Parent.Id,Parent.Parent.Parent.Parent.Parent.Name,"_top"), "6階層を超えました。システム管理者へ連絡してください")))))) |
※レポート集計のみで良い場合は、ここで設定は終了です。
最上位の取引先のリンクが表示され、レポートでもグルーピングして集計が可能になります。
2.最上位の取引先IDを表示する数式項目を作成します。
数式の戻り値のデータ型は「テキスト」にし、以下の数式で数式項目を作成します。
サンプルではこのような数式にしています。
こちらの数式も1.と同様に自身を含めた6階層分になります。
CASESAFEID( IF( ISBLANK(Parent.Name) ,Id, IF( ISBLANK( Parent.Parent.Name ) ,Parent.Id, IF( ISBLANK( Parent.Parent.Parent.Name ) ,Parent.Parent.Id, IF( ISBLANK( Parent.Parent.Parent.Parent.Name ) ,Parent.Parent.Parent.Id, IF( ISBLANK( Parent.Parent.Parent.Parent.Parent.Name ) ,Parent.Parent.Parent.Parent.Id, IF( ISBLANK( Parent.Parent.Parent.Parent.Parent.Parent.Name ) ,Parent.Parent.Parent.Parent.Parent.Id, ""))))))) |
階層が6階層以上である場合は数式ではなく、項目自動更新など別の対処が必要になりますのでご注意ください。
2.積み上げ集計項目の作成
こちらはすでに取引先に作成されている場合が多いと思いますので、すでに各取引先の売上金額の積み上げ集計項目が作成されている場合は、こちらの手順はスキップして、「3.通貨項目の作成」へ進んでください。条件で受注になっている商談にしています。
3.通貨項目の作成
この後のフローで集計させるグループ全体の売上合計を格納する通貨項目を作成します。4.フローの設定
今回のサンプルフローでは、親取引先を変更した際に前の取引先のグループに影響がありますので、そちらの対応も含めたフローになっています。1.[設定] から、[クイック検索] で「フロー」を検索し、[フロー]をクリックし[新規フロー]ボタンをクリックします。
2.「レコードトリガフロー」を選択し、以下のように開始を設定します。
・オブジェクト:取引先
・フローをトリガする条件:レコードが作成または更新された
・エントリ条件を設定:
[条件の要件] いずれかの条件に一致(OR)
項目 | 演算子 | 値 |
TotalAmount__c (売上合計 ※作成した積み上げ集計項目) | 変更済み | True |
ParentId(親取引先 ID) | 変更済み | True |
・フローを最適化:アクションと関連レコード
3.[開始]の下の⊕から[レコードを取得]を追加し、以下のように設定します。
・オブジェクト:取引先
・レコードを絞り込み:[条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
TOP_ParentAccountId__c (1.2.で作成した最上位の親取引先ID) | 次の文字列と一致する | $Record > 最上位の親取引先ID |
・保存するレコード数:すべてのレコード
・レコードデータの保存方法:すべてのデータを自動的に保存
4.[レコードを取得]の下の⊕から[ループ]要素を追加し、以下のように設定します。
・コレクション変数:{!get_GroupAccount} (上記3.で取得したレコードコレクション変数)
5.左側のマネージャの[新規リソース]をクリックし、以下のように設定します。
・リソース種別:変数
・データ型:通貨
・小数点の位置:0
6.[ループ]の「項目ごと」下の⊕から[割り当て]要素を追加し、以下のように設定します。
・変数値を設定
変数 | 演算子 | 値 |
var_TotalAmount_Summary (5.で作成した変数を選択) | 追加 | ループ loop_GroupAccounts1 の現在の項目 > 売上合計 |
7.[ループ]の「最後の項目の後」下の⊕から[ループ]要素を追加し、以下のように設定します。
・コレクション変数:{!get_GroupAccount} (上記3.で取得したレコードコレクション変数)
8.左側のマネージャの[新規リソース]をクリックし、以下のように設定します。
<レコード(単一)変数>
・リソース種別:変数
・データ型:レコード
・オブジェクト:取引先
<レコードコレクション変数>
・リソース種別:変数
・データ型:レコード
・複数の値を許可 (コレクション):チェックあり
・オブジェクト:取引先
9.[ループ]の「項目ごと」下の⊕から[割り当て]要素を追加し、以下のように設定します。
・変数値を設定
変数 | 演算子 | 値 |
var_Update_Account > 取引先 ID (8.で作成したレコード(単一)変数の取引先ID) | 次の文字列と一致する | ループ loop_GroupAccounts2 の現在の項目 > 取引先 ID |
var_Update_Account > グループ売上合計 (8.で作成したレコード(単一)変数のグループ売上合計) | 次の文字列と一致する | var_TotalAmount_Summary (5.で作成した変数) |
var_Update_AccountCollection (8.で作成したレコードコレクション変数) | 追加 | var_Update_Account (8.で作成したレコード(単一)変数) |
ここまででの全体図はこのような感じです。
この後の10~17の設定は親取引先を変更してグループが変更になった場合の設定になります。
親取引先を変更することがない場合は、18.のレコード更新を[終了]の前に追加すれば設定は完了します。
10.左側のマネージャの[新規リソース]をクリックし、以下のように設定します。
・リソース種別:数式
・データ型:Boolean
・数式:AND(NOT(ISBLANK({!$Record__Prior.ParentId})),{!$Record.TOP_ParentAccountId__c}<>{!$Record__Prior.TOP_ParentAccountId__c})
※数式の太字の箇所が上記1.2.で作成したIDの数式項目の値を現在と前で比較しています。
11.[ループ]の「最後の項目の後」下の⊕から[決定]要素を追加し、以下のように設定します。
・表示ラベル:親取引先を変更
・結果を実行する条件の要件:すべての条件に一致(AND)
リソース | 演算子 | 値 |
formula_ParentChanged (10.で作成した数式を選択) | 次の文字列と一致する | True |
12.「親取引先を変更」(11.で入力した表示ラベル)の下の⊕から[レコードを取得]を追加し、以下のように設定します。
・オブジェクト:取引先
・レコードを絞り込み:[条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
TOP_ParentAccountId__c (1.2.で作成した最上位の親取引先ID) | 次の文字列と一致する | $Record__Prior > 最上位の親取引先 ID |
・保存するレコード数:すべてのレコード
・レコードデータの保存方法:すべてのデータを自動的に保存
13.[レコードを取得]の下の⊕から[ループ]要素を追加し、以下のように設定します。
・コレクション変数:{!get_PG_Account} (上記12.で取得したレコードコレクション変数)
14.左側のマネージャの[新規リソース]をクリックし、以下のように設定します。
・リソース種別:変数
・データ型:通貨
・小数点の位置:0
15.[ループ]の「項目ごと」下の⊕から[割り当て]要素を追加し、以下のように設定します。
・変数値を設定
変数 | 演算子 | 値 |
var_PG_TotalAmount_Summary(14.で作成した変数を選択) | 追加 | ループ loop_PGAccounts1 の現在の項目 > 売上合計 |
16.[ループ]の「最後の項目の後」下の⊕から[ループ]要素を追加し、以下のように設定します。
・コレクション変数:{!get_PG_Account} (上記12.で取得したレコードコレクション変数)
17.[ループ]の「項目ごと」下の⊕から[割り当て]要素を追加し、以下のように設定します。
・変数値を設定
変数 | 演算子 | 値 |
var_Update_Account > 取引先 ID (8.で作成したレコード(単一)変数の取引先ID) | 次の文字列と一致する | ループ loop_PGAccounts2 の現在の項目 > 取引先 ID |
var_Update_PGAccount > グループ売上合計 (8.で作成したレコード(単一)変数のグループ売上合計) | 次の文字列と一致する | var_PG_TotalAmount_Summary (14.で作成した変数) |
var_Update_AccountCollection (8.で作成したレコードコレクション変数) | 追加 | var_Update_Account (8.で作成したレコード(単一)変数) |
18.[終了]の上の⊕から[レコードを更新]を追加し、以下のように設定します。
・更新するレコードを検索してその値を設定する方法:レコードまたはレコードコレクションからの ID およびすべての項目値を使用
・更新するレコードを選択:var_Update_AccountCollection(8.で作成してレコードコレクション変数)
19.最後にフローを[保存]しデバッグで確認後、 [有効化]にします。
【結果確認】
設定直後のため、まだグループの売上合計は入力されていません。「日本AAA株式会社」の商談のフェーズを「受注」に変更してみます。
積み上げ集計項目の「売上合計」に成約した金額が集計され、フローで集計したグループ全体の売上金額も挿入されました。
同じグループの取引先すべてにグループの売上金額が挿入されました。
レポートの集計結果とも同じ金額です。
次に親取引先を変更してみます。
グループ売上合計が変わりました。
新しいグループの各取引先にもグループの合計金額が挿入されています。
前のグループの取引先のグループ売上合計も「日本AAA株式会社」の売上金額が引かれて、修正された金額が挿入されています。