2021.9.8
Salesforceレポートの集計期間単位を、ExcelのWEEKNUM関数のように”第n週”と表示する方法について記載します。
レポートにて、サマリーやマトリックス形式を選択し、日付項目でグルーピングすると、集計期間単位が選択できます。そこで、”週”を選択すると、”YYYY/MM/DD – YYYY/MM/DD”といった形式になってしまいます。
これをExcelのWEEKNUM関数のように、”第n週”と表示されるようにします。(今回は、商談の完了予定日を使用します)
↑完了予定日:2019/09/01 – 2019/09/07 のように集計される
まず、対象オブジェクトに下の画像のように、対象となる日付の年月の1日が何曜日かを計算する数式項目と、対象日付が”第n週”と表示されるテキスト項目を作成します。
数式
IF ( NOT ( ISBLANK ( 日付 ) ), CASE ( MOD ( DATE ( YEAR ( 日付 ), MONTH( 日付 ), 1 ) – DATE ( 1900, 1, 7 ), 7 ), 0, “日”, 1, “月”, 2, “火”, 3, “水”, 4, “木”, 5, “金”, “土”), “”)
↑画像左:月初曜日 画像右:第n週
次に、プロセスビルダーを開き、対象オブジェクトを選択して条件は特に指定せずに、ルール適用時のアクションを全曜日分の7つ追加していきます。
レコードを絞り込む条件として、月初曜日が何曜日になっているかを確認します。そして、下記の各数式の値を第n週に入力されるようにします。(今回は、月曜日が週1日目になるように設定しています)
週1日目
CASE(1,
IF(AND(DAY([オブジェクト].日付)>= 1,DAY([オブジェクト].日付)<= 7),1,2),”第1週”,
IF(AND(DAY([オブジェクト].日付)>= 8,DAY([オブジェクト].日付)<= 14),1,2),”第2週”,
IF(AND(DAY([オブジェクト].日付)>= 15,DAY([オブジェクト].日付)<= 21),1,2),”第3週”,
IF(AND(DAY([オブジェクト].日付)>= 22,DAY([オブジェクト].日付)<= 28),1,2),”第4週”,
“第5週”
)
週2日目
CASE(1,
IF(AND(DAY([オブジェクト].日付)>= 1,DAY([オブジェクト].日付)<= 6),1,2),”第1週”,
IF(AND(DAY([オブジェクト].日付)>= 7,DAY([オブジェクト].日付)<= 13),1,2),”第2週”,
IF(AND(DAY([オブジェクト].日付)>= 14,DAY([オブジェクト].日付)<= 20),1,2),”第3週”,
IF(AND(DAY([オブジェクト].日付)>= 21,DAY([オブジェクト].日付)<= 27),1,2),”第4週”,
“第5週”
)
週3日目
CASE(1,
IF(AND(DAY([オブジェクト].日付)>= 1,DAY([オブジェクト].日付)<= 5),1,2),”第1週”,
IF(AND(DAY([オブジェクト].日付)>= 6,DAY([オブジェクト].日付)<= 12),1,2),”第2週”,
IF(AND(DAY([オブジェクト].日付)>= 13,DAY([オブジェクト].日付)<= 19),1,2),”第3週”,
IF(AND(DAY([オブジェクト].日付)>= 20,DAY([オブジェクト].日付)<= 26),1,2),”第4週”,
“第5週”
)
週4日目
CASE(1,
IF(AND(DAY([オブジェクト].日付)>= 1,DAY([オブジェクト].日付)<= 4),1,2),”第1週”,
IF(AND(DAY([オブジェクト].日付)>= 5,DAY([オブジェクト].日付)<= 11),1,2),”第2週”,
IF(AND(DAY([オブジェクト].日付)>= 12,DAY([オブジェクト].日付)<= 18),1,2),”第3週”,
IF(AND(DAY([オブジェクト].日付)>= 19,DAY([オブジェクト].日付)<= 25),1,2),”第4週”,
“第5週”
)
週5日目
CASE(1,
IF(AND(DAY([オブジェクト].日付)>= 1,DAY([オブジェクト].日付)<= 3),1,2),”第1週”,
IF(AND(DAY([オブジェクト].日付)>= 4,DAY([オブジェクト].日付)<= 10),1,2),”第2週”,
IF(AND(DAY([オブジェクト].日付)>= 16,DAY([オブジェクト].日付)<= 17),1,2),”第3週”,
IF(AND(DAY([オブジェクト].日付)>= 18,DAY([オブジェクト].日付)<= 24),1,2),”第4週”,
“第5週”
)
週6日目
CASE(1,
IF(AND(DAY([オブジェクト].日付)>= 1,DAY([オブジェクト].日付)<= 2),1,2),”第1週”,
IF(AND(DAY([オブジェクト].日付)>= 3,DAY([オブジェクト].日付)<= 9),1,2),”第2週”,
IF(AND(DAY([オブジェクト].日付)>= 10,DAY([オブジェクト].日付)<= 16),1,2),”第3週”,
IF(AND(DAY([オブジェクト].日付)>= 17,DAY([オブジェクト].日付)<= 23),1,2),”第4週”,
IF(AND(DAY([オブジェクト].日付)>= 24,DAY([オブジェクト].日付)<= 30),1,2),”第5週”,
“第6週”
)
週7日目
CASE(1,
IF(DAY([オブジェクト].日付)= 1,1,2),”第1週”,
IF(AND(DAY([オブジェクト].日付)>= 2,DAY([オブジェクト].日付)<= 8),1,2),”第2週”,
IF(AND(DAY([オブジェクト].日付)>= 9,DAY([オブジェクト].日付)<= 15),1,2),”第3週”,
IF(AND(DAY([オブジェクト].日付)>= 16,DAY([オブジェクト].日付)<= 22),1,2),”第4週”,
IF(AND(DAY([オブジェクト].日付)>= 23,DAY([オブジェクト].日付)<= 29),1,2),”第5週”,
“第6週”
)
↑7つのアクションの内、月の初めが月曜日だった場合のアクション
7つのアクションを追加し、プロセスビルダーを有効化させ、レポートで第n週の項目をグルーピングすれば完了です。
この時、懸案することとして、日付ではよく出る”うるう年”の問題があるかと思います。しかし、今回の算出方法は、対象日付のその月の1日が何曜日であるかが基準になるので、前日が28日でも、29日でも、全く関係ありません。
また、デメリットとしては、既存のレコードに反映させるには、レコードに何か保存の処理をしてプロセスビルダーを実行させるか、第n週項目に値を入力してあげなくてはなりません。
↑設定反映後のレコード
↑設定反映後のレポート
Salesforceレポートの集計期間単位を、ExcelのWEEKNUM関数のように”第n週”と表示する
○まとめ
・メリット
・レポートの集計期間単位で、週ごとの表記を”第1週”といったように表示できる
・週の初めの曜日を自由に設定できる
・デメリット
・既存レコードに反映させる場合、レコードごとに保存処理か直接入力の操作が必要
・プロセスビルダーに追加するアクションが、曜日ごとに計7つ設定しなければならない
以上となります。
ありがとうございました。