개요 - 작업 시작과 종료 시각만 정확히 기록되어 있다면, 별도 도구 없이도 처리시간(분)과 다음 작업까지의 대기시간(분)을 산출하실 수 있습니다. 하루를 1로 보는 스프레드시트의 시간 체계를 이용해 분 단위로 환산하고, 첫 행 처리·타임존 혼재·음수 시간 같은 현장 이슈까지 한 번에 정리해 드립니다.
자료 내려받기
- 원본 로그: 04_timeline.csv
- 계산 결과 포함본: 04_timeline_enriched.csv
샘플 데이터 한눈에 보기
아래 표는 두 파일의 구조를 요약한 것입니다. 텍스트형으로 표현된 시각이 섞여 있더라도 먼저 날짜/시간으로 변환만 해 두시면 동일한 공식을 그대로 적용하실 수 있습니다.
원본(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
을 곱하시면 됩니다.
핵심 공식 - 그대로 복사해서 쓰세요
- 시간 파싱(텍스트일 때만)
Excel:=DATEVALUE(LEFT(A2,10))+TIMEVALUE(MID(A2,12,5))
Google Sheets:=VALUE(A2)
(기본 인식이 되면 생략 가능) - 소요 시간(분)
셀 참조형:=(C2-B2)*1440
(B: start, C: end)
표(테이블)형:=([@end_ts]-[@start_ts])*1440
- 대기 시간(분)
셀 참조형:=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)
- SLA 플래그(예: 20분)
=[@duration_min]>20
또는=IF([@duration_min]>20,TRUE,FALSE)
- 표시 형식 통일
=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
)만 참조하게 분리해 두면 병목이 크게 줄어듭니다.
응용 아이디어
- 누적 대기시간 — 작업 순서대로 누계를 만들어 병목 구간을 수치로 보여 주세요(
SCAN
또는 누계 수식). - 근무시간 기준 리드타임 —
NETWORKDAYS.INTL
과 휴일 테이블을 결합하면 주말·공휴일을 제외한 현실적인 리드타임을 얻을 수 있습니다. - 요약 문장 자동화 — “평균 소요 xx분, SLA 초과 yy건(zz%)” 같은 문장을
CONCAT
으로 자동 생성하면 보고가 가벼워집니다.
맺음말
시간 로그는 복잡한 UI 없이도 충분히 분석적 가치를 제공합니다. 위의 샘플 파일과 공식을 그대로 적용하시면 처리·대기·SLA까지 한 번에 계산해 운영 판단에 바로 쓰실 수 있습니다. 필요하시면 귀사 포맷에 맞게 열 이름과 임계값을 재구성해 드리겠습니다.