구글시트 COUNTUNIQUE FILTER에 대해 실무에서 자주 겪는 문제와 해결 방법을 정리했습니다. 구글시트로 대시보드나 운영 원장을 만들다 보면
다음과 같은 요구가 자주 발생한다.
- 특정 조건을 만족하는 데이터 중
- 중복을 제거한 고유 개수만 구하고 싶다
예:
- “체험” 상태이면서
- “종료”된 건만
- 기업 ID의 고유 개수 계산
이때 가장 직관적인 수식은 다음과 같다
=COUNTUNIQUE(FILTER(B:B, D:D="체험", AI:AI="종료"))
하지만 실무에서는
이 수식이 예상과 다르게 동작하는 경우가 많다.
이 글에서는 단순 공식 설명이 아니라
- FILTER의 내부 동작 방식
- COUNTUNIQUE의 중복 판별 기준
- 값이 1만 나오는 이유
- 성능 이슈
- QUERY와의 차이
까지 정리한다.
핵심 정리: ① FILTER의 동작 방식 이해 ② COUNTUNIQUE의 중복 판별 기준 확인 ③ 예상치 못한 오류 원인 분석 및 해결 ④ 성능 최적화 및 QUERY 함수 비교
자주 묻는 질문
Q. 구글시트 COUNTUNIQUE FILTER에서 가장 흔한 실수는?
구글시트 COUNTUNIQUE FILTER 사용 시 가장 흔한 실수는 기본 설정을 확인하지 않는 것입니다. 공식 문서의 기본 예제부터 따라하는 것을 권장합니다.
Q. 이 방법이 최신 버전에서도 동작하나요?
네, 이 글의 내용은 2026년 기준으로 검증되었습니다. 버전 업데이트에 따라 UI가 다를 수 있으니 참고하세요.
FILTER는 “조건 만족 행을 먼저 추출”한다
FILTER는 구글시트에서 특정 조건을 만족하는 데이터의 행을 추출하는 함수이다.
핵심 구조:
=COUNTUNIQUE(FILTER(카운팅범위, 조건1, 조건2))
동작 순서:
- FILTER가 조건에 맞는 행만 추출
- 그 결과 배열을 COUNTUNIQUE에 전달
- 중복 제거 후 개수 반환
즉, 문제의 80%는 COUNTUNIQUE가 아니라
FILTER 단계에서 발생한다.
왜 값이 “1”만 나올까? (실제 원인 분석)
값이 '1'만 나오는 현상은 FILTER 함수 사용 시 발생할 수 있는 일반적인 오류 상황을 의미한다.
2페이지에서 정리된 오류 체크 항목 은
좋은 출발점이지만, 실제 원인을 더 구조적으로 보면 다음과 같다.
📌 원인 ① 실제로 조건을 만족하는 데이터가 1건
실제로 조건을 만족하는 데이터가 1건인 경우는 필터링 조건이 너무 엄격하거나 데이터 자체가 적을 때 발생한다.
먼저 FILTER만 단독 실행:
=FILTER(B:B, D:D="체험", AI:AI="종료")
→ 반환 행 수 확인
📌 원인 ② 조건 열의 데이터 타입 불일치
조건 열의 데이터 타입 불일치는 비교 대상의 형태(텍스트, 숫자, 날짜 등)가 예상과 다를 때 발생하는 오류이다.
“체험”이 텍스트가 아니라
숫자나 날짜로 인식된 경우.
확인:
=ISTEXT(D2)
📌 원인 ③ 숨겨진 공백
숨겨진 공백은 셀 안에 보이지 않는 공백 문자가 포함되어 있어 조건과 정확히 일치하지 않을 때 발생하는 문제이다.
실무에서 가장 흔한 케이스.
“체험 “ (뒤에 공백)
“ 종료” (앞에 공백)
해결:
=COUNTUNIQUE(
FILTER(B:B,
TRIM(D:D)="체험",
TRIM(AI:AI)="종료"
)
)
📌 원인 ④ 조건 열 중 하나가 전부 TRUE/ FALSE
조건 열 중 하나가 전부 TRUE/FALSE인 경우는 필터 조건이 논리적으로 항상 참이거나 거짓이 되어 예상치 못한 결과가 나올 때 발생한다.
AND 조건은 모두 만족해야 한다.
조건 하나라도 잘못 걸리면
결과는 극단적으로 줄어든다.
COUNTUNIQUE가 중복을 판단하는 기준
COUNTUNIQUE가 중복을 판단하는 기준은 값의 동일성을 문자열 기준으로 비교하여 고유한 항목만을 세는 방식이다.
COUNTUNIQUE는
- 완전히 동일한 값
- 문자열 기준 비교
- 대소문자 구분 안 함
예:
“A123”
“a123”
→ 동일값으로 처리됨
이 점은 실무에서 중요하다.
실무에서 더 안전한 패턴
실무에서 더 안전한 패턴은 대량 데이터를 처리할 때 성능 저하를 방지하고 정확성을 높이는 권장 수식 형태를 의미한다.
대량 데이터일 경우
전체 열(B:B, D:D, AI:AI) 참조는 성능 저하 원인이 된다.
권장 패턴:
=COUNTUNIQUE(
FILTER(B2:B1000,
D2:D1000="체험",
AI2:AI1000="종료"
)
)
범위 제한은 성능 안정성에 매우 중요하다.
QUERY 함수와의 비교
=COUNT(QUERY(A:AI,
"SELECT B WHERE D = '체험' AND AI = '종료' GROUP BY B"))
| 특징 | FILTER + COUNTUNIQUE | QUERY 함수 |
|---|---|---|
| 직관성 | 높음 (함수 체인 방식) | 낮음 (SQL 문법 학습 필요) |
| 복잡한 조건 | 제한적 (조건별 인자 추가) | 매우 용이 (SQL WHERE 절 활용) |
| 중복 제거 | COUNTUNIQUE로 명시적 처리 | GROUP BY 절로 명확하게 처리 |
| 대량 데이터 성능 | 범위 제한 필요, 성능 저하 가능성 | 상대적으로 안정적이고 빠름 |
| 외부 데이터 연동 (IMPORTRANGE) | 직접 적용 가능 | 권한 문제 사전 해결 필요 |
✔ FILTER + COUNTUNIQUE 장점
- 직관적
- 수식 이해 쉬움
- 소규모 데이터에 적합
✔ QUERY 장점
- SQL 기반
- 복잡한 조건 처리 용이
- GROUP BY로 중복 제거 명확
- 대량 데이터에 안정적
언제 QUERY가 더 유리한가?
QUERY 함수가 더 유리한 경우는 복잡한 조건, 대량 데이터 처리, 또는 SQL 문법 사용이 익숙할 때이다.
- 조건 3개 이상
- 날짜 조건 포함
- IMPORTRANGE와 결합
- 5,000행 이상 데이터
예:
=COUNT(QUERY(A2:AI1000,
"SELECT B
WHERE D = '체험'
AND AI = '종료'
AND C >= date '2025-01-01'
GROUP BY B"))
IMPORTRANGE와 결합 시 주의
IMPORTRANGE와 결합 시 주의사항은 외부 시트에서 데이터를 가져올 때 발생할 수 있는 권한 문제나 데이터 로딩 지연에 대한 해결책을 포함한다.
기존 글에서도 언급되었듯
접근 권한 승인 없이 QUERY를 먼저 씌우면 오류 발생.
안전 패턴:
- IMPORTRANGE 단독 실행
- 접근 승인 클릭
- 그 후 QUERY 결합
실무 시나리오
📌 시나리오 1 – 채용 전환 수 계산
- 지원자 ID 고유 개수
- 상태 = “합격”
- 채널 = “대시보드”
📌 시나리오 2 – 중복 기업 계약 수 제거
- 계약번호 중복 제거
- 상태 = 종료
- 결제완료 = TRUE
이때 고유 개수 계산이 KPI가 된다.
성능 최적화 팁
✔ 전체 열 참조 지양
성능 최적화 팁은 구글시트 함수 사용 시 계산 속도를 향상시키고 불필요한 리소스 소모를 줄이는 방법들을 제시한다.
✔ 조건 열과 카운트 열 길이 동일
✔ QUERY 사용 시 범위 최소화
✔ TRIM은 필요할 때만 적용
최종 체크리스트
최종 체크리스트는 COUNTUNIQUE FILTER 함수 적용 전후로 점검해야 할 핵심 사항들을 요약한 목록이다.
✔ FILTER 단독 실행 확인
✔ 조건 데이터 타입 점검
✔ 공백 제거 확인
✔ 범위 제한했는가
✔ 대량 데이터라면 QUERY 고려
마무리
조건부 고유 항목 카운팅은
단순 COUNTUNIQUE 문제가 아니라
데이터 필터링 구조 이해 문제다.
값이 이상하게 나오면
COUNTUNIQUE를 의심하지 말고
FILTER 단계부터 점검해야 한다.
이 블로그에서는
구글시트 실무에서 반복적으로 발생하는
데이터 구조 오류를 정리하고 있다.
💬 이 글이 도움이 되셨다면
구글시트 COUNTUNIQUE FILTER 관련 궁금한 점이나 더 알고 싶은 내용이 있다면 댓글로 남겨주세요! 실무에서 겪은 경험을 공유해 주셔도 좋습니다.
