[Tableau] Order of Operations

김소정·2022년 4월 5일
0

Tableau

목록 보기
3/4
post-thumbnail

본 포스팅은 인프런의 태블로 레벨UP 강의를 바탕으로 작성되었습니다.

Order of Operations

계산과 필터의 작동 순서

태블로에서 계산과 필터의 작동 순서는 조금 복잡하지만, 매우 체계적으로 구조화 되어 있다.

계산

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

필터

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

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


LAST

현재 행에서 파티션에 있는 마지막 행까지의 행 수를 반환

Example

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

  1. 합계(Profit) 테이블 계산 → 이동 계산 → 평균- 이전 11 - 다음 0
  2. Order Date 필터 → 연도/월 → 2017년 1월 ~ 2018년 12월

위 그래프의 문제는 무엇일까? 이 그래프를 표로 표현해보면 다음과 같다.

최초 11개월에 대해서는 MA(이동평균) 값이 제대로 만들어지지 않았다. MA가 만들어지기 전에, MA를 만들기 위해 필요한 값이 필터링되어 빠져나간 것이다.

2017년 3월의 이동평균 값은 2017년 1월부터 3월, 총 3개월의 이동평균 값이다. 하지만 우리는 2017년 1월 이전에도 데이터가 존재한다는 사실을 알고있다.

Last 함수 이용

  • 날짜(연월)에 대한 차원 필터 대체 가능
  • 뒤에서부터 24개의 마크를 가지고 올 수 있음

LAST()를 만들어준 뒤, 필터로 넣을 때 값의 범위를 0~23으로 설정
(2018년 12월부터 거꾸로 24개월 값이 필요하기 때문)

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


차원 필터 → 테이블 계산

테이블 계산식은 작동 순서가 늦은 편이다.
왼쪽의 집계가 이루어진 후에, 오른쪽의 테이블 계산이 만들어질 수 있다.

따라서 위 문제를 해결하기 위해서는, 테이블 계산 이후에 수행되는 테이블 계산 필터를 이용해주어야 한다.


LOOKUP

현재 행의 기준 오프셋으로 지정된 대상 행에서 식의 값을 반환

Example

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

필터링을 통해 10명의 고객을 무작위로 뽑아보니, 순위가 다시 계산되는 문제가 발생했다. 이유는 앞서와 동일하게, 필터(고객)가 먼저 적용된 후 테이블 계산(순위)이 나중에 이루어지기 때문이다.

여기서 전체 범위에서의 순위를 그대로 써주고 싶다면 어떻게 하면 될까?

바로 차원 필터테이블 계산 필터로 만들어주면 된다.

# Customer Name - Table Calc Filter
LOOKUP(ATTR([Customer Name]), 0)

# 고객명이 나열되어 있는 리스트에서, 자기 자신의 줄에 있는 값(자기 자신)을 가져와라

위 테이블 계산을 필터로 넣어주면 다음과 같은 그래프를 얻을 수 있다.


VLOD에 포함되어 있지 않은 고객 구분(Segment)으로 필터링 했을 때도 순위를 유지시키는 방법도 앞서 말한 LOOKUP 함수와 동일하다.

# Segment - Table Calc Filter
LOOKUP(ATTR([Segment]), 0)

LOOKUP 테이블 계산 필터를 넣어주면 다음과 같이 전체 범위에서의 순위를 유지한다.


Fixed LOD

Example

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

참조선은 로 넣어주고, 레이블을 사용자 지정에서 National Levle = <값>으로 지정해준다.

위와 같이 대시보드에 정렬을 해준 뒤, 대시보드 → 동작 → 동작 추가 → 필터를 선택한다.

"지도에서 무언가 선택했을 때, 바 차트를 필터링하라. 그리고 선택을 해제하면 모든 값을 표시해달라." 라는 의미이다.

하지만 이렇게 필터 동작을 추가해주면, 지도 선택에 따라 참조선에 변동이 일어나게 된다. 이는 Profit Ratio가 집계 계산이기에 액션 필터보다 작동 순서가 낮기 때문에 발생하는 문제점이다. 따라서 단순 집계 계산인 Profit Ratio를 액션 필터에 영향을 받지 않는 Fixed LOD 값으로 만들어주어야 한다.

# Profit Ratio by Category
{ FIXED [Category] : [Profit Ratio] }

위 필드를 참조선으로 넣어주기 위해서는 해당 필드가 화면 안에 있어야 한다. 따라서 Profit Ratio by Category를 세부 정보로 넣어준 뒤, 참조선의 값을 이 필드로 설정한다.

그럼 위와 같이 참조선의 값이 지도 선택에 의한 영향을 받지 않게 된다.


Context Filter

Example

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

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

or

IF ( 특정 지역이 선택되었을 때 )
THEN [State]  ELSE [Reigion] END
  • RegionState는 집계되지 않은 Raw Level의 값
  • 그래서 IF 바로 뒤에도 집계되지 않은 값이 필요 ··· (1)
  • 선택은 곧 전체 레코드 수가 달라진다는 의미 ··· (2)
  • Fixed LODSUM(Number of Records) 조합

집계되지 않은 값을 가지고 오기 위해 Fixed LOD를 쓰고, 전체 레코드 수의 변화를 보기 위해 전체 레코드 수의 합을 봐야 한다.

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

드릴 다운이 되지 않는 문제가 발생한다.

지역 필터가 적용되었을 때 두 개의 Fixed LOD가 필터에 의해 값이 바뀌어야 드릴 다운이 정상적으로 작동된다.

Fixed LOD는 차원 필터보다 작동 순위가 높아, 차원 필터에 영향을 받지 않는다. 따라서 Fixed LOD보다 작동 순위가 높은 Context 필터로 만들어줘야 한다.

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

컨텍스트 필터로 적용시 위와 같이 정상적으로 드릴 다운된다.

Fixed LOD 결과를 필터링 할 때는 컨텍스트 필터를 활용해야 한다.

profile
Yonsei University, Applied Statistics

0개의 댓글