「Salesforceで、日付が週末か否かを見分ける数式を書きたい。」と言われたとき、どういう数式を書けばよいでしょうか。
WEEKDAY関数とOR関数を使う
一番簡単な方法がこれです。
ヘルプを参考に、date__c
が対象の日付項目とすると
OR( WEEKDAY( date__c ) = 1, WEEKDAY( date__c ) = 7 )
とすれば出来上がりです。
数式を1行にしたい
しかし、これだと対象の項目が増えるごとにOR関数ごと増えていくため、「なんとか1行にできないか」と考えました。
日曜日(1)~土曜日(7)までをしばらく眺めると…。
曜日 | WEEKDAY関数の返り値 | 返り値÷6の余り |
---|---|---|
日曜日 | 1 | 1 |
月曜日 | 2 | 2 |
火曜日 | 3 | 3 |
水曜日 | 4 | 4 |
木曜日 | 5 | 5 |
金曜日 | 6 | 0 |
土曜日 | 7 | 1 |
「WEEKDAY( date__c )
の返り値を6で割ったときに1余れば土日」であることが分かりました。
Salesforceの数式で表すと、以下の通り1行で書くことができました。
MOD( WEEKDAY( date__c ), 6 ) = 1
コンパイラ後のサイズを比べる
合わせて数式のコンパイラ後のサイズを比べてみます。
WEEKDAY関数とOR関数を使った数式のコンパイラ後のサイズは104文字。
1行にしてOR関数を除いた数式のコンパイラ後のサイズは57文字。
コンパイラ後のサイズを見ると、1行にしてOR関数を除いた数式の方が使い勝手がよさそうです。
おわりに
WEEKDAY関数とOR関数を使った数式の方が意図は伝わりやすいですので、数式の分かりやすさを取るか、コンパイラ後のサイズを取るかはケースバイケースとなるでしょう。
せっかく検証したので、簡単ですが投稿してみました。