これを解決するには、参照ポイントから2つの異なる日付の営業日を2回計算し、減算して小数部分を含む営業日数を取得し、営業時間または営業分に簡単に変換できるようにしました。先週の月曜日、たとえば1996年1月1日の営業開始として参照ポイントを選択することで、計算がはるかに簡単になり、Salesforceの数式の制限を回避できます。
例として、D1 = "5/10/201212:49PM"とD2="6/20/201214:19PM"の2つの日付があるとします。私の週の労働時間は5日/週x10時間/日です。「2012-04-0213:00:00」の基準日を任意に選択します。基準日から数えると、D1までは28.682営業日、D2までは57。832営業日です。減算すると、D2とD1の間の29.150営業日の正解が得られます。
Salesforceレコードの経過時間を営業時間(1300 GMTから11時間)で計算する式は次のとおりです。
ROUND(11*(
(5*FLOOR((TODAY()-DATE(1996,01,01))/7) +
MIN(5,
MOD(TODAY()-DATE(1996,01,01), 7) +
MIN(1, 24/11*(MOD(NOW()-DATETIMEVALUE('1996-01-01 13:00:00'), 1)))
))
-
(5*FLOOR((DATEVALUE(CreatedDate)-DATE(1996,01,01))/7) +
MIN(5,
MOD(DATEVALUE(CreatedDate)-DATE(1996,01,01), 7) +
MIN(1, 24/11*(MOD(CreatedDate-DATETIMEVALUE('1996-01-01 13:00:00'), 1)))
))
), 0)
分解してみましょう。2営業日の期間を計算しています。それぞれについて、完全な営業週数、最後の部分的な週内の完全な営業日数、および最後の部分的な日の部分的な営業時間数を数え、それをすべて合計します。
(5*FLOOR((TODAY()-DATE(1996,01,01))/7)
基準点(月曜日である必要があります)からの丸1週間の数をカウントし、それぞれ5営業日をクレジットします。
MOD(TODAY()-DATE(1996,01,01), 7)
過去の部分的な週の余分な丸一日の数をカウントし、それぞれに1日をクレジットします。
24/11*(MOD(CreatedDate-DATETIMEVALUE('1996-01-01 13:00:00'), 1))
営業開始から1日の経過を計算します。モジュラス1は、小数部分だけを返します。24/11を掛けると、これは24時間の端数から11時間の端数の営業日に変換されます(8時間の場合は11ではなく8を使用できます)。
MIN(1, ...)
夕方遅くに簡単に発生する可能性のある小数部分については、1営業日を超えてクレジットしないようにしてください。
MIN(5, ...)
土曜日または日曜日に簡単に発生する可能性のある部分的な作業週について、5営業日を超えてクレジットしないようにしてください。
ROUND(11*(...), 0)
これを営業日から全営業時間に変換します。小数部分を含めて営業日はそのままにしておきます。
まとめ:
- この式は、休日を営業日としてカウントします。私はそれと一緒に暮らすことができます。
- 私たちのタイムスパンが夏時間のシフトと重なる場合、おそらく1時間の休みです。私はそれと一緒に暮らすことができます。
- 月や年を数えないので、うるう年の問題の影響を受けないと思います。
- DATETIMEVALUE()は数式のサイズを大きくしすぎるため、使用しませんでした。
- 上記の式は1,099文字であり、EMEAレコードに別の参照日を使用するのに十分な余地があります。
- 1996年1月1日より前の日付ではこれを使用しませんが、さらに古い月曜日を選択すると正常に機能するはずです。