[Tableau 시각화 스터디] WOW 2022 Week 30: Dynamic Dates in a Heatmap
작성자: 17기 강민채
#WOW2022 | Week 30 | Dynamic Dates in a Heatmap
#WOW2022 | Week 30 | Dynamic Dates in a Heatmap – Workout Wednesday
I’ve been wanting to create this challenge for some time, so I’m really glad to finally be releasing it. This challenge was inspired by some work I did last year where a client wanted to be able to visualize the number of hours that their team had spen
workout-wednesday.com
1. Data
‘project hours worked’ 데이터
2. Purpose
- 팀이 여러 프로젝트에 투입한 시간을 시각화
- 사용자가 선택한 날짜 범위에 따라 다른 결과 제공 → 일별/주별/월별 근무시간
3. Requirements
- Dashboard Size: 1200 x 800px
- 2 sheets
- Create a heatmap to show the number of hours/minutes worked per person in a specified Date Level (Days/Weeks/Months)
- Allow users to filter the dates by a specific Date Range
- Make the Date Level dynamic so that users can select from:
- Default, based on Date Range selected: – For a Date Range less than 28 days aggregate by Days – For a Date Range less than 90 days aggregate by Weeks – Otherwise aggregate by Months
- Days
- Weeks
- Months
- Filter by Project
- Format the Date Labels
- Format the Time to display as Hours + Minutes, e.g.: 185 should display as 3h 05
- Create a bar chart for the Total Hours per person (within the selected date range)
- Sort both charts by Total Hours in descending order
- Match tooltips and formatting
4. Process
Bar chart
행: employee name → 정렬 → 필드/내림차순/Minutes
필터: Project → A만 선택 → 워크시트에 적용 → 이 데이터 원본을 사용하는 모든 항목
열: Minutes
- 시간 단위 조정
💡 Number of Hours: floor(SUM([Minutes])/60)
*floor: 숫자 내림해서 표현
💡 Number of Minutes: round( ((sum([Minutes])/60) - [Number of Hours]) *60 )
💡 formatted Time: STR([Number of Hours])+"h "+STR([Number of Minutes])
→ 생성 후 formatted Time만 ‘레이블’에 넣어주기
- '날짜 범위' 선택용 변수 생성(1) 기준 날짜 만들기
💡 Default End Date: {MAX({MAX([Date])})}
→ 안에 있는 max: 가장 최근 날짜 반환하는 역할
→ 밖에 있는 max: 매개 변수 생성 위한 역할
💡 Default Start Date: {max(DATE(DATEADD('day',-14,[Default End Date])))}
→ 데이터 유형 ‘날짜’로 변경
(2) 매개 변수 생성
💡Date Range End
데이터 유형: 날짜
표시 형식:자세한 날짜
통합 문서가 열릴 때의 값: Default End Date
💡Date Range Start
데이터 유형: 날짜
표시 형식:자세한 날짜
통합 문서가 열릴 때의 값: Dafault Start Date
→ 매개 변수 표시
(3) Date Filter
💡 Date Filter:
[Date]>=[Date Range Start]
and
[Date]<=[Date Range End]
→ filter에 넣기 / ‘참’
→ ‘이 데이터 원본을 사용하는 모든 항목’
→ 필터 내의 두 항목 모두 ‘컨텍스트에 추가’ > 여러 개의 필터가 동시에 작용하도록
Heatmap
sheet 2 !
- days level(Default, Days, Weeks, Months)
💡 No of days selected: DATEDIFF('day',{min([Date Range Start])}, {min([Date Range End])})
(1) Default
💡 Date_Day Trunc:
if [No of days selected]<=28 then
DATETRUNC('day',[Date])
elseif [No of days selected]>28 and [No of days selected]<=90 then DATETRUNC('week',[Date])
else DATETRUNC('month',[Date])
END
→ 해당 변수 표현 형식 ‘날짜’로 변경
→ 열에 가져다 두고, ‘정확한 날짜’로 변경
→ 날짜 아무거나 우클릭 > 서식 > [눈금] > 날짜 > 사용자지정 > ddd → ‘Date_Day Trunc’를 불연속형으로 변경
- 매개 변수
💡 Date Level
데이터 유형: 실수(float)
허용 가능한 값: 목록
목록 생성 (1:Default, 2:Day, 3:Week, 4: Month)
- Date Level 통합
💡 sheet_Date_Level
date(CASE [Date Level]
when 1 then [Date_Day Trunc]
when 2 then (DATETRUNC('day',[Date]))
when 3 then (DATETRUNC('week', [Date]))
else (DATETRUNC('month',[Date]))
END)
→ 열에 있는 Date_Day Trunc 위에 덮어 쓰기
→ ‘정확한 날짜’
→ 불연속형
→ 매개변수 3개 모두 ‘매개 변수 표시’
- Date Header
💡 Datename_Day Trunc
if [No of days selected]<=28 then
upper(left(DATENAME('weekday',([sheet_Date_Level])),3))
elseif [No of days selected]>28 and [No of days selected]<=90 then
'w/c'+str(DATEPART('day',[sheet_Date_Level]))+'-'+upper(left(DATENAME('month',(DATETRUNC('week',[sheet_Date_Level]))),3))
else upper(left(DATENAME('month',([sheet_Date_Level])),3))
END
💡 Date Header
str(CASE [Date Level]
when 1 then [Datename_Day Trunc]
when 2 then upper(left(DATENAME('weekday',[sheet_Date_Level]),3))
when 3 then 'w/c'+str(DATEPART('day',[sheet_Date_Level]))+'-'+upper(left(DATENAME('month',(DATETRUNC('week',[sheet_Date_Level]))),3))
else upper(LEFT(DATENAME('month',DATETRUNC('month',[sheet_Date_Level])),3))
END)
Dashboard
- ‘세로’
- ‘빈 페이지’ 2개 (상, 하 구분)
- 상 - 레이아웃: ‘바깥쪽 여백 20’
- ‘가로’를 가운데에 추가 → ‘대시보드 항목 이름 바꾸기’ : Filter Bar
- ‘텍스트’ (점선 나올 때) 맨 위에 추가 → ‘Title’
- ‘텍스트’ (점선 나올 때) 맨 아래에도 추가 → ‘Footer’
- 맨 위 아래 blank는 불필요하니 삭제
- ‘가로’를 footer 위에 (점선 나올 때) 추가 → sheet1, sheet2 차례로 넣어주기 / 제목 숨기기
- bar chart는 머리글 표시 해제, 축도 머리글 표시 해제 bar chart: 레이아웃 → 안쪽 여백 ‘위’만 17 heatmap: 맨 위 레이블 표시 해제
- 두 차트 모두 ‘전체보기’ 후 크기 조정
- bar chart 서식
- line: 격자선/영기준선/축 눈금자 없음
- label: 왼쪽 정렬, 흰색
- ‘Minutes’ 바 지우고, bar chart 더보기에서 필터 → project → 다중 값 드롭다운
- 빈 칸도 선택 표시가 되어야 함 → heatmap sheet 행에 window_sum(sum([Minutes])) 새로 추가 -불연속형으로 변경
- 대시보드 사이즈 1200x800
- Title: # WOW2022-30 | Dynamic Dates to Visualize a Team's Work Hours
5. Dashboard
https://public.tableau.com/views/WOW2022-30/1_1?:language=ko-KR&:display_count=n&:origin=viz_share_link
WOW2022-(30)
WOW2022-(30)
public.tableau.com