테크놀로지와 데이터

[Tableau] 태블로 날짜 함수와 친해지기

브래키츠 2024. 9. 13. 18:40
Intro

안녕하세요, 디지털 해결소 브래키츠입니다.

여러분은 태블로의 장점하면 어떤 것이 떠오르시나요?

여러 프로젝트를 진행하며 고객들이 공통적으로 만족하셨던 부분은 월마감 후 동일한 리포트를 매번 새롭게 만들 필요 없이 손쉽게 기간 데이터를 비교할 수 있다는 점이었습니다.

 

  • 필터와 매개변수를 활용해 옵션에 따라 기간 데이터의 유연한 비교가 가능합니다.
    예를 들어, 당월 데이터를 전월이나 전년 동월과 함께 비교할 수 있습니다.
  • 데이터 마트를 구축해 두면, 월 마감 후 데이터를 새로 데이터를 내려받을 필요 없이 조회일만 바꿔가며 최신 데이터로 리포트를 업데이트할 수 있습니다.

오늘은 이렇게 기간 데이터를 분석할 때 필수적인 날짜 함수에 대해 알아보도록 하겠습니다.

 

 

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

 

 

5. 당기매출 연결하기

각 옵션별로 당기매출을 반환하는 계산식을 생성합니다.

매개 변수 [비교 기준]에서 '연간'을 선택하면 금년매출, '월간'을 선택하면 당월매출, '주간'을 선택하면 '금주매출을 반환합니다.

// 매개 변수 [비교 기준]에서
// '연간'을 선택하면 [금년매출]
// '월간'을 선택하면 [당월매출]
// '주간'을 선택하면 [금주매출]을 반환합니다.

CASE [비교 기준]

WHEN '연간' THEN [금년매출]
WHEN '월간' THEN [당월매출]
WHEN '주간' THEN [금주매출]
END

 

 

6. 전기매출 연결하기

각 옵션별로 전기매출을 반환하는 계산식을 생성합니다.

// 매개 변수 [비교 기준]에서
// '연간'을 선택하면 [전년매출]
// '월간'을 선택하면 [전월매출]
// '주간'을 선택하면 [전주매출]을 반환합니다.


CASE [비교 기준]
WHEN '연간' THEN [전년매출]
WHEN '월간' THEN [전월매출]
WHEN '주간' THEN [전주매출]
END

 

 

7. 결과 확인하기

이제 결과를 확인할 수 있는 시트를 만들어 보도록 하겠습니다.

 

1) 매개 변수 [기준일]과 [비교 기준]을 표시해 주세요.

 

2) 범주와 하위 범주 순으로 행에  drag&drop 하고, [당기매출]과 [전기매출]을 더블 클릭해서 하위 범주별 기간매출 표를 완성해 줍니다. 시트 제목에 매개 변수를 삽입해서 다음과 같이 만들어 줍니다. '<매개 변수.비교 기준>매출'

 

3) [기준일]과  [비교 기준]을 바꿔가며 기간별 매출이 바뀌는지 결과를 확인해 보도록 하겠습니다.

 

 

 

 

마무리

날짜 함수를 처음 접하시는 분이라면 멘붕이 오셨을 거라 생각됩니다.

저는 함수 중에 날짜 함수가 가장 복잡하고, 직관적으로 이해하기 어려웠던 것 같습니다.. (저도 친해지기 어려웠어요)

다 알아야 하나? 걱정하지 마시고 만들고 싶은 날짜의 결과가 무엇인지 우선적으로 생각해 보세요.

하나씩 살을 붙여 나가는 방식으로 완성해 보시길 바랍니다. 날짜 연습하기처럼 날짜를 하나 올려놓고 계산식을 수정해 가면서요.

 

자주 사용하는 날짜 함수 3가지는 꼭 기억해 주세요!

이 함수들만 마스터해도 웬만한 날짜식은 거의 다 만드실 수 있을 것입니다.

 

오늘도 브래키츠 블로그를 찾아와 주셔서 감사합니다.

여러분에게 유익한 정보가 되길 바라며 흥미로운 태블로 이야기로 또 찾아뵙도록 하겠습니다!