Tableau 레벨UP 강의 정리 (3) Order of Operations

Eunsuh Kim·2022년 10월 16일
0

Tableau

목록 보기
3/5
post-thumbnail

11강 테이블 계산 필터: LAST

Order of Operations란?

계산필터의 작동 순서

계산

  • 측정값 올리면 나타나는 단순한 집계 계산
  • 화면에 올라간 차원과 긴밀히 연계되어 수행되는 테이블 계산
  • 집계의 depth를 VLOD와 다르게 가져갈 수 있는 LOD 표현식

필터

  • 화면 작업을 시작하기도 전에 사용할 수 있는 추출 필터, 데이터 소스 필터
  • 화면을 만드는 단계에서 사용하는 컨텍스트 필터, 차원 필터, 측정값 필터, 테이블 계산 필터
  • 대시보드 화면에서 사용하는 액션 필터

이 모든 계산과 필터들은 태블로에서 정의된 순서대로 작동된다. 따라서 상대적으로 무엇이 먼저 적용되고, 무엇이 나중에 적용되는지 아는 것이 중요하다.

첫번째 미션

2019 - 2022년 Superstore 데이터를 활용하여, 최근 2년 간의 수익(Profit)에 대한 12개월 이동평균을 만들어보세요.

  1. Profit을 행에, Order Date를 연속형으로 열로 올림
  2. 합계(Profit) -> 우클릭>테이블 계산 추가 -> 계산 유형: 이동 계산, 평균, 이전 값 11, 다음 값 0 (현재 값에 체크) (-> 이렇게 해서 총 12개월의 이동평균을 만듦) -> 합계(Profit) ctrl 누른 상태에서 테이블 위에 놓아줌 -> 마크 레이블은 최소/최대, 기준 Order Date로
  3. Order Date -> 필터 위에 놓아주고 -> 연도/월 > 다음 > 2021년 1월~2022년 12월

이 테이블에서는 뭐가 잘못되었는가? 테이블로 표현할 경우

최초 11개월에 대해서는 MA(이동평균) 값이 제대로 만들어지지 않았다.

2021년 1월의 이동평균 값 = 당월 수익 값
2021년 2월의 이동평균 값 = 전월(2021년 1월)과 당월(2021년 2월) 2개월 치의 이동평균
2021년 3월의 이동평균 값 = 2021년 1월부터 2021년 3월, 총 3개월의 이동평균 값이다.
그러나 2021년 1월 이전에도 데이터가 존재한다. (이 데이터는 총 4년)  MA가 만들어지기 전에 MA를 만들기 위해 필요한 값이 필터링되어 빠져나간 것이다.

이 필터의 작동이 이동평균이 계산되기 이전에 일어나서 생긴 문제

테이블 계산식은 작동 순서가 늦은 편.

왼쪽의 집계가 이루어진 후에, 오른쪽의 테이블 계산이 만들어질 수 있다.
구성비율/비율의 차이/랭킹/누적/이동평균 (테이블 계산의 종류) 전부 다 집계가 만들어진 후에 현재의 View에서 다시한번 계산이 일어나는 것.
Order of Operations 관점에서 살펴보면, 차원 필터가 테이블 계산보다 위쪽에 있음. 즉 필터가 우선적으로 적용된다는 의미.

따라서 위 문제를 해결하기 위해서는 위 그림에서 테이블 계산보다 아래에 있어서 작동 우선순위가 테이블 계산보다 낮은 테이블 계산 필터를 사용하면 됨.

날짜(연월)에 대한 차원 필터를 대체할 수 있는 것이 LAST 함수.
LAST 함수를 필터로 활용해 뒤에서부터 24개의 마크를 갖고 옴.

Order Date 차원 필터 밖으로 빼주고 > 계산된 필드 만들기 > LAST() 입력 > 필터 칸으로 빼기 > 값 입력에서 0 = 가장 뒤에 있는 값, 0 기준으로 거꾸로 24개월의 값이 필요하니까 0에서 23으로 설정하면

테이블 계산 결과를 필터링 할 때에는 테이블 계산 필터를 활용하자


12강 테이블 계산 필터: LOOKUP

날짜 차원 필터는 LAST 함수로 해결할 수 있는데, 문자열 차원 필터는 어떻게 계산 필터로 바꿀 수 있는가?

  • 고객별 매출 금액과 그에 따른 순위(테이블 계산)이 나와있는데
    여기에서 10명의 고객을 무작위로 필터링하면 순위가 다시 계산됨.
    그 이유는 필터(고객)가 먼저 적용된 후, 테이블 계산(순위)이 나중에 이루어지기 때문.
  • 전체 범위에서의 순위를 그대로 써주고 싶은데 방법은?

