[Tableau 시각화 스터디] 2022 Week2: Can you build a weekly Year-over-year line chart?
작성자 : 15기 염윤석
https://workout-wednesday.com/2022w02tab/
매개변수 만들기> 2021.12.1을 "오늘"로 설정하여 기준 잡기
계산식 필드 만들기 > Norm Date 라는 필드 만들기 > 연속형 변수로 변환
3년치 다른 날짜들을 week 레벨에서 맞춰주기 위함이다.
DATE(
DATEADD('year',
DATEDIFF('year', datetrunc('week',[Order Date],'Monday'), [fake today]),
DATETRUNC('week', [Order Date],'Monday')
)
)
- DATE: 숫자, 문자열 등을 날짜 형식으로 변환
- DATEADD(date_part, interval, date)
date_part 레벨에서 date에 interval만큼의 날짜를 더해서 반환
- date_part : year 레벨
- interval : "fake today" 기준 각 order date에 상응하는 주의 월요일과 차이나는 년수
- date : 각 주문 날짜들의 week 레벨에서의 대표 날짜
즉, 대표날짜에서 기준에서 차이나는 년수만큼 더 해줘서, 3년치 날짜들을 1년 날짜들로 대응시킨다.
- DATEDIFF(date_part, date1, date2, [start_of_week]) : 두 날짜 사이 interval 반환
- date_part : year 레벨
- date1 : 각 order date를 포함하는 week의 월요일 날짜
- date2 : fake today
-> date1, date2 사이 년수를 반환
즉 fake today(기준)에서 각 주문 날짜의 대표날짜들과의 년수 차이
- DATETRUNC(date_part, date, [start_of_week]) : 날짜 반올림 함수
week 레벨에서 각 order Date를 포함하는 week의 월요일 날짜를 반환
즉 각 주문날짜들의 week 레벨에서의 대표 날짜
“Sales Filter”라는 계산식 필터를 통해 21.12.1보다 넘어가는 날짜들은 모두 제외한다. > "필터"로 드레그해서 적용
Sales Filter
[Order Date] <= [fake today]
계산식을 이용하여 fake today를 기준으로 Previous,Current, 2yrs Ago 구별하기→ “Sales Filter”
# 구별하기 위한 filter 계산식 : Periods
if YEAR(DATETRUNC('week', [Order Date],'Monday')) = year([fake today]) then '3'
ELSEIF YEAR(DATETRUNC('week', [Order Date],'Monday')) = year([fake today])-1 then '2'
ELSEIF YEAR(DATETRUNC('week', [Order Date],'Monday')) = year([fake today])-2 then '1'
END
필터 적용 후 -> exlude "NULL" -> 1,2,3만 나타난다.
이후 Period 계산 차원을 색깔에 적용하여 구분하기
별칭 편집으로 label 명을 1,2,3에서 바꿔준다.
**왜 처음부터 계산식에 별칭명을 쓰면 안되는 이유
-> 알파벳 순서대로는 "2yrs Ago"가 맨 처음이기에, 이후, YoY% 구할 때 순서가 바뀌게 된다.
-> 그래서 맞는 순서를 만들기 위해, 1,2,3을 이용한 것이다.
다음 시트를 만들어서 > YoY%를 계산하기 위한 차트를 만든다.
계산된 필드만들기 > Index Sales, Comparison, Sales Difference, YoY% 필드 만들기 > 차트 표에 추가한다.
# YoY calculation
1. Index Sales : 각 Periods의 sales 합계값
SUM([Sales])
2. Comparison
LOOKUP([Index Sales], 1)
- 1 행에서 Index Sales값 반환 = 정확히는 1행 table down 값들 반환
- 전년도 Sales 값 반환
- 한 행씩 down 됐기에 변화정도를 비교할 수 있게 된다.
- Table down이 아니라, Periods를 기준으로 테이블 계산을 하게 하도록 만든다.
(각 주차별로 비교를 해야지 같은 주가 아닌 period간의 계산을 피하기 위함이다.)
3. Sales Differences
[Index Sales] - [Comparison]
4. YoY%
[Sales Difference]/[Comparison]
-> 이후 기본속성 > 숫자 형식 > 백분율 > 소수 점 자리수 1자리로
이후 다시 라인차트 시트로 돌아간다 > 라인차트 마크들에 YoY% 값 표시하기 > Tool Tip부분에 드레그해서 적용한다.
YoY% 필드 > 기본 속성 > 숫자 형식 > 사용자 지정 > ▲0.0%;▼0.0%;0.0%
이후 각 라인차트의 색상을 바꿔준다.
# YoY title 계산 필드 만들기
IIF([Periods] = {min([Periods])},'','YoY%: ')
- Periods가 최소(즉, 1, 2yrs ago)일 경우, ''
- 그 외는 "YoY%: "로 서식 변경
IFF 는 선택지가 두개일 때 사용 가능하다.
이후, 다음과 같이 계산된 필드를 하나 더 만들어서 ToolTip 서식에 적용한다. > 이는 변화율이 없는 2yrs Ago의 경우 YoY%값이 나오지 않게 하기 위함이다.
Tool Tip을 더블클릭해서 서식 내용을 변경한다.
Week of <주(Norm Date)>
Period: <Periods>
Sales: <합계(Sales)>
<특성(YoY Tooltip Title)><집계(YoY%)>
마지막으로 2021.12.1은 수요일이므로 아직 한 주가 채워지지 않은 데이터이므로 이와 같은 경우에 대해 필터를 적용하여 제거한다.
계산된 필드 형성 > Exclude filter > 필터 적용
# 계산식을 이용한 filter 형성: Exclude filter
[답안지 제시]
DATETRUNC('week',[Order Date])<>{MAX(DATETRUNC('week',[fake today]))}
<> = not equal(같지 않음)
- DATETRUNC('week', [Order Date]): 각 주문 날짜를 포함하는 주의 첫날
- DATETRUNC('week',[fake today]): fake today(21.12.1 수요일)를 포함하는 주의 첫날
- max(날짜) : 가장 최근 날짜 -> 왜 쓰는가? : 가장 최근이 월요일 21.11.28을 의미?
날짜가 다른 것들만 가져온다. = 같은 것인 21.11.28 내용은 지운다.
https://public.tableau.com/app/profile/.45985563/viz/wow2022_week2/1?publish=yes
댓글 영역