最新の子レコードだけレポートに表示させたい (その1)
主従関係、参照関係の最新の子レコードのみのレポート作成方法の紹介です。
chirosuke
2022/11/17 14:25:40
「取引先の最新の活動のみをレポートに表示させたい」というご相談を受けました。
この要件は、子レコードに最新かどうかのフラグを持たせレポートの条件に追加することで実現可能です。
特定の子レコードのみ表示させるレポートは、主従関係であれば比較的容易に実装できますが、参照関係、活動(行動、ToDo)の場合は少し設定が複雑になります。
記事が長くなってしまうので、その1では主従関係、参照関係の設定方法を紹介します。
1.親(主)オブジェクトに取得したい日付の積み上げ集計項目を作成します。
サンプルでは「最新の成約日」の情報が欲しいので、以下のように設定します。

2.子(従)オブジェクトに条件と一致する場合にフラグを立てる数式項目を作成します。
サンプルでは「1.で作成した積み上げ集計項目と完了予定日が一致 かつ 確度が100%」で作成しました。

レポートの「AAA通商株式会社」の商談一覧を確認し最新の成約商談か確認してみます。
ちゃんと最新の成約商談にフラグが立っていることが確認できました。

タイトルでは”最新”としていますが、最新に限らず特定の日付や値の最大、最小(最少)を条件としてフラグを立てることができます。
サンプルのフローで紹介するのは、参照関係での積み上げ集計項目(最大、最少)の設定方法と同じです。
1.親オブジェクトに条件となる日付を挿入させるための日付項目を作成します。
2.子オブジェクトに条件と一致する場合にフラグを立てる数式項目を作成します。
サンプルでは「1.で作成した日付項目と誕生日が一致 」で作成しました。
①[レコードトリガフロー] → [次へ]

②開始設定を以下のとおり設定します。
※更新頻度が高いオブジェクトの場合は作成と更新のトリガを分けてフローを作成されることもご検討ください。
・オブジェクト:取引先責任者(子オブジェクト)
・フローをトリガする条件:レコードが作成または更新された
・エントリ条件を設定:[条件の要件] いずれかの条件に一致(OR)
1[項目] Birthdate(条件となる項目)
[演算子] null
[値] False
2[項目] Birthdate(条件となる項目)
[演算子] 変更済み
[値]True
・フローを最適化:アクションと関連レコード

③要素から[レコードを取得]をドラッグし以下のとおり設定します。
・オブジェクト:取引先責任者(子オブジェクト)
・レコードを絞り込み:[条件の要件] すべての条件に一致(AND)
1[項目] Birthdate(条件となる項目)
[演算子] null
[値] False
2[項目] AccountId(親のID項目)
[演算子] 次の文字列と一致する
[値] $Record > 取引先 ID(開始したレコードの親のID項目)
・レコードを並び替え:[並び替え順] 昇順(最小が条件の場合は昇順、最大の場合は降順)
[項目] Birthdate(条件となる項目)
・保存するレコード数:最初のレコードのみ
・レコードデータの保存方法:すべてのデータを自動的に保存

④[レコードを取得]要素をコネクタで接続します。
⑤要素から[決定]をドラッグし以下のとおり設定します。
・結果を実行する条件:すべての条件に一致(AND)
[項目] $Record > 取引先 ID > 最年長取引先責任者の誕生日(1.で作成した項目)
[演算子] 次の文字列と一致しない
[値] get_Contact 取引先責任者 > 誕生日(③で取得した子レコードの条件となる項目)
・結果を実行するタイミング:条件の要件を満たす場合

⑥[レコードを取得]要素と[決定]要素をコネクタで接続します。
⑦要素から[レコードを更新]をドラッグし以下のとおり設定します。
・更新するレコードを検索してその値を設定する方法:
レコードを識別する条件を指定し、項目を個別に設定
・オブジェクト:取引先(親オブジェクト)
・レコードを絞り込み:[レコードを更新する条件の要件] すべての条件に一致(AND)
[項目] Id
[演算子] 次の文字列と一致する
[値] $Record > 取引先 ID(開始したレコードの親のID項目)
・項目値をレコードに設定:[項目] OldestContact_Birthdate__c(1.で作成した項)
[値] get_Contact 取引先責任者 > 誕生日
(③で取得した子レコードの条件となる項目)

⑧[決定]要素と[決定]要素をコネクタで接続します。このとき表示される [決定コネクタの結果を選択] 画面で「デフォルトの結果」でない方を選択し[完了]をクリック

5.既存データがある場合はデータローダなどで1.で作成した項目に値を挿入します。

レポートの「AAA通商株式会社」の取引先責任者の一覧を確認し最年長者か確認してみます。ちゃんと最年長の取引先責任者レコードにフラグが立っていることが確認できました。

「AAA通商株式会社」に誕生日が「1970/08/23」のテスト太郎さんを追加して最年長者が変更されるか確認してみます。
テスト太郎さんに変更されました。

