2

次のような式を使用して、リードの年齢を数分で簡単に計算できます。

ROUND((NOW()-CreatedDate)*1440,0)

しかし、私はその期間の営業時間(実際には分)の部分だけを数えたいと思います。これをSalesforceの数式で実行したい(apexトリガーではない)。私はここここでいくつかのインスピレーションを見つけました。このソリューションの私の優先事項:

  • 5,000文字の制限を下回るSalesforceの数式
  • 任意の2つの日時フィールドを比較します(NOW()とCreatedDateだけではありません)
  • 妥当な許容誤差(+/- 3時間)
  • 週末を無視する
  • 太平洋の午前6時から午後5時(グリニッジ標準時13:00-23:59)以外の時間を無視する
  • 7月4日や12月25日のような特定の休日を無視する(私のニーズには過度に複雑)

平日の数だけを数えたいですか?この数式は、Salesforceサポートの例で提案されているテンプレートの1,685文字と比較して873文字でコンパイルされています(大きなテンプレートを他のコードと組み合わせると、5,000文字の制限を超えると不満を言う人もいます)。

(
    5*FLOOR((TODAY()-DATE(1996,01,01))/7) + 
    MIN(5, MOD(TODAY()-DATE(1996,01,01), 7))
) - (
    5*FLOOR((DATEVALUE(CreatedDate)-DATE(1996,01,01))/7) + 
    MIN(5, MOD(DATEVALUE(CreatedDate)-DATE(1996,01,01), 7))
)

私の答えを読んで、それがどのように機能するか、そして必要に応じて営業時間を計算する方法を学びましょう。

4

4 に答える 4

5

これを解決するには、参照ポイントから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日より前の日付ではこれを使用しませんが、さらに古い月曜日を選択すると正常に機能するはずです。
于 2012-06-20T22:53:48.800 に答える
2

あなたが営業時間を探していたのは知っていますが、営業日数の計算式があることに気づき、2つの日付の間にこの代替の稼働日数(月曜日から金曜日)を投稿すると思いました。

1 +
(
 (EndDate__c - StartDate__c) * 5 -
 (MOD(StartDate__c - DATE(1970,1,4),7) - MOD(EndDate__c - DATE(1970,1,4),7)) * 2
) / 7 -
IF(MOD(EndDate__c - DATE(1970,1,4),7) = 6,1,0) -
IF(MOD(StartDate__c - DATE(1970,1,4),7) = 0,1,0)

このc#式から適応。479文字でコンパイルします。

理論的には、これに加えて1時間の計算をスローして、もちろん時間数を計算することができます。

于 2014-10-23T20:01:16.593 に答える
0

許容誤差の許容誤差を許容できる場合

(createdBy date -1からの稼働日数をカウントします)*(11時間)+(time_now_in_24_hr_format-6)

于 2012-06-20T21:48:18.830 に答える
0

夏時間(arrg)に関するメモ...それを説明することが重要な場合は、IFステートメントを実行します。ソースフィールド(CreatedDateなど)が夏時間の範囲内にある場合は、1つ(調整済み)を使用します。数式のバージョンです。そうでない場合は、未調整のバージョンを使用します。数式のサイズを2倍にしますが、2つのバージョンは1文字か2文字だけ異なるため、かなり単純です。

于 2019-05-07T20:07:19.437 に答える