[Tableau 시각화 스터디] 2022 Week2: Can you build a weekly Year-over-year line chart?
작성자 : 15기 염윤석
https://workout-wednesday.com/2022w02tab/
WOW2022 Week 2: Can you build a weekly Year-over-Year line chart? – Workout Wednesday
I’m excited to join the Workout Wednesday coaching team this year! For my first challenge, I’m pulling from some recent work experience. Our leadership team wanted to see weekly performance for the week ending Sunday, with the current and prior 2 years
workout-wednesday.com
매개변수 만들기> 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
wow2022_week2
wow2022_week2
public.tableau.com
댓글 영역