Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

2 つのタイムスタンプ間の営業時間を計算する

公開日: Jun 6, 2023
タスク
2 つのタイムスタンプ間の営業時間を計算する方法 (たとえば、 送信 ([新規]) から完了 ([処理済み]) までの所要時間をタイムスタンプに基づいて計算する)。
 
ステップ
この解決策では、特定のアクションの開始と終了のタイムスタンプがあることを前提とし、ここでは、[Action Start (アクション開始)] と [Action End (アクション終了)] と呼んでいます。  以下のステップは、添付のワークブックに示されています。

ステップ 1:

営業時間の開始と終了をマークするパラメーターを作成します。これにより、必要に応じて営業時間を調整できます。
  1. データ ペインを右クリックして、[パラメーターの作成] を選択します。 
  2. パラメーターに "Day Open Hour (営業開始時間 (時))" という名前を付けて、以下の値を入力し、[OK] をクリックします。 
    • データ型: 整数
    • 許容値: 範囲
    • 最小値:
    • 最大値: 12
    • ステップ サイズ:
  3. データ ペインを右クリックして、[パラメーターの作成] を選択します。
  4. パラメーターに "Day Open Minute (営業開始時間 (分))" という名前を付けて、以下の値を入力し、[OK] をクリックします。 
    • データ型: 文字列
    • 許容値: リスト
    • 値のリスト: "00"、"15"、"30" および "45" 
  5. "Day Close Hour (終業時間 (時))""Day Close Minute (終業時間 (分))" について、上記の 2 つのステップを繰り返します。 
注: 上記のステップは 12 時間表示と、15 分間隔の開始時刻と終了時刻に基づきます。スケジュールの必要に応じて調整してください (1 ~ 12 時の代わりに 0 ~ 24 時、15 分ごとではなく 10 分ごとなど)。 

ステップ 2:

翌営業日に丸める計算を作成します。
  1. [分析] > [計算フィールドの作成] を選択します。
  2. フィールドに "Action Start: Rounded (アクション開始: 丸め完了)" という名前を付け、以下の計算を入力し、[OK] をクリックします。 
     
    IF (DATEPART('hour', [Action Start]) * 60) + DATEPART('minute', [Action Start])  > (60 * (12 + [Day Close Hour]) ) + INT([Day Close Minute])
    THEN
    // created after End of Day so round to start of next business day
    DATEADD('minute', (60 * (24 + [Day Open Hour])) + INT([Day Open Minute]), DATETRUNC('day',[Action Start])) 
    ELSEIF
    (DATEPART('hour', [Action Start]) * 60) + DATEPART('minute', [Action Start])  < (60 * [Day Open Hour]) + INT([Day Open Minute])
    THEN
    // created before Start of Day so round to start of business day
    DATEADD('minute', (60 * [Day Open Hour]) + INT([Day Open Minute]), DATETRUNC('day',[Action Start])) 
    ELSE
    [Action Start]
    END
  3. [分析] > [計算フィールドの作成] を選択し、フィールドに "Action Start: Round to Weekday (アクション開始: 週日に丸める)" という名前を付け、以下の計算を入力し、新しく丸められたタイムスタンプが週末に分類されるかどうかをチェックします。
    IF DATENAME('weekday',[Action Start : Rounded]) = "Saturday" 
    THEN 
    // move to start of day monday by adding two days (48 hrs) and the monday morning hours
    DATEADD('minute', (60 * (48 + [Day Open Hour])) + INT([Day Open Minute]), DATETRUNC('day', [Action Start : Rounded]))
    ELSEIF DATENAME('weekday',[Action Start : Rounded]) = "Sunday" 
    THEN
    // move to start of day monday by adding a day (24 hrs) and the monday morning hours
    DATEADD('minute', (60 * (24 + [Day Open Hour])) + INT([Day Open Minute]), DATETRUNC('day', [Action Start : Rounded]))
    ELSE 
    [Action Start : Rounded]
    END
  4. [Action End] について、上記の 2 つの計算を繰り返します。

手順 3: 

時間の差を見つける計算を作成します。
  1. 以下の計算を作成し、"Start: Time to end of day (開始: 終業までの時間)" という名前を付けます。
    DATEDIFF(  'minute',
        [Action Start: Round to Weekdays], 
        DATEADD('minute', (60 * (12 + [Day Close Hour])) + INT([Day Close Minute]), DATETRUNC('day',[Action Start: Round to Weekdays]))
    )
  2. "Day Open Hour""Minute" で上記の計算を繰り返し、"End: Time from Start Of Day (終了: 営業開始までの時間)" という名前を付けます。
  3. 最終結果を計算するときのために、分、日、および週について 1 つずつ、合計 3 つの DATEDIFF 計算を作成します。
    "DateDiff Days"
    DATEDIFF('day', [Action Start: Round to Weekdays], [Action End : Round to Weekdays])
    "DateDiff minutes"
    DATEDIFF('minute', [Action Start: Round to Weekdays], [Action End : Round to Weekdays])
    "DateDiff weeks"
    DATEDIFF('week', [Action Start: Round to Weekdays], [Action End : Round to Weekdays])
  4. 計算を作成して稼働日あたりの分数を追跡し、それに "minutes per workday (稼働日あたりの分数)" という名前を付けます。
    (60 * (12 + [Day Close Hour (pm)] - [Day Open Hour (am)]) + INT([Day Close Minute (pm)]) - 
    INT([Day Open Minute (am)]))
  5. すべてを組み合わせる 1 つの最終計算を作成します。
     
    IF DATETRUNC('day', [Action Start: Round to Weekdays]) = DATETRUNC('day', [Action End : Round to Weekdays])
    THEN
    // the same day so just return the minutes between the two times on the same day
    [DateDiff minutes]
    ELSEIF DATETRUNC('week', [Action Start: Round to Weekdays]) = DATETRUNC('week', [Action End : Round to Weekdays])
    THEN
    // the two days are in the same week, so add the time on the created day, the time on the end day, plus a full day for each day between
    (([DateDiff days] - 1) * [Minutes per workday] ) + [Start: Time to end of day] + [End : Time from start of day ]
    ELSE
    // the days are in two different weeks, so get the same calc as above, and subtract the weekends between
    // weekends between would be datediff weeks * 2 * work minutes per day
    (([DateDiff days] - 1 - ([DateDiff weeks] * 2)) * [Minutes per workday] ) + [Start: Time to end of day] + [End: Time from start of day ]
    END
その他のリソース
要するに、上記のステップでは、タイムスタンプが通常の営業時間の範囲外の場合、翌営業日の始業時間になるように、すべてのタイムスタンプを丸めます。

この記事についてディスカッションする... フィードバック フォーラム
ナレッジ記事番号

001456485

添付ファイル

DATEDIFF weekends & business hours.twbx

176 KB

 
読み込み中
Salesforce Help | Article