상세 컨텐츠

본문 제목

[Tableau 시각화 스터디] WOW 2022 Week 30: Dynamic Dates in a Heatmap

심화 스터디/Tableau 시각화 스터디

by eahcnim 2023. 3. 31. 12:44

본문

작성자: 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

WOW2022 Week 30.xlsx

‘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:
  1. 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
  2. Days
  3. Weeks
  4. 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

관련글 더보기

댓글 영역