분명 어제까지 잘 쓰던 DATEPARSE() 함수가 오늘 갑자기 계산식 창에서 보이질 않는다.
혹은 쓰려고 하니 에러가 발생한다. 이럴 때 당황하지 말자. 원인은 딱 하나다.

DATEPARSE() 함수란?
DATEPARSE()는 문자열(String) 데이터를 날짜(Date) 타입으로 변환해 주는 Tableau 전용 함수다.
기본 구문은 아래와 같다.
DATEPARSE(format, string)
인수 설명
| format | 입력 문자열의 날짜 형식 (ISO 8601 기반 패턴) |
| string | 변환할 날짜 문자열 (필드 또는 직접 입력한 값) |
사용 예시:
DATEPARSE("yyyyMMdd", [기준일자])
// "20250101" → 2025-01-01 (Date 타입)
DATEPARSE("yyyy-MM-dd HH:mm:ss", [타임스탬프])
// "2025-01-01 12:34:56" → 2025-01-01 12:34:56 (Datetime 타입)
날짜 포맷은 Java SimpleDateFormat 패턴을 따른다. 실무에서 가장 자주 쓰는 패턴 몇 가지를 정리하면 다음과 같다.
패턴 입력 예시 결과 타입
| yyyyMMdd | 20250101 | Date |
| yyyy-MM-dd | 2025-01-01 | Date |
| yyyy/MM/dd | 2025/01/01 | Date |
| yyyy-MM-dd HH:mm:ss | 2025-01-01 12:34:56 | Datetime |
1. 문제 상황
Tableau에서 DB를 라이브 연결(Live Connection) 했을 때, 계산식 작성 창에서 DATEPARSE()가 아예 보이지 않거나, 함수를 입력해도 에러가 발생하는 현상이다.
처음 겪으면 당황스럽다. 분명히 Tableau 공식 문서에 있는 함수인데, 왜 안 되는 걸까?
2. 원인: DATEPARSE()는 Tableau 전용 함수다
DATEPARSE()는 Tableau 내부 엔진(Hyper)에서만 실행되는 함수다.
라이브 연결 상태에서는 Tableau가 계산식을 DB로 그대로 전달(push-down)한다. 즉, Tableau가 직접 계산하는 게 아니라 DB에 SQL 쿼리를 던지는 구조다. 그런데 DATEPARSE()는 DB에 존재하지 않는 함수이므로, 당연히 에러가 난다.
[라이브 연결 구조]
Tableau 계산식 → SQL 변환 → DB 실행
↑
여기서 DATEPARSE()를 모름 → 에러
[추출 구조]
Tableau 계산식 → Hyper 엔진 실행
↑
DATEPARSE() 사용 가능
이 차이를 이해하면, 해결책도 자연스럽게 두 갈래로 나뉜다.
3. 해결 방법
방법 A: DB 전용 SQL 날짜 변환 함수 사용 (라이브 연결 유지)
라이브 연결을 그대로 유지해야 하는 경우, DB가 이해할 수 있는 날짜 변환 함수를 대신 사용해야 한다.
SAP HANA
TO_DATE('20250101', 'YYYYMMDD')
TO_TIMESTAMP('2025-01-01 12:34:56', 'YYYY-MM-DD HH24:MI:SS')
Tableau 계산식 안에서 위 함수를 직접 쓰거나, RAWSQL_DATE() 함수를 활용해 SQL을 직접 호출할 수 있다.
// Tableau 계산식 안에서 RAWSQL_DATE() 활용 예시
RAWSQL_DATE("TO_DATE(%1, 'YYYYMMDD')", [기준일자])
RAWSQL_DATE()는 Tableau가 SQL을 그대로 DB에 전달하도록 강제하는 함수다. 라이브 연결에서 DB 고유 함수를 써야 할 때 유용하다.
Oracle
TO_DATE('20250101', 'YYYYMMDD')
TO_TIMESTAMP('2025-01-01 12:34:56', 'YYYY-MM-DD HH24:MI:SS')
Oracle도 SAP HANA와 동일하게 TO_DATE(), TO_TIMESTAMP()를 사용한다. Tableau 계산식에서는 아래처럼 쓸 수 있다.
RAWSQL_DATE("TO_DATE(%1, 'YYYYMMDD')", [기준일자])
DB별 날짜 변환 함수 비교
DB 문자열 → 날짜 문자열 → 날짜+시간
| SAP HANA | TO_DATE(str, format) | TO_TIMESTAMP(str, format) |
| Oracle | TO_DATE(str, format) | TO_TIMESTAMP(str, format) |
| MySQL | STR_TO_DATE(str, format) | STR_TO_DATE(str, '%Y-%m-%d %H:%i:%s') |
| PostgreSQL | TO_DATE(str, format) | TO_TIMESTAMP(str, format) |
| SQL Server | CONVERT(DATE, str) | CONVERT(DATETIME, str) |
포맷 패턴은 DB마다 다르다. SAP HANA / Oracle은 'YYYYMMDD' 형식이고, MySQL은 '%Y%m%d' 형식이다. 반드시 해당 DB 문서를 확인하자.
방법 B: 추출(Extract)로 전환
라이브 연결 대신 Tableau Extract(.hyper)를 생성하면, 데이터가 Tableau 엔진(Hyper)으로 로드되면서 DATEPARSE()를 그대로 사용할 수 있다.
Tableau Desktop에서 추출하는 방법:
- 상단 메뉴 데이터 → [데이터 원본 이름] → 데이터 추출
- 추출 옵션 설정 후 저장
- 연결 방식이 추출로 변경되면 DATEPARSE() 사용 가능
단, 실시간 데이터가 필요한 환경에서는 이 방법이 적합하지 않다. 추출은 스냅샷 방식이기 때문에, 추출 시점 이후의 데이터는 반영되지 않는다. Tableau Server에서 일정을 잡아 자동 갱신하는 방식으로 보완할 수 있지만, 갱신 주기만큼의 지연은 감수해야 한다.
4. 정리: 어떤 방법을 선택할까?
상황 권장 방법
| 실시간 데이터가 반드시 필요 | 방법 A (DB 전용 SQL 함수 사용) |
| 실시간성 불필요, 속도 중요 | 방법 B (Extract 추출) |
| DB 함수를 모름 / 개발팀 협력 어려움 | 방법 B 우선 고려 |
| Custom SQL 또는 RAWSQL 사용 가능 | 방법 A (더 유연하게 적용 가능) |
마치며
라이브 연결과 추출의 차이를 이해하면, DATEPARSE() 문제뿐 아니라 Tableau에서 발생하는 다양한 함수 에러의 원인을 빠르게 파악할 수 있다.
DATEPARSE()가 안 된다는 건 Tableau가 잘못된 게 아니라, 내가 Tableau에게 불가능한 걸 시키고 있다는 신호다.
라이브면 DB 함수를, 추출이면 Tableau 함수를. 이 원칙 하나만 기억해도 된다.