Loading

두 타임스탬프 간의 업무 시간 계산

게시 일자: Jun 6, 2023
과업
제출 시점의 타임스탬프([New])와 완료 시점의 타임스탬프([Processed])를 기반으로 소비된 시간을 계산하는 것처럼, 두 타임스탬프 사이의 업무 시간을 계산하는 방법 
 
단계
이 해결 방법에서는 특정 작업의 시작과 끝에 대한 타임스탬프가 있다고 가정합니다. 여기에서는 이를 각각 [Action Start] 및 [Action End]라고 합니다.  아래 단계는 첨부된 통합 문서에 설명되어 있습니다.

1단계:

업무 시간의 시작과 끝을 표시하는 매개 변수를 만듭니다. 이렇게 하면 업무 시간을 필요에 따라 조정할 수 있습니다. 
  1. 데이터 패널에서 마우스 오른쪽 단추를 클릭하고 매개 변수 만들기를 선택합니다. 
  2. 매개 변수 이름을 Day Open Hour로 지정하고 다음 값을 입력한 다음 확인을 클릭합니다. 
    • 데이터 유형: 정수
    • 허용 가능한 값: 범위
    • 최소값:
    • 최대값: 12 
    • 단계 크기:
  3. 데이터 패널에서 마우스 오른쪽 단추를 클릭하고 매개 변수 만들기를 선택합니다.
  4. 매개 변수 이름을 Day Open Minute로 지정하고 다음 값을 입력한 다음 확인을 클릭합니다. 
    • 데이터 유형: 문자열 
    • 허용 가능한 값: 목록 
    • 값 목록: "00", "15", "30" 및 "45" 
  5. Day Close HourDay Close Minute을 사용하여 위 두 단계를 반복합니다. 
참고: 위 단계는 12시간제에 기반하며 시작 및 끝 시간은 15분 간격입니다. 필요한 경우 일정에 맞게 조정합니다(시간에 대해 1~12 대신 0~24 사용, 15분 간격 대신 10분 간격 사용 등). 

2단계:

다음 영업일로 반올림하는 계산을 만듭니다. 
  1. 분석 > 계산된 필드 만들기를 선택합니다.
  2. 필드 이름을 "Action Start: Rounded"로 지정하고 다음 계산을 입력한 다음 확인을 클릭합니다. 
     
    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]에 대해 위 두 계산을 반복합니다.

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. 최종 결과를 쉽게 계산할 수 있도록 분, 일, 및 주에 대해 하나씩 세 개의 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. 모든 계산을 하나로 묶어 최종 계산 하나를 만듭니다.
     
    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
추가 자원
요약하자면 위의 단계에서는 모든 타임스탬프를 반올림하여 정상적인 일별 업무 시간을 벗어나는 경우 다음 영업일의 시작 시간으로 반올림됩니다.

이 문서에 대한 논의... 피드백 포럼
Knowledge 기사 번호

001456485

첨부 파일

DATEDIFF weekends & business hours.twbx

176 KB

 
로드 중
Salesforce Help | Article