본문 바로가기
v3 | Tableau Deep Dive

[3]-1. 조인 (1)

by VizLab 2019. 10. 6.

Dissecting Tableau 세번째 토픽, Manipulating Data 입니다

 

Data Preparation 토픽이 데이터셋 내부에서 지저분한 요소들을 제거하고 정리하는 과정이었다면,

Manipulating Data 토픽은 데이터셋(테이블) 간의 관계를 만들어주는데 초점을 맞추고자 합니다

 

실제 데이터를 취급하는 환경에서 단일 테이블로만 결과를 이끌어낼 수도 있지만,

많은 경우 여러개의 데이터 소스에서 필요한 정보를 가져와 하나의 테이블로 엮어주는 방식이 더 흔한 것 같습니다

 

바로 이 세번째 토픽은 '그러면 데이터를 어떻게 엮을 것인가'에 대한 논의입니다

 

몇 가지 방식 중 이번 포스트에서는 가장 흔하게 사용되는 조인(Join)에 대해서 먼저 살펴보겠습니다

 

 

 

We Are Here


[01] Tableau Fundamentals

[02] Data Preparation

[03] Manipulating Data

     Join

   ▪  Union

   ▪  Blending

[04] Building a Chart

[05] Analytics Pane

[06] Filter

[07] Table Calculation

[08] Parameter

[09] Level of Detail Expressions

[10] Map

[11] Dashboard Rendering

 

 

 

Basics - Inner Join(안쪽 조인) & Outer Join(바깥쪽 조인)


조인과 관련해서는 수많은 참고자료들이 넘쳐나기 때문에 여기에서 그 개념에 대해 설명하는 것은 큰 의미가 없어 보입니다

아울러 이 개념은 태블로에서만 독특하게 사용되는 개념이 아니라, 데이터베이스 영역에서 광범위하게 사용되는 기법이기 때문에

태블로에서 각각의 조인이 데이터를 어떤 방식으로 엮는지만 간략하게 짚고 넘어가도록하죠

 

연습을 위해 가벼운 샘플 데이터셋을 만들어보았습니다

SampleData.xlsx
0.01MB

 

 

먼저 Inner Join 입니다. 테이블 A와 테이블 B가 공통으로 가지고 있는 값을 중심으로 두 테이블을 연결합니다

 

편의상 아래 그림 왼쪽을 테이블 A로 하고, 오른쪽을 테이블 B로 하겠습니다

두 테이블이 공통적으로 가지고 있는 필드는 Name 입니다 (이런 필드를 키 필드라고 부릅니다 :D)

Name을 활용하여 두 개의 테이블을 붙여보겠습니다

 

 

태블로에 위의 엑셀 파일을 불러오면 다음과 같은 화면이 나오게 되죠

왼쪽에 있는 시트에서 Table_A와 Table_B를 차례로 Drag & Drop 해주면 됩니다

 

 

결과는 아래 그림과 같이 테이블 A와 테이블 B 모두에 공통적으로 들어가있는 이름,

즉, Kim과 Lee의 데이터만 나타나게 됩니다, Inner Join이기 때문에 그런 것이지요

 

 

Outer Join도 한 번 살펴보겠습니다

Outer Join에는 Left Outer Join, Right Outer Join, Full Outer Join 세 가지 방식이 있습니다

조인을 수행할 때 어떤 테이블을 기준으로 잡을지에 따라 나뉘게 됩니다

 

Table_A와 Table_B 사이의 가운데 벤다이어그램을 클릭하면 조인의 형태를 바꿀 수 있습니다

 

 

먼저 Left Outer Join의 결과를 보겠습니다

 

 

Table_A에 있는 행은 전부 출력이 되었으나, Table_B에서는 Kim과 Lee의 데이터만 붙어있습니다

Table_B에는 Hwang, Cho, Yoon 세 명의 데이터 없기 때문에 Left Outer Join 결과에 Null이 표시된 것입니다

 

이번에는 Right Outer Join을 해보겠습니다

 

 

조금 전과는 반대로 Table_B가 기준이 되기 때문에

Table_B의 내용은 모두 출력되었으며, Table_A 중에서는 Kim과 Lee의 정보만 표시되고 있습니다

 

사실 왼쪽 조인과 오른쪽 조인은 크게 다를게 없습니다

위의 경우는 Table_A --> Table_B 순서로 올려놓고 오른쪽 조인을 수행한 결과인데,

Table_B --> Table_A 순서로 올린 후 왼쪽 조인을 수행하면 동일한 결과를 얻을 수 있습니다

 

마지막으로 Full Outer Join 결과를 확인해보죠

 

 

Table_A에 있는 모든 필드, Table_B에 있는 모든 필드가 다 나오고 있습니다

값이 없는 곳은 Null로 처리되어 있네요

 

정리해보면,

Inner Join은 왼쪽 테이블과 오른쪽 테이블의 키 필드가 똑같은 행을 반환하고,

Left Outer Join은 왼쪽 테이블은 전부 가져오면서 오른쪽 테이블에서는 키 필드가 일치하는 행만 가지고 오고,

Right Outer Join은 오른쪽 테이블은 전부 가져오면서 왼쪽 테이블에서는 키 필드가 일치하는 행만 가지고 오고,

