フローで積み上げ集計(その1)

フローで積み上げ集計(その1)

積み上げ集計項目を最大数まで使用している場合や、参照関係で積み上げ集計をしたい場合にはフローで設定が必要です。その1で積み上げ集計の件数、合計、平均を紹介します。
フローで積み上げ集計(その1)
43
フローで積み上げ集計(その1)
chirosuke
2022/01/14 14:29:25
「参照関係で積み上げ集計したい」という要望は比較的多いと思いますが、最近、同日に別のお客様から同じ質問を受けましたので、フローで積み上げ集計を行う基本的な設定方法(多分…)を紹介いたします。
積み上げ集計項目では種別に件数合計最少最大がありますので、そちらに平均を加えた種類別の設定方法を紹介いたします。

フローの設定の紹介は記事が長くなってしまいますので、こちらでは以下の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で紹介しています。

gilde tech(for Salesforce)」に入会しませんか?
登録すると、「gilde tech」に掲載されているSalesforceのノウハウを全部閲覧できるだけでなく、自分が知っている知識を発信し、他の会員と交流することもできます。
またSalesforceの知識習得に役立つイベント情報も得ることができます。
是非ここで得た知識を業務に活かしてください!
43
コメント