메리 크리스마스! 태블로로 구현하는 선물 뽑기 게임

참 다사다난했던 한 해도 막바지에 접어들었습니다. 올해는 거리에 울려퍼지는 크리스마스 음악들을 듣기 어렵게 되었지만, 그래도 ’12월’, ‘연말’ 하면 크리스마스가 가장 먼저 떠오르게 되는 것 같습니다. 어릴적, 산타 할아버지의 방문과 선물을 기대하던 설렘이 떠올라, 태블로로 선물 뽑기 게임을 만들어보았습니다. 우리 회사에서는 연말에 이 게임을 이용해 소소한 선물 뽑기 행사를 할 생각이랍니다.

완성 대시보드

1등부터 4등까지의 선물은 정해져 있습니다. SETTINGS 버튼을 선택하여 1-3등 선물을 받을 사람의 수를 조정하고, 산타의 얼굴 조각을 뒤집으면 선물 결과를 볼 수 있도록 하였습니다. 리셋 버튼을 빼놓을 수 없겠죠.

핵심 시각화 포인트

  1. 산타 그림을 픽셀로 쪼개고, 각 픽셀마다 고유한 좌표를 부여하였습니다.
  2. 선물의 위치는 매 게임마다 달라질 수 있도록 랜덤한 좌표를 부여하였습니다.

데이터 다운로드

santa_dummy_data.xlsx

이미지 다운로드


HOW TO


시트 1 : Santa

1. 픽셀 아트를 구현할 대상 이미지 준비하기

픽셀 아트 형태의 좌표를 구현하기 위해서는 우선 픽셀 아트 형태로 구현되어 있는 이미지를 한 장 준비해야 합니다. 다행히 인터넷에서 25×25칸으로 된 산타 그림을 찾을 수 있었습니다

2. <santa_dummy_data> 엑셀 파일 만들기

이제, 각 한 칸마다 좌표를 부여하기 위한 데이터를 준비해야 합니다. x,y 각각이 1부터 25까지 존재하며, 개별 좌표는 (1,1),(1,2)……..(25,25)까지 총 625개의 결과가 나오게 됩니다. 저는 이를 쉽게 구현하기 위해 우선 dummy_data에 시트 2개를 만들고 각각 x,y의 고유한 결과인 1부터 25를 나열하였습니다.

3. <santa_dummy_data> 조인하여 625개의 좌표 생성하기

시트를 데이터 원본으로 연결하여 조인을 생성합니다. 이 때, 두 좌표 간의 key를 ‘조인 계산 만들기’로 직접 지정합니다. 임의의 상수 ‘a’를 왼쪽 시트 (x)와 오른쪽 시트 (y)에 모두 부여하면 왼쪽에 존재하는 값과 오른쪽에 존재하는 값을 모두 곱하여 결과적으로 25×25만큼 데이터의 개수가 증가하게 됩니다.

4. X, Y 좌표 연속형 차원으로 변환하고 뷰에 추가하기

변환된 x와 y를 모두 ‘연속형 차원’으로 변경한 후, 각각 열/행 선반에 추가하면 총 625개의 마크가 존재하는 것을 볼 수 있습니다

5. 대상 이미지 맵으로 불러오기

태블로에서는 x,y좌표 형태로 차트를 구현할 때 차트의 배경 이미지를 설정할 수 있는 기능이 있습니다. 맵 > 배경 이미지 > 대상 데이터 원본을 선택하는 방법입니다. 1에서 준비했던 대상 이미지를 불러온 다음, x좌표 및 y좌표의 시작과 끝을 1,25로 입력해줍니다.

그런 다음, 워크시트에 미리 뿌려놓은 x,y 개별 마크의 모양을 선택하기 편하도록 사각형으로 변경하고 투명도를 조절하여 배경에 삽입한 그림이 보이도록 조절하였습니다.

6. 컬러별 그룹 만들기

