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

누계/MoM/YoY를 한 번에: 월별 시계열을 ‘읽히는 지표’로 바꾸는 방법

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

개요 - 월 매출처럼 시간이 흐를수록 쌓이는 지표는 "누계(Cumulative)/전월대비(MoM)/전년동기(YoY)" 세 가지만 정리해도 보고 품질이 확 달라집니다. 이 글은 복잡한 차트 없이도 스프레드시트 수식만으로 세 지표를 안정적으로 계산하고, 최초 12개월 공란 처리, 0으로 나누기 방지 같은 실무 함정을 피하는 절차를 안내드립니다.

데이터 받기(바로 실습 가능)

샘플 데이터 설명 — 어떤 컬럼이 있나요?

두 파일은 동일한 월 범위를 다루되, enriched에는 누계/MoM/YoY가 계산되어 있습니다. 표로 구조를 먼저 확인하시고, 필요하신 열만 선택하여 응용하시면 됩니다.

원본 - 06_monthly_sales.csv

컬럼 의미 예시 비고
month 월(문자) 2024-07 YYYY-MM 형식
sales 해당 월 매출 170000 정수(원)

결과 포함본 - 06_monthly_sales_enriched.csv

컬럼 의미 예시 비고
month 월(문자) 2025-03 YYYY-MM
sales 월 매출 215000 정수(원)
cumulative_sales 해당 월까지 누계 2,105,000 앞선 모든 월의 합
MoM 전월 대비 증감률 0.048 소수(퍼센트 서식 권장)
YoY 전년 동월 대비 0.095 첫 12개월은 공란

계산의 뼈대부터 잡겠습니다

월은 반드시 시간순으로 정렬되어 있어야 합니다. 월 값이 텍스트라면 날짜로 변환해 정렬하고, 다시 TEXT(…,"yyyy-mm")로 보여주셔도 좋습니다.

1) 누계(Cumulative)

  • 간단 합산식(표 상단이 2행일 때): =SUM($B$2:B2)B열이 sales 가정
  • 동적 배열(Excel 365): =SCAN(0, sales_range, LAMBDA(a,x, a+x))
  • Sheets 대안: =MMULT( (ROW(B2:B)-ROW(B2)+1>=TRANSPOSE(ROW(B2:B)-ROW(B2)+1))*1 , B2:B ) (범위는 실제 길이에 맞게 제한)

2) 전월대비(MoM)

  • 기본식: =(현재월_sales - 이전월_sales) / 이전월_sales
  • 표 형태: =IFERROR( ([@sales]-OFFSET([@sales],-1,0))/OFFSET([@sales],-1,0) , "" ) — 첫 행은 공란 처리
  • 퍼센트로 보기: 셀 서식을 백분율로 지정하거나 =TEXT(셀,"0.0%")

3) 전년동기(YoY)

  • 기본식: =(현재월_sales - 12개월전_sales) / 12개월전_sales
  • 표 형태: =IFERROR( ([@sales]-OFFSET([@sales],-12,0))/OFFSET([@sales],-12,0) , "" ) — 첫 12행은 공란
  • 월 완전성: 특정 월이 비어 있으면 왜곡됩니다. 빈 월은 0이 아니라 결측으로 다루고 별도 보강을 권장드립니다.

숫자가 틀리지 않도록 하는 작은 습관

  • 정렬이 먼저 — 시계열은 반드시 오름차순으로 정렬해 주세요.
  • 0 나누기 방지 — MoM/YoY 계산에는 IFERROR(…,"") 또는 IF(분모=0,"",…)를 결합해 주세요.
  • 퍼센트 서식 통일 — 수치는 소수, 표시만 %로. 혼용하면 합계·평균 해석이 흔들립니다.
  • 행 삽입 내성OFFSET 대신 INDEX를 쓰면 대량 데이터에서 더 가볍습니다. 예: INDEX(sales,ROW()-ROW(헤더)-12)

현장에서 바로 쓰는 문장화 레시피

숫자를 말로 바꾸면 보고가 쉬워집니다. 예: =TEXT(month,"yyyy-mm")&" 매출 "&TEXT(sales,"#,##0")&"원 ("&IF(MoM="", "전월 비교값 없음", IF(MoM>=0,"▲","▼")&TEXT(ABS(MoM),"0.0%"))&")"

퀵체크(복사해 쓰는 검증 스니펫)

-- 누계 무결성: 마지막 행 누계 = 전체 합
=LAST(cumulative_sales) = SUM(sales)

-- MoM 첫 행 공란 확인
=COUNTBLANK(INDEX(MoM,1))=1

-- YoY 공란 구간(1~12행) 확인
=COUNTBLANK(INDEX(YoY,SEQUENCE(12)))=12

-- 정렬 확인(오름차순)
=MIN( month_num - OFFSET(month_num,-1,0) ) > 0
-- month_num은 =DATEVALUE(month&"-01") 또는 연월 숫자

데이터가 커졌을 때의 운영 팁

수천 행 이상에서는 계산 열을 값으로 확정해 재계산을 줄이시고, 원본(입력)과 파생(계산) 시트를 분리해 단방향 참조로 유지하시면 성능 저하를 예방하실 수 있습니다. 또한 월별 결측을 자동 보강하려면 캘린더 테이블(연-월 목록)XLOOKUP을 사용해 빈 월을 0 또는 공란 규칙에 따라 채우는 방법을 권장드립니다.

마무리 한 줄

누계/MoM/YoY는 단순한 합/차이의 반복이지만, 공란·정렬·서식만 제대로 관리하시면 어디서든 바로 통하는 시계열 리포트를 만드실 수 있습니다. 위의 샘플 CSV와 공식을 그대로 적용해 보시고, 여러분의 데이터 구조에 맞게 열 이름만 바꿔 연결해 보시길 권합니다.