적용되는 원리: 차원 필터를 테이블 계산 필터로 대체.

새로운 테이블 계산 필터를 아래와 같이 만들어 보자

LOOKUP(ATTR([Customer Name]), 0)

-> '고객명이 나열되어 있는 리스트에서 자기 자신의 줄에 있는 그 값, 결국 자기 자신을 가져와라'

Customer Name를 행에, Sales를 열에 놓고, 내림차순 정렬 후에 레이블 붙이기
순위를 매기기 위해서는 INDEX()RANK() 쓰면 됨.
RANK((SUM[Sales])) -> 우클릭 > 불연속형으로 바꿔주고 Customer Name을 앞으로 보내면 순위 만들어짐.

Customer Name을 필터로 올려준 이후 랜덤으로 5명 뽑고 확인 눌러주면, 필터링 먼저 일어나고 그 안에서 RANK 함수가 작동하기 때문에 5명 내에서 순위 다시 매겨짐.

이 사람들이 갖고 있는 전체 순위가 그대로 표시되게 하기 위해서는 Customer Name을 테이블 계산 필터로 바꿔주면 됨.
계산된 필드 만들기 > LOOKUP(ATTR([Customer Name]), 0) 입력 ([Customer Name] 리스트에서, 자기 자신의 줄에 있는 값(0)을 갖고 오라는 것) > 확인 > 해당 계산된 필드를 필터의 Customer Name 아래에 올려서, 모두 선택 > 원래 있었던 Customer Name 필터를 밖으로 빼줌

그러면 전체 범위에서의 순위 적용된 것 확인 가능.
[Customer Name] 앞에 ATTR을 쓰는 이유는 Table 계산 안에 항상 집계값이 들어가야 하는데 차원에 대한 집계값을 만들어 주기 위해서

고객 구분(Segment)으로 필터링했을 때도 순위 유지하려면?

  • VLOD에 포함되어 있지 않은 고객 구분(Segment)으로 필터링 했을 때도 순위를 유지시키는 방법도 앞서 말한 LOOKUP 함수와 동일하다.
이름: Segment - Table Calc Filter
식: LOOKUP(ATTR([Segment]), 0)

Segment 리스트에서 내가 선택한 줄에 있는 그(=자기 자신의) 값을 갖고 오라.
계산된 필드를 화면 위로 올리고 일단 전체 선택 > 확인 위해 우클릭>필터 표시
우측에 나타난 필터에서 Consumer만 남겨보면

전체 범위 순위 유지


13강 액션(차원) 필터와 FIXED LOD

예시

주별 매출을 표현한 지도를 통해 카테고리별 수익률을 필터링하는 대시보드를 만들어보세요. (바 차트의 참조선 값이 바뀌지 않도록 주의하세요.)

지도

State 화면 위로 올리고,
Sales를 색상으로 올려서 주별 매출 표현
(+ 미국 필터 추가)

바 차트

새 시트에
Profit Ratio를 행, Category를 열에 올리기
화면을 돌려주고, 레이블 달아준 후 전체 보기로 맞춰주기
Category를 색상에 집어 넣기
참조선 넣어주기 위해서 분석 탭 > 참조선을 ‘셀’로 집어넣기 > 라인 값: 집계(Profit Ratio), 레이블: 사용자 지정으로 해준 후 National Level = <값>으로 변경

여기에 액션 필터 적용시키기
새 대시보드 > 지도를 화면 위, 바 차트를 화면 아래로
액션 걸어주기 위해서 대시보드 > 동작 > 동작 추가 추가 > 필터 > 지도에서 ‘선택’(작업 실행 조건)을 했을 때 바 차트를 필터링 > 선택 내용을 지울 경우의 결과: 모든 값 표시 선택 > 확인 > 확인
"지도에서 무언가 선택했을 때, 바 차트를 필터링하라. 그리고 선택을 해제하면 모든 값을 표시해달라." 라는 의미이다.

  • 각 주 선택에 따라 National Level의 Profit Ratio가 주의 Profit Ratio에 따라서 다르게 나오고 있음. (참조선 변동)
  • 문제가 있음. 이는 Profit Ratio가 집계 계산이기에 액션 필터보다 작동 순서가 낮기 때문에 발생하는 문제점이다.
    따라서 단순 집계 계산인 Profit Ratio를 액션 필터에 영향을 받지 않는 Fixed LOD 값으로 만들어주어야 한다. 액션 필터보다 작동 우선 순위가 높은 Fixed LOD 참조선을 넣으면, 바 차트는 필터링되지만 참조선(2.6%, 17.2%, 17.4%)은 필터링되지 않는 화면을 만들 수 있음.

