Salesforceレポートの集計期間単位を、ExcelのWEEKNUM関数のように”第n週”と表示する | 株式会社アースリンク

Engineer Blog開発者ブログ

2021.9.8

Salesforceレポートの集計期間単位を、ExcelのWEEKNUM関数のように”第n週”と表示する

 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つ設定しなければならない

 

以上となります。

ありがとうございました。

 

 

Contact
お問い合わせ

電話番号0120 - 889 - 236

受付時間:平日 9:00-18:00