Tableau - 값이 없는 데이터를 시트에 표현하고 싶은 경우

new_chall·2021년 3월 7일

Intro

오늘은 태블로의 고질적인 문제점 중 하나인 값이 없는 데이터를 테이블에서 표현되지 않는 점을 해결해 보고자합니다. 여기서 값이 없는 데이터는 Null인 행조차 없는 데이터를 말하는데요. 이 경우, 필터에 따라 테이블의 크기가 자동으로 변환되기 때문에 대시보드의 가시성을 낮추게 됩니다.

상황

다음과 같이 임시 테이블을 생성해 보았습니다.
그림 오른쪽에 있는 Sub-category 필터를 사용하여 Sub-Category(그룹)에서 Copiers만 남기고 나머지 항목을 제거해 보겠습니다.

흔히들 착각하시는 점이 Copier의 2017년 1분기가 NULL이어도 실제 테이블에서는 표현될 것이라는 것입니다. 하지만 위의 그림처럼 태블로에서는 이 점을 표현해주지 못합니다.

이를 보안하기 위해서는 실제 데이터 원본(Raw Dataset)에서도 sales가 NULL인 Row가 있어야합니다. 따라서 이번시간에는 기존 데이터셋을 보완해 줄 수 있는 데이터 셋을 생성해 볼 예정입니다. 사용할 툴은 Tableau Prep이지만, SQL로도 충분히 따라하실 수 있을 거예요!


Join (with Tableau Prep)

Prep을 사용하여 집계, 조인, 유니온 기능을 쉽게 설명드릴거예요.
Prep의 기능은 차후에 설명드리기로 하고, 흐름(노드) 순으로 데이터셋을 만드는 과정을 설명드리겠습니다.

  1. <정리1, 집계1> - 태블로에서 표현하고 있는 행(Segment, Sub-Category)을 집계합니다. 집계값은 Min(1)입니다.
  2. <정리2, 집계2> - 태블로에서 표현하고 있는 열(Ship Date)을 집계합니다. 집계값은 Min(1)입니다.
  3. <조인1> - 집계값(Min(1))으로 두 집계를 조인합니다.
  4. <유니온1> - 기존 Order 데이터 셋과 생성한 데이터셋(정리3)을 조인합니다.
  5. <출력> - 파일을 생성합니다.

상세설명 - 집계1, 집계2, 조인1

집계1과 집계2는 잘 이해가 안되실 것 같아 추가로 설명드리겠습니다.

- 집계1

집계는 SQL의 Group by와 같은 기능인데요.
현재 집계1을 사용하여 태블로에서 사용중인 행의 필드를 집계하고 있습니다.

이 흐름을 SQL로 표현해보자면

SELECT Segment, Sub-Category, min(1)
FROM Orders
Group by Segment, Sub-Category

와 동일하다고 생각하시면 좋을 것 같습니다.

- 집계2

마찬가지로 집계2의 경우, 태블로에서 사용중인 열의 필드를 집계하였습니다.

이 흐름을 SQL로 표현해보자면

SELECT Ship Date, min(1)
FROM Orders
Group by Segment, Sub-Category

와 동일할 것입니다.

- 조인1

집계1, 집계2에서 생성한 집계값(행 수 (집계됨))을 Join절에서 사용하였습니다.

이럴경우, Segment 수 X Sub-Category 수 X Ship Date 수에 만큼의 Row가 생성될 거예요.


결과

성공적으로 2017년 1분기에 빈 셀을 넣을 수 있게 되었습니다.

Zn을 사용하게될 경우, 0을 넣어 훨씬 더 가시적으로 데이터를 볼 수 있게 됩니다.


한계

필터에 Ship Mode라는 필드를 추가적으로 넣어보았습니다.
기존 데이터셋에서 볼 수 없었던 Null 항목이 생성되게 되는데요.
조인절로 생성한 추가 행들이 Ship mode에서는 빈 항목으로 작성되었기 때문에 생겨나는 현상입니다.

해결방안

사용하고 있는 모든 필터들을 집계 1에서 추가로 사용해야 합니다.

이 경우, 기존 데이터 셋에서 Segment 수 X Sub-Category 수 X Ship Date 수 X 필터 1 X 필터 2 X ... 만큼의 행수가 추가되어지니, 데이터의 크기를 고려하여 적용하시는 것을 추천드립니다.

profile
데이터 분석가, 태블로 개발자

0개의 댓글