이를 위해서 먼저 13강 2로 돌아간 후에 원래 참조선을 우클릭해서 제거하고
계산된 필드 만들기

이름: Profit Ratio by Category
식: { FIXED [Category] : [Profit Ratio] }

Category별로 Profit Ratio를 볼 것이기 때문에 Category로 고정을 시키고 Profit Ratio를 얻게 되어야 함.

위 필드를 참조선으로 넣어주기 위해서는 해당 필드가 화면 안에 있어야 한다. 따라서 Profit Ratio by Category를 ‘세부 정보’로 넣어준 뒤,
분석 탭으로 가서 참조선을 셀 위로 넣어주고 값 > 합계(Profit Ratio by Category), 레이블: 사용자 지정, National Level = <값>

대시보드로 넘어와서

그럼 위와 같이 참조선의 값이 지도 선택에 의한 영향을 받지 않게 된다.
비교 기준선 등 (액션) 필터에 영향을 받지 않는 값이 필요 시 Fixed LOD를 활용하자


14강 컨텍스트 필터

필터 선택(All or 특정 Region)에 따라 차원이 드릴 다운 (Region ▶ State)되는 화면을 만들어보세요.



(ALL) -> [Region], 특정 Region -> [State] 위해서 IF Statement
이것을 계산된 필드로 옮겨 보면 다음과 같음

이름: Region or State
식: 
IF ( (ALL)이 선택되었을 때 )
THEN [Region] ELSE [State] END

or

IF ( 특정 Region이 선택되었을 때 )
THEN [State] ELSE [Region] END
  • Region과 State는 집계되지 않은 Raw Level의 값 (IF Statement 안에서는 모든 값이 집계되어서 들어가거나, 모든 값이 Raw Level로 들어가거나, 한 가지 형태로 통일되어서 들어가야 함.)
  • 그래서 IF 바로 뒤에도 집계되지 않은 값이 필요 ··· (1)
  • ‘~가 선택되었을 때’를 tableau language로 바꿔줘야 하는데, 선택은 곧 전체 레코드 수가 달라진다는 의미 ··· (2).
  • Fixed LOD(집계되지 않은 Raw Level 값을 가져오기 위해)와 SUM(Number of Records) (전체 레코드 수의 변화 보기 위해) 조합

그래서 아래와 같은 계산을 만들어줘야 한다.

이름: Region or State
식:
IF
    {COUNT([Orders])} =
    { FIXED [Region] : COUNT([Orders]) }
THEN
    [State/Province]
ELSE
    [Region]
END
  • COUNT([Orders]) = 모든 Region(데이터셋 전체) 레코드(Row) 수 ··· (3)
  • { FIXED [Region] : COUNT([Orders]) } = 각 Region별 전체 레코드(Row) 수 ··· (4)
  • 특정 Region을 선택하여 필터가 적용되면, (3)과 (4)는 같아지고 계산된 필드는 [State]를 반환
  • 필터가 적용되지 않은 (ALL) 이 선택되면,
    (3)은 전체 데이터셋의 행의 개수
    (4)는 각 지역별 행의 개수 (총 4개의 값)
    따라서 계산된 필드는 [Region] 반환

필터가 드릴 다운 방식으로 작동하지 않음.

  • 지역 필터가 적용되었을 때 두 개의 Fixed LOD가 필터에 의해 값이 바뀌어야 드릴 다운이 정상적으로 작동된다.
  • Order of Operations를 확인해보면 우리가 만든 Fixed LOD는 차원 필터보다 적용 우선순위가 높음. 필터의 영향을 받지 않는다는 의미.

따라서 차원 필터를 Fixed LOD보다 작동 순위가 높은 Context 필터로 만들어줘야 한다.

  • 필터 우클릭 → 컨텍스트에 추가

컨텍스트 필터로 적용 시 아래와 같이 정상적으로 드릴 다운된다.
Fixed LOD 결과를 필터링 할 때는 컨텍스트 필터를 활용해야 한다.

참고

태블로 레벨UP - 인프런

profile
안녕하세요!

0개의 댓글