여러 프로젝트를 진행하며 고객들이 공통적으로 만족하셨던 부분은 월마감 후 동일한 리포트를 매번 새롭게 만들 필요 없이 손쉽게 기간 데이터를 비교할 수 있다는 점이었습니다.
필터와 매개변수를 활용해 옵션에 따라 기간 데이터의 유연한 비교가 가능합니다. 예를 들어, 당월 데이터를 전월이나 전년 동월과 함께 비교할 수 있습니다.
데이터 마트를 구축해 두면, 월 마감 후 데이터를 새로 데이터를 내려받을 필요 없이 조회일만 바꿔가며 최신 데이터로 리포트를 업데이트할 수 있습니다.
오늘은 이렇게 기간 데이터를 분석할 때 필수적인 날짜 함수에 대해 알아보도록 하겠습니다.
Data
데이터는 태블로 데스크톱에 기본으로 내장되어 있는 ‘슈퍼스토어 – 샘플’을 사용합니다.
* Tableau Desktop 2024.2.1 버전
Tip! 함수 도움말 활용하기
먼저, 태블로가 제공하고 있는 날짜 함수에는 어떤 것들이 있고 문법은 무엇인지 확인해 볼까요? 계산된 필드 만들기 창에서 '세모 아이콘'(▶)을 클릭하면 날짜 함수 목록과 문법을 확인할 수 있습니다. 외워서 사용하실 필요 없습니다. 자주 쓰면 외워지는 법! 함수 도움말 기능의 도움을 받아보세요.
자주 사용하는 날짜 함수 BEST 3 연습하기
태블로 날짜 함수 정리
태블로에서 제공하고 있는 날짜 함수를 정리하면 위 표와 같습니다.
이 중에서 자주 사용하는 날짜 함수 3가지를 연습해 보도록 하겠습니다.
1. DATEPART(날짜 부분, 날짜, [주시작])
주어진 날짜의 부분을 정수로 반환합니다.
원하는 결과
식
결과
반환 자료형
비고
날짜에서 연도만 구하기
DATEPART('year', #2024-09-13#)
2024
정수
YEAR([주문 날짜])와 같은 결과
날짜에서 월만 구하기
DATEPART('month', #2024-09-13#)
9
정수
MONTH([주문 날짜])와 같은 결과
날짜에서 일만 구하기
DATEPART(' day', #2024-09-13#)
13
정수
DAY[주문 날짜])와 같은 결과
다음과 같은 계산된 필드를 만들고 결과를 확인해 보세요.
연도 구하기 DATEPART('year', [주문 날짜]) 월 구하기 DATEPART('month', [주문 날짜] ) 일 구하기 DATEPART(' day', [주문 날짜] )
※ 주의사항
- 날짜 부분은 소문자로 작성합니다.
- 반환한 결과의 자료형이 정수인 경우, 각 일자의 행별 결과가 합산되니 시트에서 차원(불연속형)으로 변경한 뒤 확인해야 합니다.
2. DATETRUNC(날짜 부분, 날짜, [주시작])
날짜에서 지정된 날짜 부분 뒤를 잘라내고, 날짜 부분을 기준으로 시작일을 반환합니다.
원하는 결과
식
결과
반환 자료형
해당 연도의 시작일 구하기
DATETRUNC('year', #2024-09-13#)
2024-01-01
날짜형
해당 분기의 시작일 구하기
DATETRUNC('quarter', #2024-09-13#)
2024-07-01
날짜형
해당 월의 시작일 구하기
DATETRUNC(' month', #2024-09-13#)
2024-09-01
날짜형
다음과 같은 계산된 필드를 만들고 결과를 확인해 보세요.
연도 시작일 DATETRUNC('year',[주문 날짜])
분기 시작일 DATETRUNC('quarter',[주문 날짜])
월 시작일 DATETRUNC('month',[주문 날짜])
3. DATEADD(날짜 부분, 간격, 날짜)
주어진 날짜의 간격에 맞는 새 날짜를 반환합니다. 간격은 ±n으로 기입 가능합니다.
원하는 결과
식
결과
반환 자료형
1년 전 구하기(전년 동일)
DATEADD('year', -1, #2024-09-13# )
2023-09-13
날짜형
6개월 전 구하기(6개월 전 동일)
DATEADD('month', -6, #2024-09-13#)
2024-03-13
날짜형
다음주 구하기(다음주 동요일)
DATEADD('week', 1, #2024-09-13#)
2024-09-20
날짜형
다음과 같은 계산된 필드를 만들고 결과를 확인해 보세요.
1년 전 구하기 DATEADD('year',-1,[주문 날짜])
6개월 전 구하기 DATEADD('month', -6,[주문 날짜])
다음주 구하기 DATEADD('week', 1,[주문 날짜])
날짜 함수 응용하기
이제 위에서 연습한 날짜 함수로 기간별 매출 데이터를 비교해 보도록 하겠습니다.
만들고자 하는 기간 옵션은 다음과 같습니다.
- 연간 : 기준일이 속한 연도와 전년 데이터를 비교합니다.
- 월간 : 기준일이 속한 월과 전월 데이터를 비교합니다.
- 주간 : 기준일이 속한 주와 전주 데이터를 비교합니다.
1. 매개변수 생성하기
1) 먼저, 해당일이 속한 기간이 언제인지 판단하는 기준이 되는 매개 변수를 생성합니다.
데이터 패널에서 '▼' 아이콘을 클릭합니다. 매개 변수 만들기를 선택하고, 다음과 같이 설정합니다.
2) 기간 옵션 선택지 역할을 하는 매개 변수를 생성하고, 다음과 같이 설정합니다.
2. 연간 필드 만들기
기준일을 기준으로 [주문 날짜]가 금년/ 전년 범위 안에 들어오는지 판별합니다.
금년 범위에 들어오면 금년매출, 전년 범위에 들어오면 전년매출을 반환하는 필드를 생성합니다.
[기준일] 이후는 아직 도래하지 않았기 때문에, 기준일 이후의 데이터가 더 있어도 제외시키기 위해 AND 조건을 걸어 FROM ~ TO 형식으로 기간을 판별합니다.
*기준일은 2024-09-13으로 가정합니다.
금년매출(2024-01-01 ~ 2024-09-13) // [주문 날짜]가 [기준일]과 같은 연도(2024)이며, // [주문 날짜]가 [기준일]보다 이전인 경우만 매출 반환 => 금년매출 IF DATEPART('year', [주문 날짜]) = DATEPART('year', [기준일]) AND [주문 날짜] <= [기준일] THEN [매출] END
전년매출(2023-01-01 ~ 2023-09-13) // [주문 날짜]의 연도가 [기준일]의 연도보다 1년 전(2023)이며, // [주문 날짜]가 [기준일]의 1년 전(2023-09-13)보다 이전인 매출 반환=> 전년매출 IF DATEPART('year', [주문 날짜]) = DATEPART('year', [기준일]) - 1 AND [주문 날짜] <= DATEADD('year', -1, [기준일]) THEN [매출] END
3. 월간 필드 만들기
당월매출(2024-09-01 ~ 2024-09-13) // [주문 날짜]와 [기준일]의 연도와 월이 같으며, // [주문 날짜]가 [기준일]보다 이전인 경우만 매출 반환 => 당월매출 IF DATETRUNC('month', [주문 날짜]) = DATETRUNC('month', [기준일]) AND [주문 날짜] <= [기준일] THEN [매출] END
전월매출(2024-08-01 ~ 2024-08-13) // [기준일]의 한달전 날짜를 계산하고 그 달의 첫 번째 날짜를 반환합니다(2024-08-01) // [주문 날짜]가 [기준일]의 한달 전 월 시작일 이후이고 // [주문 날짜]가 [기준일]의 한달 전보다 이전인 경우만 매출 반환 => 전월매출
IF [주문 날짜] >= DATETRUNC('month',DATEADD('month',-1,[기준일])) AND [주문 날짜] <= DATEADD('month',-1,[기준일]) THEN [매출] END
4. 주간 필드 만들기
금주매출(2024-09-09 ~ 2024-09-13) // 월요일을 기준으로 [기준일]이 속한 주차를 계산합니다. // [기준일]과 [주문 날짜]의 주차가 같고, // [주문 날짜]가 [기준일]보다 이전인 경우만 매출 반환 => 금주매출 IF DATEPART('week', [주문 날짜],'monday') = DATEPART('week', [기준일],'monday') AND [주문 날짜] <= [기준일] THEN [매출] END
전주매출(2024-09-02 ~ 2024-09-06) // 월요일을 기준으로 [기준일]이 속한 주차를 계산합니다. // [기준일]에서 1주 전으로 이동한 후, 그 주를 주 단위로 절단합니다. // [주문 날짜]가 [기준일]의 1주 전, 월요일로 시작하는 주와 동일한 주에 있고, // [주문 날짜]가 [기준일]의 1주 전(7일 전) 보다 이전인 경우만 매출 반환 => 전주매출 IF DATETRUNC('week', [주문 날짜],'monday') = DATETRUNC('week', DATEADD('week', -1, [기준일]),'monday') AND [주문 날짜] <= DATEADD('week',-1,[기준일]) THEN [매출] END