Mark Hammer's Blog

SalesforceやTrailheadに関する情報を投稿しているブログです。

週末を表す数式を簡潔に書きたい

「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文字。

f:id:mark-hammer:20201210004551p:plain
WEEKDAY関数とOR関数を使った数式のコンパイラ後のサイズ

1行にしてOR関数を除いた数式のコンパイラ後のサイズは57文字。

f:id:mark-hammer:20201211225627p:plain
1行にしてOR関数を除いた数式のコンパイラ後のサイズ

コンパイラ後のサイズを見ると、1行にしてOR関数を除いた数式の方が使い勝手がよさそうです。

おわりに

WEEKDAY関数とOR関数を使った数式の方が意図は伝わりやすいですので、数式の分かりやすさを取るか、コンパイラ後のサイズを取るかはケースバイケースとなるでしょう。
せっかく検証したので、簡単ですが投稿してみました。