산타 이미지에는 크게 4가지의 색이 있습니다. 빨강, 하양, 검정, 배경색인 회색이죠. 이에 따라 마크의 색상이 달라져야 하는데, 이 부분은 약간의 노동이 필요합니다. 뷰에서 직접 배경 위에 올라간 마크를 선택하여 그룹을 만들어주는 것이죠. 이 때, 그룹의 옵션이 ‘모든 차원’, ‘x’, ‘y’로 세 가지가 제안되는데, 우리는 x 및 y를 결합한 결과에 대해 색상을 부여해야 하므로 ‘모든 차원’ 옵션을 선택합니다.

이를 반복하면 위와 같이 됩니다. 저는 회색 배경색 대신 크리스마스의 상징인 초록색을 선택하였습니다.


시트 2: Presents

이번엔 산타 얼굴 조각을 선택했을 때 나타날 결과, 즉 선물을 각 좌표에 표시해보겠습니다. 이를 위해 시트는 추가로 생성하였습니다.

1. 계산된 필드 만들기 : [RANDOM]

선물의 위치는 게임을 할 때마다 변경되어야 합니다. 태블로에는 숨겨진 함수가 있습니다. RANDOM이라는 함수인데요, 함수 목록에서 노출되지 않지만 계산된 필드 창에 RANDOM() 이라고 입력하면 ‘계산이 유효합니다’라는 결과를 보여줍니다. RANDOM 함수는 0에서 1까지의 범위를 가진 난수를 생성하며, 이 난수 결과는 통합문서를 열 때마다 달라집니다. 결과를 단순화하기 위해 1000을 곱하고 정수화하였습니다.

2. 계산된 필드 만들기 : [Present List]

선물의 개수는 1등,2등,3등,4등이 각각 다릅니다. 예를 들어 1등은 10명, 2등은 150명, 3등은 300명을 주겠다고 했을 때 총 625개의 좌표가 10개, 150개, 300개, 165개로 나뉘어 서로 다른 선물 결과를 가지고 있어야 합니다. 앞서 계산한 [RANDOM]은 1-1000 사이의 숫자 중 하나를 가지고 있습니다. 그런데, RANDOM이기 때문에 동일한 숫자가 N 번 반복해서 나올 수도 있습니다.

태블로의 테이블 계산 함수 중, 숫자의 크기로 순위를 부여하는 함수에는 총 네 종류가 있습니다. RANK, RANK_DENSE, RANK_UNIQUE, RANK_MODIFIED, RANK_PERCENTILE이 그것인데요. 각각 동일한 숫자에 대해 어떤 순위를 부여할지에 대한 로직에 차이가 있습니다. 이 중에서, RANK_UNIQUE를 사용하면 동일한 숫자가 있더라도 모두 고유한 순위를 부여하게 됩니다. 즉, 모든 마크를 1부터 625순위까지 구분할 수 있게 되는 것이죠.

IF RANK_Unique(AVG([RANDOM])) <= 10 THEN 'Wine'
ELSEIF RANK_Unique(AVG([RANDOM])) <=  150+10 THEN 'Coffee'
ELSEIF RANK_Unique(AVG([RANDOM])) <= 300+150+10 THEN 'Chocolate'
ELSE 'X'
END

이를 이용하여, 위와 같이 계산식을 작성하였습니다.

계산 결과를 마크의 모양 선반에 추가하고, 테이블 계산 편집에서 특정 차원을 선택한 후, X, Y 모두 테이블 계산의 범위에 포함시킵니다.

그리고 모양 편집 창에서 미리 추가해놓은 Custom 모양을 각각 부여합니다. 1등에게는 Wine을, 2등에게는 Coffee를, 3등에게는 Coffee를, 나머지에게 꽝이라는 결과를 보여주게 됩니다.


대시보드 만들기

1. Santa 시트와 Present 시트 동일한 위치에 부동으로 추가하기

Santa 시트의 특정 마크를 선택하면 Presents 시트의 결과가 보여야 하므로, 대시보드에서 두 워크시트를 부동으로 추가합니다. 동일한 위치 및 크기로 추가하고, Santa 시트가 Presents 시트보다 상단에 존재하도록 합니다.


