태블로를 배울 때 가장 많이 듣는 질문은 “어떤 계산식을 써야 하나요?”입니다. 실무에서 반복적으로 쓰이는 계산식은 의외로 한정적입니다. GDSK 컨설팅·교육 데이터를 바탕으로 현업 활용도가 가장 높은 15개의 계산식을 선정했습니다. 아래의 TOP15-한눈에 보기에는 초급과 중급의 식들이 모두 포함되어 있으나 이번 포스팅에서는 초급자가 반드시 알아야 할 9가지 핵심 내용을 중점으로 정리했습니다.
모든 예제는 태블로 기본 제공 슈퍼스토어(Superstore) 데이터를 기준으로 제작했으니 참고하여 언제든 따라해보실 수 있습니다.
실무 계산식 TOP 15 — 한눈에 보기
초급 9개 + 중급 6개, 총 15개 계산식을 한 표로 정리했습니다. 수식 칸의 코드를 그대로 복사해서 태블로 계산된 필드 편집 창에 붙여넣으면 바로 사용 가능합니다. 순위는 학습의 편의를 돕기 위한 참고용일 뿐 절대적인 중요도를 의미하지는 않습니다. 순위보다는 각 수식이 어떤 비즈니스 질문을 해결하기 위해 존재하는지 이해하는 것이 더 중요합니다.
| 순위 | 레벨 | 이름 | 계산식 |
|---|---|---|---|
| 1 | 초급 | IF 조건문 | IF [Profit] < 0 THEN “손실” ELSEIF [Profit] < 100 THEN “낮음” ELSEIF [Profit] < 500 THEN “중간” ELSE “높음” END |
| 2 | 초급 | 날짜 필터링 (동적·전년) | YEAR([Order Date]) = YEAR(TODAY()) – 1 |
| 3 | 초급 | NULL 처리 (ZN, IFNULL) | ZN(SUM([Profit])) |
| 4 | 중급 | 전년/전월 대비 증감률 (YoY) | ZN((SUM([Sales]) – LOOKUP(SUM([Sales]), -1)) / LOOKUP(SUM([Sales]), -1)) |
| 5 | 초급 | 조건부 합계 | SUM(IF [Discount] > 0 THEN [Sales] END) |
| 6 | 초급 | 문자열 결합 | [Customer Name] + ” (” + [Segment] + “)” |
| 7 | 초급 | 날짜 차이 (DATEDIFF) | DATEDIFF(‘day’, [Order Date], [Ship Date]) |
| 8 | 초급 | 퍼센트 계산 (수익률) | SUM([Profit]) / SUM([Sales]) |
| 9 | 초급 | 순위 매기기 (RANK) | RANK(SUM([Sales])) |
| 10 | 중급 | LOD – FIXED (신규/재구매) | IF [Order Date] = { FIXED [Customer ID] : MIN([Order Date]) } THEN “신규” ELSE “재구매” END |
| 11 | 중급 | 누적 합계 (RUNNING_SUM) | RUNNING_SUM(SUM([Sales])) |
| 12 | 중급 | 이동 평균 (WINDOW_AVG, 3개월) | WINDOW_AVG(SUM([Sales]), -2, 0) |
| 13 | 초급 | 중복 제거 카운트 (COUNTD) | COUNTD([Customer ID]) |
| 14 | 중급 | 상위 N개 필터링 (Top N) | IF RANK(SUM([Sales])) <= [Top N] THEN “Top N” ELSE “기타” END |
| 15 | 중급 | LOOKUP (이전 행 값) | LOOKUP(SUM([Sales]), -1) |
수식의 색상은 태블로 계산된 필드 편집 창에서 실제로 보이는 색상과 동일합니다.
[필드명, 함수·키워드, 문자열, 숫자·연산자]
ㅤ
ㅤ
1위. IF 조건문
새로 만드는 계산식의 약 80%가 IF문에서 출발합니다. 수익 규모별 등급, 할인 여부 분류 등 조건 분기가 필요한 모든 곳에 쓰입니다. 수익이 0보다 작으면 ‘손실’로 처리하거나, 구매 횟수에 따라 ‘VIP’와 ‘일반’고객을 나누는 등 데이터에 특정 조건을 걸어 원하는 그룹으로 분류 할 때 필수적으로 사용합니다.
계산식
IF [Profit] < 0 THEN “손실”
ELSEIF [Profit] < 100 THEN “낮음”
ELSEIF [Profit] < 500 THEN “중간”
ELSE “높음” END
ELSEIF는 위에서부터 순차적으로 조건을 체크하므로 순서가 중요합니다.
조건이 2개뿐이면 IIF([Profit] > 0, “이익”, “손실”)이 더 간결합니다.
ㅤ
ㅤ
2위. 날짜 필터링
‘이번 달만’, ‘작년 데이터만’ 같은 동적 필터는 주간·월간 보고서 자동화의 핵심입니다.
고정 기간
[Order Date] >= #2023-01-01# AND [Order Date] <= #2023-12-31#
동적 기간 (전년)
YEAR([Order Date]) = YEAR(TODAY()) – 1
날짜 리터럴은 반드시 #yyyy-mm-dd# 형식으로 샵(#)으로 감싸야 합니다.
따옴표로 감싸면 문자열로 인식되어 오류가 발생합니다.
ㅤ
ㅤ
3위. NULL 처리
실무 데이터에는 NULL이 반드시 존재합니다. 제대로 처리하지 않으면 집계가 어긋나거나 시각화가 의도와 다르게 표시됩니다.
IFNULL — 일반 필드의 NULL을 대체값으로
IFNULL([Postal Code], 0)
ZN — 집계 필드의 NULL을 0으로 표시
ZN(SUM([Profit]))
월별 매출 같은 시계열 뷰에서 특정 기간에 데이터가 없어 빈칸으로 나올 때, ZN을 씌우면 0으로 채워져 연속된 라인 차트를 만들 수 있습니다.
| 나눗셈 분모에 ZN을 쓰면 안 됩니다 – 흔한 오해: SUM([Profit])/ZN(SUM([Sales])) 이렇게 분모를 ZN으로 감싸서 ‘NULL 방어’를 시도하는 경우가 많습니다. – 문제점: ZN은 NULL을 0으로 바꾸기 때문에, 분모가 NULL이면 0이 되어 ‘0으로 나누기’ 오류가 발생하고 뷰가 * 기호로 깨집니다. – 올바른 방법: 그냥 SUM([Profit])/SUM([Sales])로 쓰면 분모가 NULL일 때 결과도 NULL이 되어 뷰에서 자연스럽게 빈 값으로 처리됩니다. |
ㅤ
ㅤ
5위. 조건부 합계/카운트
‘할인이 적용된 주문의 매출’, ‘손실 주문의 개수’처럼 특정 조건의 데이터만 집계할 때 사용합니다.
조건부 합계
SUM(IF [Discount] > 0 THEN [Sales] END)
조건부 카운트
COUNT(IF [Profit] < 0 THEN [Order ID] END)
핵심은 ELSE를 생략하는 것입니다.
ELSE가 없으면 조건에 맞지 않는 행은 NULL이 되고, 집계 함수는 NULL을 무시합니다.
ㅤ
ㅤ
6위. 문자열 결합
+ 연산자로 여러 문자열 필드를 하나로 이어 붙이는 함수입니다. 고객명·세그먼트처럼 별도 필드에 나뉜 정보를 하나의 레이블로 합치거나, 숫자 필드를 STR()로 변환해 단위까지 포함한 텍스트를 만들 수 있습니다. 툴팁과 레이블을 풍성하게 만들 때 가장 자주 쓰입니다.
기본
[Customer Name] + ” (” + [Segment] + “)”
→ 결과: Claire Gute (Consumer)
숫자 포함 (STR 변환 필수)
“매출: “ + STR(ROUND(SUM([Sales]), 0)) + “원”
ㅤ
ㅤ
7위. 날짜 차이 (DATEDIFF)
두 날짜의 간격을 계산합니다. 슈퍼스토어에서는 배송 소요일 분석에 가장 많이 쓰입니다.
DATEDIFF(‘day’, [Order Date], [Ship Date])
첫 번째 인자에 ‘day’, ‘week’, ‘month’, ‘quarter’, ‘year’ 등의 단위를 지정합니다.
가입 경과 개월, 근속 연수, 분기 경과 등 다양한 시나리오에 응용됩니다.
ㅤ
ㅤ
8위. 퍼센트 계산
수익률, 비중, 달성률 등 모든 비율 지표의 기본입니다. 계산식 작성 후 ‘서식 → 숫자 → 백분율’로 설정하면 자동으로 %가 표시됩니다.
수익률
SUM([Profit]) / SUM([Sales])
전체 대비 비중
SUM([Sales]) / TOTAL(SUM([Sales]))
TOTAL 함수는 뷰 전체 또는 파티션 전체의 합계를 반환합니다.
ㅤ
ㅤ
9위. 순위 매기기 (RANK)
매출 상위 제품, 이익 하위 고객 등 순위 기반 분석에 사용합니다. 테이블 계산이므로 뷰의 차원 구성과 계산 방향에 따라 결과가 달라집니다.
RANK(SUM([Sales]))
RANK 계열 비교 (값: 100, 90, 90, 80)
| 함수 | 결과 | 특징 |
| RANK | 1, 2, 2, 4 | 동점 후 순위 건너뜀 |
| RANK_DENSE | 1, 2, 2, 3 | 동점 후 연속 순위 |
| RANK_UNIQUE | 1, 2, 3, 4 | 동점 허용 없음 |
ㅤ
ㅤ
13위. 중복 제거 카운트 (COUNTD)
데이터의 개수를 셀 때, 태블로에서는 질문의 의도에 따라 두 가지 함수를 명확히 구분하여 사용해야 합니다.
– 전체 건 수를 알고 싶을 때: COUNT
데이터에 기록된 내역을 하나도 빠짐 없이 전부 세고 싶을 때 사용합니다.
ex) 해당 지점에 총 몇 건의 주문(영수증)이 발생했나요?
– 중복 없는 고유한 개수를 알고 싶을 때: COUNTD
같은 데이터가 여러 번 반복되더라도 중복을 제외하고 딱 1번만 계산하여, ‘진짜 사람 수’나 ‘고유한 종류’를 알고 싶을 때 사용합니다. (D=Distinct)
ex) 해당 지점에서 물건을 구매한 ‘고객’은 총 몇 명인가요?
COUNTD([Customer ID])
예를 들어 주문 5건이 모두 고객 2명(Alice, Bob)에게서 나왔다면, COUNT는 5이고 COUNTD는 2입니다.
ㅤ
ㅤ
이상으로 태블로에서 가장 빈번하게 활용되는 초급 계산식 9가지를 정리했습니다. 해당 수식들은 조건 분류, 결측값 처리, 기초적인 집계 등 데이터 처리와 기본 지표 생성에 사용됩니다. 이어지는 다음 포스팅에서는 전년 대비 증감률, 누적 합계, 신규 및 재구매 고객 분류 등 조금 더 복잡한 비즈니스 요건을 구현하는데 필요한 중급 계산식 6가지를 다뤄보겠습니다.