본문 바로가기
카테고리 없음

이벤트 타임라인 생성: 시작·종료 로그에서 처리·대기시간 뽑기

by 시트자동화 2025. 8. 15.

원본 timeline 데이터 관련 이미지
원본 timeline 데이터

개요 - 작업 시작과 종료 시각만 정확히 기록되어 있다면, 별도 도구 없이도 처리시간(분)과 다음 작업까지의 대기시간(분)을 산출하실 수 있습니다. 하루를 1로 보는 스프레드시트의 시간 체계를 이용해 분 단위로 환산하고, 첫 행 처리·타임존 혼재·음수 시간 같은 현장 이슈까지 한 번에 정리해 드립니다.

자료 내려받기

샘플 데이터 한눈에 보기

아래 표는 두 파일의 구조를 요약한 것입니다. 텍스트형으로 표현된 시각이 섞여 있더라도 먼저 날짜/시간으로 변환만 해 두시면 동일한 공식을 그대로 적용하실 수 있습니다.

원본(04_timeline.csv)

컬럼 의미 예시 비고
job_id 작업 식별자 J1 문자열
start_ts 시작 시각 2025-07-01 09:02 YYYY-MM-DD HH:mm
end_ts 종료 시각 2025-07-01 09:14 YYYY-MM-DD HH:mm

결과 포함본(04_timeline_enriched.csv)

컬럼 의미 예시 비고
job_id 작업 식별자 J1 원본 유지
start_ts 시작 시각 2025-07-01 09:02 원본 유지
end_ts 종료 시각 2025-07-01 09:14 원본 유지
duration_min 소요 시간(분) 12.0 (end_ts−start_ts)×1440
wait_min 다음 작업까지 대기(분) 첫 행 공란, 이후 (현재 start−이전 end)×1440
sla_over SLA 초과 여부 FALSE 임계 20분 예시

왜 ‘1440’이 계속 등장할까요?

스프레드시트에서 날짜/시간은 “하루=1”인 연속 값입니다. 따라서 1시간 = 1/24, 1분 = 1/(24×60)이므로 시간 차이를 으로 바꾸려면 ×24×60 또는 ×1440을 곱하시면 됩니다.

핵심 공식 - 그대로 복사해서 쓰세요

  1. 시간 파싱(텍스트일 때만)
    Excel: =DATEVALUE(LEFT(A2,10))+TIMEVALUE(MID(A2,12,5))
    Google Sheets: =VALUE(A2) (기본 인식이 되면 생략 가능)
  2. 소요 시간(분)
    셀 참조형: =(C2-B2)*1440 (B: start, C: end)
    표(테이블)형: =([@end_ts]-[@start_ts])*1440
  3. 대기 시간(분)
    셀 참조형: =IF(ROW()=2,"",(B2-C1)*1440)
    표형(이전 행의 end_ts 참조): =IF(ROW()=ROW(t[#Headers])+1,"", ([@start_ts]-INDEX(t[end_ts],ROW()-ROW(t[#Headers])-1))*1440)
  4. SLA 플래그(예: 20분)
    =[@duration_min]>20 또는 =IF([@duration_min]>20,TRUE,FALSE)
  5. 표시 형식 통일
    =TEXT([@start_ts],"yyyy-mm-dd hh:mm"), =TEXT([@end_ts],"yyyy-mm-dd hh:mm")

작업 예시로 감각 익히기

첫 행이 09:02 → 09:14라면 소요 시간은 (12분)=0.008333…×1440의 결과와 동일합니다. 둘째 행의 시작이 09:34, 첫 행 종료가 09:14라면 대기 시간은 20분이 됩니다. 이처럼 연속 두 행만 있으면 자연스럽게 대기 구간이 계산됩니다.

현장에서 많이 놓치는 포인트

  • 첫 행 처리 — 이전 작업이 없으므로 wait_min은 공란 또는 0으로 정책을 정해 일관되게 유지해 주세요.
  • 음수 시간 — 종료가 시작보다 빠른 경우는 데이터 오류입니다. 별도 큐로 분리하시길 권장드립니다.
  • 타임존 섞임 — 수집 소스가 여러 개라면 저장 직후 단일 TZ(예: Asia/Seoul)로 변환해 두시는 편이 안전합니다.
  • 텍스트·숫자 혼재 — 날짜/시간이 일부 텍스트라면 ISNUMBER 검사 열을 두고 실패 행만 따로 처리해 주세요.

실무 체크리스트

  • 총 행수·결측 확인: =COUNTA(job_id)=행수, =COUNTBLANK(start_ts)+COUNTBLANK(end_ts)=0
  • 음수 차이 검사: =COUNTIF(duration_min,"<0")=0
  • SLA 초과 비율: =COUNTIF(sla_over,TRUE)/COUNTA(sla_over)
  • 대기 첫 행 정책: ROW=2일 때 wait_min 공란 또는 0으로 고정

규모가 커질 때의 운영 팁

수만 행 이상에서는 계산을 끝낸 뒤 결과를 값으로 확정해 재계산 부하를 낮추시는 편이 좋습니다. 원본 로그는 별도 시트(또는 파일)에, 보고서는 파생 표(duration_min, wait_min, sla_over)만 참조하게 분리해 두면 병목이 크게 줄어듭니다.

응용 아이디어

  1. 누적 대기시간 — 작업 순서대로 누계를 만들어 병목 구간을 수치로 보여 주세요(SCAN 또는 누계 수식).
  2. 근무시간 기준 리드타임NETWORKDAYS.INTL과 휴일 테이블을 결합하면 주말·공휴일을 제외한 현실적인 리드타임을 얻을 수 있습니다.
  3. 요약 문장 자동화 — “평균 소요 xx분, SLA 초과 yy건(zz%)” 같은 문장을 CONCAT으로 자동 생성하면 보고가 가벼워집니다.

맺음말

시간 로그는 복잡한 UI 없이도 충분히 분석적 가치를 제공합니다. 위의 샘플 파일과 공식을 그대로 적용하시면 처리·대기·SLA까지 한 번에 계산해 운영 판단에 바로 쓰실 수 있습니다. 필요하시면 귀사 포맷에 맞게 열 이름과 임계값을 재구성해 드리겠습니다.