「参照関係で積み上げ集計したい」という要望は比較的多いと思いますが、最近、同日に別のお客様から同じ質問を受けましたので、フローで積み上げ集計を行う基本的な設定方法(多分…)を紹介いたします。
積み上げ集計項目では種別に
件数、
合計、
最少、
最大がありますので、そちらに
平均を加えた種類別の設定方法を紹介いたします。
フローの設定の紹介は記事が長くなってしまいますので、こちらでは以下の3つの設定方法を紹介します。最少と最大は「
その2」で紹介いたします。
⚠️️注意
️標準機能の積み上げ集計項目と違い、レコードトリガフローの場合は、既に稼働しているオブジェクトであれば、既存レコードに対して何かしらのメンテナンスが必要になります。データローダで一括更新や、メンテナンス用に別のフローを作成するなどの対応が必要です。
また、条件も稼働後に修正しても積み上げ集計項目のように既存レコード分は反映されないので、こちらもメンテナンスが必要になります。
サンプルの要件
親:取引先(Account)に、子:商談(Opportunity)のフェーズが受注の件数、金額を積み上げ集計する
サンプルの要件のような条件がない場合は、トリガの条件は「レコードが作成された」、エントリ条件の[条件の要件]は「なし」の設定で良いかと思います。また、親の参照項目の入力が必須ではないときは、「親のIdがNullでない」の条件を追加するなど、要素の条件は要件に合わせるようにしてください。
<件数の設定方法>
1.[設定] → [フロー] → [新規フロー] → [レコードトリガフロー] → [自由形式]をクリック(自動レイアウトでも可。お好きな方でどうぞ)
2.開始を設定します。
・
オブジェクト:商談(子オブジェクト)
・
フローをトリガする条件:レコードが作成または更新された
・
エントリ条件を設定:
[条件の要件] すべての条件に一致(AND)
| 項目 | 演算子 | 値 |
1 | StageName (条件となる項目) | 次の文字列と一致する | 08-受注(条件の値) |
2 | StageName (条件となる項目) | 変更済み | True |
・
フローを最適化:アクションと関連レコード
3.要素から[レコードを取得]をドラッグし以下のとおり設定します。
・
オブジェクト:商談(子オブジェクト)
・
レコードを絞り込み:
[条件の要件] すべての条件に一致(AND)
| 項目 | 演算子 | 値 |
1 | AccountId | 次の文字列と一致する | $Record > 取引先 ID |
2 | StageName | 次の文字列と一致する | 08-受注 |
・
レコードを並び替え:
[並び替え順] 並び替えなし
・
保存するレコード数:すべてのレコード
・
レコードデータの保存方法:すべてのデータを自動的に保存
4.[レコードを取得]要素をコネクタで接続します。
5.要素から[割り当て]をドラッグし以下のとおり設定します。
変数 | 演算子 | 値 |
[+新規リソース]をクリック ・リソース種別:変数 ・データ型:数値 ・小数点の位置:0 | 次の数と一致する | get_Opportunity 商談 (3.で取得したレコードコレクション変数) |
6.[割り当て]要素をコネクタで接続します。
7.要素から[レコードを更新]をドラッグし以下のとおり設定します。
・
更新するレコードを検索してその値を設定する方法:
レコードを識別する条件を指定し、項目を個別に設定
・
オブジェクト:取引先(親オブジェクト)
・
レコードを絞り込み:
[レコードを更新する条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
Id | 次の文字列と一致する | $Record > 取引先 ID(開始したレコードの親のID項目) |
・
項目値をレコードに設定:
項目 | 値 |
Num_contracts__c (件数を入力する項目) | var_count (5.で作成したレコード数を格納する変数) |
8.[レコードを更新]要素をコネクタで接続します。
9.最後にデバッグ、保存、有効化をします。
10.レコードを削除した場合のトリガのフローを作成します。
※業務フロー上レコードを削除することがなければ、この手順は不要です。 1.と4.~8.は同じ内容で、
2.の開始設定と
3.のレコードの取得を削除用で設定します。
[別名で保存]をクリックし、新規フローで保存して修正すると簡単です。
【2.開始設定】 ・
オブジェクト:商談(子オブジェクト)
・
フローをトリガする条件:レコードが削除された
・
エントリ条件を設定:
[条件の要件] すべての条件に一致(AND)
| 項目 | 演算子 | 値 |
1 | StageName (条件となる項目) | 次の文字列と一致する | 08-受注 |
【3.レコードを取得】※削除する開始レコードを除く条件の3が追加
・
オブジェクト:商談(子オブジェクト)
・
レコードを絞り込み:
[条件の要件] すべての条件に一致(AND)
| 項目 | 演算子 | 値 |
1 | AccountId (条件となる項目) | 次の文字列と一致する | $Record > 取引先 ID |
2 | StageName (条件となる項目) | 次の文字列と一致する | 08-受注 |
3 | Id | 次の文字列と一致しない | $Record > 商談 ID |
・
レコードを並び替え:
[並び替え順] 並び替えなし
・
保存するレコード数:すべてのレコード
・
レコードデータの保存方法:すべてのデータを自動的に保存
【結果確認】
商談のフェーズを受注にしてみます。
AAA通商株式会社の成約商談件数が3件になり、成約件数項目にも「3」が入力されました。
フェーズが受注の商談を削除してみます。
AAA通商株式会社の成約商談件数が3件から1件減り、成約件数項目に「2」が入力されました。
<合計の設定方法>
1.[設定] → [フロー] → [新規フロー] → [レコードトリガフロー] → [自由形式]をクリック(自動レイアウトでも可。お好きな方でどうぞ)
2.開始を設定します。
・
オブジェクト:商談(子オブジェクト)
・
フローをトリガする条件:レコードが作成または更新された
・
エントリ条件を設定:
[条件の要件] カスタム条件ロジックに一致
[条件ロジック] (1 AND 2) OR (3 AND 4)
| 項目 | 演算子 | 値 |
1 | StageName (条件となる項目) | 次の文字列と一致する | 08-受注(条件の値) |
2 | StageName (条件となる項目) | 変更済み | True |
3 | StageName (条件となる項目) | 次の文字列と一致する | 08-受注(条件の値) |
4 | Amount (集計する項目) | 変更済み | True |
・
フローを最適化:アクションと関連レコード
3.要素から[レコードを取得]をドラッグし以下のとおり設定します。
(上記の件数の設定と同じです)
・
オブジェクト:商談(子オブジェクト)
・
レコードを絞り込み:
[条件の要件] すべての条件に一致(AND)
| 項目 | 演算子 | 値 |
1 | AccountId | 次の文字列と一致する | $Record > 取引先 ID |
2 | StageName | 次の文字列と一致する | 08-受注 |
・
レコードを並び替え:
[並び替え順] 並び替えなし
・
保存するレコード数:すべてのレコード
・
レコードデータの保存方法:すべてのデータを自動的に保存
4.[レコードを取得]要素をコネクタで接続します。
5.要素から[ループ]をドラッグし以下のとおり設定します。
・
コレクション変数: {!get_Opportunity} (上記3.で取得したレコードコレクション変数)
6.[ループ]要素をコネクタで接続します。
7.要素から[割り当て]をドラッグし以下のとおり設定します。
変数 | 演算子 | 値 |
[+新規リソース]をクリック ・リソース種別:変数 ・データ型:通貨(集計する項目に合わせてください) ・小数点の位置:0(要件に合わせてください) | 追加 | ループ loop_Opportunity の現在の項目 > 金額 (5.のループのAPI参照名から集計する項目を選択) |
8.[割り当て]要素をコネクタで接続します。
この時表示される [ループコネクタを選択] 画面のループコネクタで「コレクション内の項目ごと」を選択し[完了]をクリックします。
続けて[割り当て]要素から[ループ]要素に接続します。
9.要素から[レコードを更新]をドラッグし以下のとおり設定します。
・
更新するレコードを検索してその値を設定する方法:
レコードを識別する条件を指定し、項目を個別に設定
・
オブジェクト:取引先(親オブジェクト)
・
レコードを絞り込み:
[レコードを更新する条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
Id | 次の文字列と一致する | $Record > 取引先 ID(開始したレコードの親のID項目) |
・
項目値をレコードに設定:
項目 | 値 |
TotalContractAmount__c (合計を入力する項目) | var_Total (7.で作成した合計を格納する変数) |
10.[ループ]要素から[レコードを更新]要素を接続します。
11.最後にデバッグ、保存、有効化をします。
12.レコードを削除した場合のトリガのフローを作成します。
※業務フロー上レコードを削除することがなければ、この手順は不要です。 1.と4.~11.は同じ内容で、
2.の開始設定と
3.のレコードの取得を削除用で設定します。
[別名で保存]をクリックし、新規フローで保存して修正すると簡単です。
開始設定とレコードの取得の設定は上記の
<件数の設定方法>の削除と同じですので、そちらを参照ください。
【結果確認】
商談のフェーズを受注にしてみます。
DDD物産株式会社の成約金額が「¥10,063,440+¥2,611,440=¥12,674,880」になり、成約金額(合計)項目にも「
¥12,674,880」が入力されました。
次の商品を削除して商談の金額を変更してみます。
商談「DDD物産株式会社 導入サービス提案_2021.8」の成約金額が「¥2,611,440-¥1,257,120=¥1,354,320」になり、成約金額(合計)項目にも「¥12,674,880-¥1,257,120=
¥11,417,760」が入力されました。
フェーズが受注の商談を削除してみます。
成約金額「¥1,354,320」の商談を削除し、成約金額合計は1件のみの「¥10,063,440」となり、成約金額(合計)項目にも「
¥10,063,440」が入力されました。
<平均の設定方法>
平均の設定方法は上記の<件数の設定方法>と<合計の設定方法>を併せたような設定になります。
1.[設定] → [フロー] → [新規フロー] → [レコードトリガフロー] → [自由形式]をクリック(自動レイアウトでも可。お好きな方でどうぞ)
2.開始を設定します。(上記の合計の設定と同じです)
・
オブジェクト:商談(子オブジェクト)
・
フローをトリガする条件:レコードが作成または更新された
・
エントリ条件を設定:
[条件の要件] カスタム条件ロジックに一致
[条件ロジック] (1 AND 2) OR (3 AND 4)
| 項目 | 演算子 | 値 |
1 | StageName (条件となる項目) | 次の文字列と一致する | 08-受注(条件の値) |
2 | StageName (条件となる項目) | 変更済み | True |
3 | StageName (条件となる項目) | 次の文字列と一致する | 08-受注(条件の値) |
4 | Amount (集計する項目) | 変更済み | True |
・
フローを最適化:アクションと関連レコード
3.要素から[レコードを取得]をドラッグし以下のとおり設定します。
(上記の合計の設定と同じです)
・
オブジェクト:商談(子オブジェクト)
・
レコードを絞り込み:
[条件の要件] すべての条件に一致(AND)
| 項目 | 演算子 | 値 |
1 | AccountId | 次の文字列と一致する | $Record > 取引先 ID |
2 | StageName | 次の文字列と一致する | 08-受注 |
・
レコードを並び替え:
[並び替え順] 並び替えなし
・
保存するレコード数:すべてのレコード
・
レコードデータの保存方法:すべてのデータを自動的に保存
4.[レコードを取得]要素をコネクタで接続します。
5.要素から[割り当て]をドラッグし以下のとおり設定します。
(上記の件数の設定と同じです)
変数 | 演算子 | 値 |
[+新規リソース]をクリック ・リソース種別:変数 ・データ型:数値 ・小数点の位置:0 | 次の数と一致する | get_Opportunity 商談 (3.で取得したレコードコレクション変数) |
6.[割り当て]要素をコネクタで接続します。
7.要素から[ループ]をドラッグし以下のとおり設定します。
(上記の合計の設定と同じです)
・
コレクション変数: {!get_Opportunity} (上記3.で取得したレコードコレクション変数)
8.[ループ]要素をコネクタで接続します。
9.要素から[割り当て]をドラッグし以下のとおり設定します。(上記の合計の設定と同じです)
変数 | 演算子 | 値 |
[+新規リソース]をクリック ・リソース種別:変数 ・データ型:通貨(集計する項目に合わせてください) ・小数点の位置:0(要件に合わせてください) | 追加 | ループ loop_Opportunity の現在の項目 > 金額 (7.のループのAPI参照名から集計する項目を選択) |
10.[割り当て]要素をコネクタで接続します。この時表示される [ループコネクタを選択] 画面のループコネクタで「コレクション内の項目ごと」を選択し[完了]をクリックします。
続けて[割り当て]要素から[ループ]要素に接続します。
11.要素から[レコードを更新]をドラッグし以下のとおり設定します。
・
更新するレコードを検索してその値を設定する方法:
レコードを識別する条件を指定し、項目を個別に設定
・
オブジェクト:取引先(親オブジェクト)
・
レコードを絞り込み:
[レコードを更新する条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
Id | 次の文字列と一致する | $Record > 取引先 ID(開始したレコードの親のID項目) |
・
項目値をレコードに設定:
項目 | 値 |
AverageContractAmount__c (平均を入力する項目) | [+新規リソース]をクリック ・リソース種別:数式 ・データ型:通貨(集計する項目に合わせてください) ・小数点の位置:0(要件に合わせてください) ・数式:9.で作成した合計を格納する変数 / 5.で作成した件数を格納する変数 |
12.[ループ]要素から[レコードを更新]要素を接続します。
13.最後にデバッグ、保存、有効化をします。
14.レコードを削除した場合のトリガのフローを作成します。
※業務フロー上レコードを削除することがなければ、この手順は不要です。 1.と4.~13.は同じ内容で、
2.の開始設定と
3.のレコードの取得を削除用で設定します。
[別名で保存]をクリックし、新規フローで保存して修正すると簡単です。
開始設定とレコードの取得の設定は上記の
<件数の設定方法>の削除と同じですので、そちらを参照ください。
【結果確認】
商談のフェーズを受注にしてみます。
lllメディカル株式会社 の成約件数が「3件」、成約金額が「¥8,338,800」になり、成約金額(平均)項目にも「¥8,338,800÷3」の「
¥2,779,600」が入力されました。
次の商品を削除して商談の金額を変更してみます。
商談「lllメディカル株式会社 導入サービス_2020.4」の成約金額が「¥2,866,320-¥786,240=¥2,080,080」になり、llメディカル株式会社の成約金額の合計は「¥7,552,560」に変更となり、成約金額(平均)項目にも「¥7,552,560÷3」の「
¥2,517,520」が入力されました。
フェーズが受注の商談を削除してみます。
成約金額「¥2,080,080」の商談を削除し、成約金額合計は2件で「¥5,472,480」となり、成約金額(平均)項目にも「¥5,472,480÷2」の「
¥2,736,240」が入力されました。
最少、最大はその2で紹介しています。