SeaForest

[Tableau] datetrunc 함수란 / datetrunc와 datepart 차이 본문

Tableau

[Tableau] datetrunc 함수란 / datetrunc와 datepart 차이

seaforest 2021. 11. 18. 23:08

태블로의 날짜 함수 중 datetrunc에 대한 정리와 태블로를 쓰면서 많이 헷갈렸던 datetrunc와 datepart의 차이점에 대해서 정리해보았다.

 

1. datetrunc 함수란?

  • datetrunc('날짜 부분',[날짜],[주_시작])
  • [날짜]를 '날짜 부분'에 따라 잘라서 반환한 새로운 날짜의 시작일을 반환하는 함수
  • '날짜 부분' : year, quarter, month, week, day 등
  • [주_시작]은 생략하면 데이터 원본에 의해 결정되고 [주_시작]으로 가능한 값은 monday나 tuesday등이 가능
    (참고로 데이터 원본에 대한 날짜는 '데이터 → 날짜 속성'에서 확인 가능)

 

2. 구체적인 예시

(1) 예를 들어 [sample date] = 2021-11-18 이라고 가정하면,,,

함수 구체적인 해석 결과값
datetrunc('month',[sample date]) 2021-11-28이 속한 'month'의 첫 날 2021-11-01
datetrunc('quarter',[sample date]) 2021-11-28이 속한 'quarter'의 첫 날 2021-10-01
datetrunc('year',[sample date]) 2021-11-28이 속한 'year'의 첫 날 2021-01-01

(2) superstore 샘플 데이터

[@datetrunc_sample]
DATE(datetrunc('month',[Order Date]))

주문 날짜(=[Order Date]) 가 2018-01-01 ~ 2018-01-31의 경우 month기준으로 첫 시작일이 모두 2018-01-01이기 때문에 datetrunc('month',[주문 날짜])로 보면 해당 날짜의 데이터가 모두 2018-01-01이라는 날짜 하나로 묶임.

 

[@datetrunc_sample2]
DATE(datetrunc('week',[Order Date]))

현재는 데이터 원본의 '주 시작'을 일요일로 했기 때문에 2021-11-14(일) ~ 2021-11-20(토)까지 그 주의 첫날인 2021-11-14(일)에 묶어서 표현됨.

 

3. datetrunc 함수 활용 예시

(1) 전월 판매 금액 확인

  • '기준 날짜' 필터 만들기
[@전월 매출]
if datetrunc('month',[Order Date])=dateadd('month',-1,[@기준 날짜]) then [Sales] END
[@기준 날짜]
makedate([P_기준 날짜(연도)],[P_기준 날짜(월)],1)
  • 의미 : 필터로 선택한 날짜(=[@기준 날짜])의 '월'에서 -1을 한 경우(=전월)과 동일한 날짜에 해당하는 sales값을 모두 반환

  • 예를 들어 매개변수로 기준 날짜의 연도와 월을 '2021년 2월'로 선택한다면 '전월 Sales'는 '2021년 1월'의 Sales값이 나와야 한다.
  • 2021년 1월의 Sales 합계인 43,971이 나온 원리는 datetrunc 함수로 [Order date]의 2021-01-01 ~ 2021-01-30까지를 2021-01-01로 다 묶은 후 이때의 월(=01)과 매개변수로 변경한 기준 날짜의 월(=01)이 같기 때문에 2021-01-01의 Sales 합계인 43,971을 출력하게 된다.

 

4. datetrunc와 datepart 차이

  • datepart (날짜_부분,날짜,[주_시작])
  • datepart는 날짜의 일부분을 잘라내는 것이라고 생각하면 됨.
  • datepart는 불연속형 날짜에 해당하고 datetrunc는 연속형 날짜에 해당함.
[sample date] 함수 결과값
2021-06-07 datetrunc('month', [sample date]) 2021-06-01
datepart('month', [sample date]) 06
2020-10-28 datetrunc('quarter', [sample date]) 2020-10-01
datepart('quarter', [sample date]) 04 
(10월은 4분기에 속하기 때문)
  • 2020년과 2021년 데이터로 비교

datetrunc 함수를 쓴 경우
datepart 함수를 쓴 경우

datepart의 경우 2020년 1월과 2021년 1월을 모두 합쳐서 한개의 "1월"로 계산하지만 dateparse는 2020년 1월과 2021년 1월을 각각 따로 다른 것으로 계산함.