この要件は、子レコードに最新かどうかのフラグを持たせレポートの条件に追加することで実現可能です。
特定の子レコードのみ表示させるレポートは、主従関係であれば比較的容易に実装できますが、参照関係、活動(行動、ToDo)の場合は少し設定が複雑になります。
記事が長くなってしまうので、その1では主従関係、参照関係の設定方法を紹介します。
主従関係の設定方法
サンプルでは「取引先ごとの最新の成約商談レコードのみのレポート」を作成します。1.親(主)オブジェクトに取得したい日付の積み上げ集計項目を作成します。
サンプルでは「最新の成約日」の情報が欲しいので、以下のように設定します。
2.子(従)オブジェクトに条件と一致する場合にフラグを立てる数式項目を作成します。
サンプルでは「1.で作成した積み上げ集計項目と完了予定日が一致 かつ 確度が100%」で作成しました。
数式:AND(Account.LastClosedDate__c = CloseDate , Probability = 1 )
【結果確認】
「最新成約フラグがTRUE」のみのレポート結果を確認してみますレポートの「AAA通商株式会社」の商談一覧を確認し最新の成約商談か確認してみます。
ちゃんと最新の成約商談にフラグが立っていることが確認できました。
参照関係の設定方法
サンプルでは「取引先ごとの最年長の取引先責任者のみのレポート」を作成します。タイトルでは”最新”としていますが、最新に限らず特定の日付や値の最大、最小(最少)を条件としてフラグを立てることができます。
サンプルのフローで紹介するのは、参照関係での積み上げ集計項目(最大、最少)の設定方法と同じです。
1.親オブジェクトに条件となる日付を挿入させるための日付項目を作成します。
2.子オブジェクトに条件と一致する場合にフラグを立てる数式項目を作成します。
サンプルでは「1.で作成した日付項目と誕生日が一致 」で作成しました。
数式:Account.OldestContact_Birthdate__c = Birthdate
3.上記1.で作成した項目に自動で値が挿入されるようフローを作成します。
①[レコードトリガフロー] → [次へ]
②開始設定を以下のとおり設定します。
※更新頻度が高いオブジェクトの場合は作成と更新のトリガを分けてフローを作成されることもご検討ください。
・オブジェクト:取引先責任者(子オブジェクト)
・フローをトリガする条件:レコードが作成または更新された
・エントリ条件を設定:[条件の要件] いずれかの条件に一致(OR)
1[項目] Birthdate(条件となる項目)
[演算子] null
[値] False
2[項目] Birthdate(条件となる項目)
[演算子] 変更済み
[値]True
・フローを最適化:アクションと関連レコード
③要素から[レコードを取得]をドラッグし以下のとおり設定します。
・オブジェクト:取引先責任者(子オブジェクト)
・レコードを絞り込み:[条件の要件] すべての条件に一致(AND)
1[項目] Birthdate(条件となる項目)
[演算子] null
[値] False
2[項目] AccountId(親のID項目)
[演算子] 次の文字列と一致する
[値] $Record > 取引先 ID(開始したレコードの親のID項目)
・レコードを並び替え:[並び替え順] 昇順(最小が条件の場合は昇順、最大の場合は降順)
[項目] Birthdate(条件となる項目)
・保存するレコード数:最初のレコードのみ
・レコードデータの保存方法:すべてのデータを自動的に保存
④[レコードを取得]要素をコネクタで接続します。
⑤要素から[決定]をドラッグし以下のとおり設定します。
・結果を実行する条件:すべての条件に一致(AND)
[項目] $Record > 取引先 ID > 最年長取引先責任者の誕生日(1.で作成した項目)
[演算子] 次の文字列と一致しない
[値] get_Contact 取引先責任者 > 誕生日(③で取得した子レコードの条件となる項目)
・結果を実行するタイミング:条件の要件を満たす場合
⑥[レコードを取得]要素と[決定]要素をコネクタで接続します。
⑦要素から[レコードを更新]をドラッグし以下のとおり設定します。
・更新するレコードを検索してその値を設定する方法:
レコードを識別する条件を指定し、項目を個別に設定
・オブジェクト:取引先(親オブジェクト)
・レコードを絞り込み:[レコードを更新する条件の要件] すべての条件に一致(AND)
[項目] Id
[演算子] 次の文字列と一致する
[値] $Record > 取引先 ID(開始したレコードの親のID項目)
・項目値をレコードに設定:[項目] OldestContact_Birthdate__c(1.で作成した項)
[値] get_Contact 取引先責任者 > 誕生日
(③で取得した子レコードの条件となる項目)
⑧[決定]要素と[決定]要素をコネクタで接続します。このとき表示される [決定コネクタの結果を選択] 画面で「デフォルトの結果」でない方を選択し[完了]をクリック
5.既存データがある場合はデータローダなどで1.で作成した項目に値を挿入します。
サンプルの要件では、データローダのエクスポートで以下のSOQLクエリを使用して取引先ごとの取引 先責任者の最小の誕生日(最年長の誕生日)をエクスポートすることができます。 子オブジェクトからエクスポートしたCSVファイルをそのまま親オブジェクトのUpdateファイルとして使用 できます。項目のマッピングで 「AccountId」を親のID、「Min(Birthdate)」を1.で作成した項目 にすれば、既存レコードの一括更新が簡単になります。 サンプルのクエリでは、AccountId・・・親ID項目、 Min(Birthdate) ・・・条件となる子オブジェクト の項目。Maxにすれば最大で取得、 Contact・・・子オブジェクトを指定しています。
WHERE Birthdate != Null GROUP BY AccountId |
【結果確認】
「最年長フラグがTRUE」のみのレポート結果を確認してみます。レポートの「AAA通商株式会社」の取引先責任者の一覧を確認し最年長者か確認してみます。ちゃんと最年長の取引先責任者レコードにフラグが立っていることが確認できました。
「AAA通商株式会社」に誕生日が「1970/08/23」のテスト太郎さんを追加して最年長者が変更されるか確認してみます。
テスト太郎さんに変更されました。
その2へ続く
コメント