매출 리포트를 만들 때마다 피벗 테이블을 새로 만들고 서식을 손보는 일이 반복되면 관리가 번거롭습니다. 구조가 단순하고 규칙이 뚜렷한 데이터라면, SUMIFS
·COUNTIFS
만으로도 “월 × 카테고리” 요약과 평균단가·주문건수 같은 핵심 지표를 충분히 계산하실 수 있습니다. 이 글에서는 실제로 사용할 수 있는 CSV 샘플과 함께, 피벗 없이도 견고한 집계를 만드는 공식을 안내드립니다.
자료 내려받기
- 상세 데이터(파생 열 포함): 05_sales_enriched.csv
- 예시 요약표(완성본): 05_summary_by_month_category.csv
샘플 데이터 설명: 필드 사전과 예시
상세 데이터에는 일자별 거래가, 요약본에는 월·범주 기준의 합계가 담겨 있습니다. 아래 표로 스키마를 한눈에 확인하실 수 있습니다.
상세 · 05_sales_enriched.csv
컬럼 | 의미 | 예시값 | 형식·비고 |
---|---|---|---|
date |
거래일 | 2025-02-03 |
YYYY-MM-DD |
category |
범주 | B |
A/B/C/D |
qty |
수량 | 4 |
정수 |
price |
단가 | 12000 |
정수(원) |
revenue |
매출액 | 48000 |
qty×price 파생 |
month_end |
월 인덱스 | 2025-02-28 |
EOMONTH(date,0) |
요약 · 05_summary_by_month_category.csv
컬럼 | 의미 | 예시값 | 형식·비고 |
---|---|---|---|
month_end |
월 인덱스 | 2025-02-28 |
YYYY-MM-DD(월말) |
category |
범주 | B |
A/B/C/D |
qty_sum |
수량 합계 | 115 |
정수 |
revenue_sum |
매출 합계 | 1,230,000 |
정수(원) |
orders |
거래 건수 | 31 |
행 수 |
왜 굳이 ‘월말’을 키로 쓰나요?
월을 나타내는 키를 임의 날짜(2025-02-03
등)로 두면 같은 달이라도 서로 다른 값으로 인식될 위험이 있습니다. EOMONTH(date,0)
로 월말을 키로 통일하면 “동일 월=동일 값”이 보장되어 조건 합계가 안정적으로 작동합니다.
만들어보는 요약표: 셀 한 줄씩 따라가기
- 월 인덱스 만들기
상세 데이터에서:=EOMONTH([@date],0)
- 월×범주 매출 합계
=SUMIFS(revenue_range, month_end_range, 기준월, category_range, 기준범주)
- 월×범주 수량 합계
=SUMIFS(qty_range, month_end_range, 기준월, category_range, 기준범주)
- 월×범주 건수(행 수)
=COUNTIFS(month_end_range, 기준월, category_range, 기준범주)
- 평균 단가(선택)
=IFERROR(매출합계/수량합계,"")
— 0으로 나누는 상황을 공란 처리합니다.
실수 줄이는 규칙 몇 가지
- 범위 길이는 반드시 동일 —
SUMIFS
·COUNTIFS
의 모든 조건 범위는 행 수가 같아야 합니다. - 빈값 정책을 문서화 — 데이터가 누락된 경우 0으로 볼지 공란으로 둘지 미리 정해 두시면 해석이 안정적입니다.
- 테이블(표) 사용 — 열 추가·이동에도 참조가 끊어지지 않습니다. 구조적 참조를 권장드립니다.
속도 이슈가 보일 때의 해법
행 수가 커지면 재계산이 느려질 수 있습니다. 완성된 요약 결과는 값으로 확정하고, 원본 상세는 별도 시트에 보관하여 요약 시트 -> 상세 시트 단방향 참조만 남겨두시면 체감 속도가 크게 좋아집니다. 또한 전체 열(A:A
) 대신 실제 데이터 영역(표 범위)만 지정해 주세요.
응용: Top-N와 전년동기
- Top-N 범주 -
=TAKE(SORT(요약범위, 매출합계열, -1), N)
처럼 정렬 후 상위 N개를 취합니다. - 전년동기 비교 - 기준월의 전년 월은
=EDATE(기준월,-12)
. 두 월의 매출 합계를 나란히 조회해 증감률을 계산하시면 됩니다.
검증용 미니 체크
-- 범위 길이 동등성
=ROWS(month_end_range)=ROWS(category_range)=ROWS(revenue_range)
-- 건수 합 검증(월별)
=SUMIFS(orders_range, month_end_range, 기준월) = COUNTIF(month_end_range, 기준월)
-- 평균단가 방어
=IFERROR(매출합계/수량합계,"") -- 수량합계=0이면 공란
정리하며
피벗 없이도 조건 합계만으로 충분히 깔끔한 월간 리포트를 만들 수 있습니다. 핵심은 월말 키의 일관성과 조건 범위 길이 일치, 그리고 빈값 처리 정책입니다. 위의 샘플 CSV를 그대로 가져오셔서 공식을 복사해 보시면, 같은 구조의 실데이터에도 무리 없이 적용되실 겁니다.