Full Outer Join은 왼쪽에 있는 모든 행, 오른쪽에 있는 모든 행을 다 가지고 옵니다 :D

 

 

 

몇 가지 체크 포인트


1. 필드는 고유한 값으로 구성되어있어야 한다

 

두 테이블이 공통으로 가지고 있는 값,

두 테이블을 풀칠해서 붙이는데, 풀을 칠해야되는 바로 그 지점(두 테이블이 겹치는 지점)을

우리는 키 필드라고 불렀습니다 (위의 예시에서는 Name 필드)

 

키 필드에 중복된 값이 있을 경우 어떤 결과가 발생하는지 직접 확인해보도록 하죠

 

왼쪽은 Table_C, 오른쪽은 Table_D 입니다

아까와는 달리 Table_D의 Name 필드에서 중복이 발생하고 있습니다

 

 

두 테이블의 Inner Join 결과는 아래와 같습니다

 

 

Table_C의 Kim에서 중복된 데이터가 생성되었습니다

조인 테이블의 Salary를 합산하면, 원래 나와야되는 숫자보다 큰 숫자로 뻥튀기되어 나오겠지요

(11,000이 나와야 되는데, 16,000이 나오게 됩니다)

 

이런 사태를 방지하기 위해서 키 필드는 고유값으로 구성되어 있는지 조인 전에 반드시 확인해야 합니다

 

 

2. 필드의 속성이 동일해야한다

 

왼쪽 테이블과 오른쪽 테이블의 키 필드에서 값이 동일해야할 뿐 아니라, 필드 속성 또한 동일해야 합니다

왼쪽 Table_E의 Date 필드는 날짜로 맞추어져있고, 오른쪽 Table_F의 Date 필드는 문자열로 되어있습니다

 

 

아무런 조치 없이 조인을 바로 수행하면, 아래 그림과 같이 뭔가 문제가 있다고 나옵니다

 

 

위의 그림에 보이듯이 두 개의 Date 필드가 각각 날짜 타입, 문자열 타입을 가지고 있어서 그렇습니다

Table_F의 Date 위쪽에 나와있는 ABC를 눌러서 달력으로 바꾸어볼까요?

이렇게 필드 타입만 가볍게 수정해주면 아래와 같이 문제 없이 연결됩니다

 

 

이렇게 손 쉽게 해결할 수 있는 문제인데, 의외로 이런 경우가 많이 발생하니, 반드시 체크해두시면 좋겠습니다 :D

 

 

3.  필드의 이름이 다른 것은 문제가 되지 않는다

 

키 필드명이 다르면 맞추어주면 될 일입니다. 아주 쉽게 해결할 수 있습니다

Table_A에서 Name 필드명을 Last Name으로 바꾸어준 Table_A-1이 왼쪽입니다

오른쪽 Table_B는 아무런 변화가 없습니다

 

 

Inner Join을 걸어보면, 처음에는 이렇게 문제가 발생합니다

 

 

그런데 아래의 그림처럼 Last Name = Name으로 키 필드를 수동으로 맞춰주면 문제가 말끔히 해결됩니다

 

 

 

4. 이상의 필드를 활용하는 것도 가능하다

 

조인을 위한 키 필드가 1개만 있을 필요는 없습니다

오히려 복수의 키 필드는 데이터 중복을 막을 수도 있지요

여러개의 키 필드를 사용하면 하나의 결합된 필드로서 키 필드의 역할을 한다고 이해하면 쉽습니다

왼쪽과 오른쪽 테이블에서 두 개의 키 필드값이 모두 일치해야 비로소 데이터를 서로 연결하게 되는 것이죠

 

앞서 봤던 Table_C(왼쪽)와 Table_D에서 Department 필드를 추가한 Table_D-1(오른쪽)을 살펴보겠습니다

 

 

앞서 확인한 바로는 Name을 키 필드로 설정했을 경우 왼쪽 테이블에서 중복이 발생하였습니다

 

이번에는 Name 필드와 Department 필드를 함께 키 필드로 설정하여 Inner Join을 만들어보겠습니다

 

 

위의 그림에서 확인되는 것처럼 Name과 Department가 완벽히 일치하는 행만 가져오게 되죠
조인 조건을 조금 더 엄격히 만들면서, 조건에 들어맞는 행이 그만큼 줄어든 것이겠죠

 

 

 

다음 챕터에서는...


많이들 알고 계시는 내용일 것 같아서 가볍게 정리하고 넘어가려고 했는데,

생각보다 내용이 길어져서 부득이 두 개의 콘텐츠로 나누어야겠습니다

이번 포스트가 조인의 일반적인 사용법을 중심으로 살펴봤다면 다음 포스트에서는 조인의 특수한 사용법을 몇 가지 소개하겠습니다

카르테지안 조인(Cartesian Join), 셀프 조인(Self Join) 등의 콘텐츠로 다음 포스트에서 다시 찾아오겠습니다 :D

 

'v3 | Tableau Deep Dive' 카테고리의 다른 글

[3]-2. 유니온  (1) 2019.10.07
[3]-1. 조인 (2)  (3) 2019.10.07
[2]-6. 사용자 지정 SQL  (3) 2019.10.06
[2]-5. Data Prep Hands-On  (1) 2019.10.05
[2]-4. 데이터 원본 필터  (1) 2019.10.05