個人的に、数式の作成には創造性が求められると思っています。
Salesforce社さんで用意してくださっているサンプルなどから、関数と数式の知識を蓄積し、何度も数式を作ってはテストをして、「ここ、こうしたらいけるかも?」という閃きから数式を作ってきました。
インプット + 試行錯誤 + 閃き = 素敵な数式 です。多分。数式に苦手意識がある方に、今日は日付まわりの関数を使った数式の例をご紹介します。日付からその月に日曜日が何回あるかを計算する数式
準備する項目
① 基準となる日付項目を「基準の日付」[BaseDay__c]とする。
② ①の月初の日付を出す数式項目「月初の日付」[FirstDay]を作成。
戻り値のデータ型:日付
数式:DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 1)
③ ①の月末の日付を出す数式項目「月末の日付」[LastDay__c]を作成。
戻り値のデータ型:日付
数式:ADDMONTHS( FirstDay__c ,1) - 1
該当月の日曜日を計算する数式
①②③を使って、4つ目の数式項目「基準の月の日曜日の数」[SunNum__c]を作成。
戻り値のデータ型:数値数式:
4
+ IF( AND( DAY(LastDay__c)>=29, WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 29) ) = 1), 1, 0)
+ IF( AND( DAY(LastDay__c)>=30, WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 30) ) = 1), 1, 0)
+ IF( AND( DAY(LastDay__c)>=31, WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 31) ) = 1), 1, 0)
考え方
どの月でも日曜日は必ず4回はあります。29・30・31日が日曜日になる場合は、さらに1回加わる、という考えで式を作成しました。
これを踏まえて、数式の意味を分解してみます。
4
+ IF( AND( DAY(LastDay__c)>=29, WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 29) ) = 1), 1, 0)
+ IF( AND( DAY(LastDay__c)>=30, WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 30) ) = 1), 1, 0)
+ IF( AND( DAY(LastDay__c)>=31, WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 31) ) = 1), 1, 0)4日曜日は最低4回あります。
+IF( AND( DAY(LastDay__c)>=29,「月末の日付」が29日以上(以降)のとき、次の数値を足します。
WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 29) ) = 1), 1, 0)「基準の日付」の年、基準の日付の月、29日の値から計算した曜日が日曜であれば1、それ以外は0
+IF( AND( DAY(LastDay__c)>=30,「月末の日付」が30日以上(以降)のとき、次の数値を足します。
WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 30) ) = 1), 1, 0)「基準の日付」の年、基準の日付の月、30日の値から計算した曜日が日曜であれば1、それ以外は0
+IF( AND( DAY(LastDay__c)>=31,「月末の日付」が31日以上(以降)のとき、次の数値を足します。
WEEKDAY( DATE( YEAR( BaseDay__c ), MONTH( BaseDay__c ), 31) ) = 1), 1, 0)「基準の日付」の年、基準の日付の月、31日の値から計算した曜日が日曜であれば1、それ以外は0
表示を確認します
2020年11月は
カレンダーを確認すると、2020年11月は日曜日が5回あります。
作成した数式項目でも、5と表示されています。
2021年2月は
カレンダーを確認すると、2021年2月は日曜日が4回あります。
作成した数式項目でも、4と表示されています。
成功です👏
ポイントとなる関数
WEEKDAY(date)(date)には日付項目が入り、その曜日を、1 (日曜日)、2 (月曜日)、~ 7 (土曜日) で返します。
参考
◇ Salesforce >ヘルプ >数式の演算子と関数 A – H◇ Salesforce >ヘルプ >数式の演算子と関数 I – Z