Santa 워크시트에 집합을 이용한 필터 추가하기

Santa 시트 뒤에 있는 Presents 시트가 보이려면 Santa 시트에서 선택한 마크 항목이 숨겨져야 합니다. 데이터를 숨긴다는 것은 결과에서 제외된다는 것이며, 필터 옵션을 생각할 수 있습니다. 필터를 동작으로 사용할 때, 선택한 항목을 유지하는 것은 있어도 선택한 항목을 제거하는 동작은 없습니다. 따라서, 집합의 동작을 이용해야 합니다.

1. X 및 Y 결합한 계산된 필드 만들기

집합을 만들기에 앞서, X 및 Y를 결합한 차원을 생성합니다.

2. [X 및 Y (결합)]의 집합 만들기

[X 및 Y (결합)] 에서 집합을 만들어줍니다. 집합의 항목은 어떤 값도 선택하지 않은 상태로 둡니다.

3. [X 및 Y (결합)] 세부정보에 추가하기

집합의 동작을 대시보드에서 실행하려면 대상 워크시트의 뷰에 해당 집합의 항목과 관련한 차원이 추가되어 있어야 합니다. [X 및 Y (결합)]을 세부정보 선반에 추가합니다.

4. [X 및 Y (결합) (집합)] 필터에 추가하기

[X 및 Y (결합) (집합)]을 필터에 추가합니다. 이 때, 집합의 IN 값을 기본으로 선택하여 뷰에서 모든 항목이 제거되는데, 집합의 IN/OUT 항목을 선택하여 OUT을 필터의 항목에 포함하도록 선택합니다.


대시보드 동작 만들기

이제 생성한 집합 값이 Santa 시트의 마크를 선택할 때마다 변경되도록 해주면 됩니다. 대시보드 > 동작 > 집합 값 변경을 이용하여 마크를 선택하면 집합에 추가되어, 즉 IN으로 변경되어 해당 마크가 뷰에서 제거되도록 해보겠습니다.

1. 대시보드 > 동작 > 동작 추가 > 집합 값 변경

대시보드 > 동작 > 동작 추가 > 집합 값 변경을 선택합니다.

2. 집합 값 변경 옵션 설정하기

선택 대상 시트는 Santa 시트이고, 동작 실행 조건은 마우스로 특정 마크를 선택했을 때 입니다. 동작 실행 결과로 집핪 값에 추가하도록 하고, 해당 결과를 유지하도록 하였습니다. 이렇게 설정하면 선택한 마크가 집합의 IN으로 변경되고, 그 결과 Santa 워크시트의 필터 조건에 맞지 않아 뷰에서 제거되게 됩니다.


대시보드 완성

완성 대시보드에서는 1등~3등 선물 대상자의 수를 변경할 수 있는 Settings을 추가하고, 지난 시간에 소개드렸던 조건 초기화 역할을 하는 시트를 추가하여 게임을 반복할 수 있도록 설정하였습니다. 그런데 단점은 이 조건 초기화 버튼은 한 번 선택 시 작동을 하지 않고 두 번 선택해야 작동을 한다는 점입니다. 왜 그런지 이유를 모르겠는데, 혹시 이유를 아시는 분이 있다면 댓글로 남겨주세요.

한 해의 마무리가 다다른 시점에 시의적절한 대시보드 아이디어를 기획하고 소개하게 되어 개인적으로 이 대시보드를 만들면서 상당히 재미있었습니다. 업무 적용 차원에서도 픽셀 아트를 만들기 위해 dummy_data를 만들고 조인하는 방법을 응용하실 측면이 있을 것입니다.

내년엔 거리에서 울려퍼지는 크리스마스 음악과 함께 즐거운 연말을 맞을 수 있기를 기대해봅시다.

댓글 남기기

태블로위키만의 새로운 소식, 놓칠 수 없겠죠?