본 포스팅은 인프런의 태블로 레벨UP 강의를 바탕으로 작성되었습니다.
계산과 필터의 작동 순서
태블로에서 계산과 필터의 작동 순서는 조금 복잡하지만, 매우 체계적으로 구조화 되어 있다.
계산
필터
이 모든 계산과 필터들은 태블로에서 정의된 순서대로 작동된다.따라서 상대적으로 무엇이 먼저 적용되고, 무엇이 나중에 적용되는지 아는 것이 매우 중요하다.
현재 행에서 파티션에 있는 마지막 행까지의 행 수를 반환
2015-2018년의 Superstore 데이터를 활용하여, 최근 2년 간의 수익(Profit)에 대한 12개월 이동평균을 만들어보세요.
합계(Profit)
테이블 계산 → 이동 계산 → 평균- 이전 11 - 다음 0Order Date
필터 → 연도/월 → 2017년 1월 ~ 2018년 12월 위 그래프의 문제는 무엇일까? 이 그래프를 표로 표현해보면 다음과 같다.
최초 11개월에 대해서는 MA(이동평균) 값이 제대로 만들어지지 않았다. MA가 만들어지기 전에, MA를 만들기 위해 필요한 값이 필터링되어 빠져나간 것이다.
2017년 3월의 이동평균 값은 2017년 1월부터 3월, 총 3개월의 이동평균 값이다. 하지만 우리는 2017년 1월 이전에도 데이터가 존재한다는 사실을 알고있다.
LAST()를 만들어준 뒤, 필터로 넣을 때 값의 범위를 0~23으로 설정
(2018년 12월부터 거꾸로 24개월 값이 필요하기 때문)
테이블 계산 결과를 필터링할 때는 테이블 계산 필터를 활용하자
테이블 계산식은 작동 순서가 늦은 편이다.
왼쪽의 집계가 이루어진 후에, 오른쪽의 테이블 계산이 만들어질 수 있다.
따라서 위 문제를 해결하기 위해서는, 테이블 계산 이후에 수행되는 테이블 계산 필터를 이용해주어야 한다.
현재 행의 기준 오프셋으로 지정된 대상 행에서 식의 값을 반환
날짜 차원 필터는 LAST 함수로 해결할 수 있는데, 문자열 차원 필터는 어떻게 계산 필터로 바꿀 수 있는가?
필터링을 통해 10명의 고객을 무작위로 뽑아보니, 순위가 다시 계산되는 문제가 발생했다. 이유는 앞서와 동일하게, 필터(고객)가 먼저 적용된 후 테이블 계산(순위)이 나중에 이루어지기 때문이다.
여기서 전체 범위에서의 순위를 그대로 써주고 싶다면 어떻게 하면 될까?
바로 차원 필터를 테이블 계산 필터로 만들어주면 된다.
# Customer Name - Table Calc Filter
LOOKUP(ATTR([Customer Name]), 0)
# 고객명이 나열되어 있는 리스트에서, 자기 자신의 줄에 있는 값(자기 자신)을 가져와라
위 테이블 계산을 필터로 넣어주면 다음과 같은 그래프를 얻을 수 있다.
VLOD에 포함되어 있지 않은 고객 구분(Segment)으로 필터링 했을 때도 순위를 유지시키는 방법도 앞서 말한 LOOKUP
함수와 동일하다.
# Segment - Table Calc Filter
LOOKUP(ATTR([Segment]), 0)
LOOKUP
테이블 계산 필터를 넣어주면 다음과 같이 전체 범위에서의 순위를 유지한다.
주별 매출을 표현한 지도를 통해 카테고리별 수익률을 필터링하는 대시보드를 만들어보세요. (바 차트의 참조선 값이 바뀌지 않도록 주의하세요.)
참조선은 셀
로 넣어주고, 레이블을 사용자 지정
에서 National Levle = <값>
으로 지정해준다.
위와 같이 대시보드에 정렬을 해준 뒤, 대시보드 → 동작 → 동작 추가 → 필터를 선택한다.
"지도에서 무언가 선택했을 때, 바 차트를 필터링하라. 그리고 선택을 해제하면 모든 값을 표시해달라." 라는 의미이다.
하지만 이렇게 필터 동작을 추가해주면, 지도 선택에 따라 참조선에 변동이 일어나게 된다. 이는 Profit Ratio
가 집계 계산이기에 액션 필터보다 작동 순서가 낮기 때문에 발생하는 문제점이다. 따라서 단순 집계 계산인 Profit Ratio
를 액션 필터에 영향을 받지 않는 Fixed LOD
값으로 만들어주어야 한다.
# Profit Ratio by Category
{ FIXED [Category] : [Profit Ratio] }
위 필드를 참조선으로 넣어주기 위해서는 해당 필드가 화면 안에 있어야 한다. 따라서 Profit Ratio by Category
를 세부 정보로 넣어준 뒤, 참조선의 값을 이 필드로 설정한다.
그럼 위와 같이 참조선의 값이 지도 선택에 의한 영향을 받지 않게 된다.
필터 선택(All or 특정 지역)에 따라 차원이 드릴 다운(지역→주) 되는 화면을 만들어보세요.
# Region or State
IF ( (ALL)이 선택되었을 때 )
THEN [Region] ELSE [State] END
or
IF ( 특정 지역이 선택되었을 때 )
THEN [State] ELSE [Reigion] END
Region
과 State
는 집계되지 않은 Raw Level의 값집계되지 않은 값을 가지고 오기 위해 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)[State]
를 반환[Region]
반환드릴 다운이 되지 않는 문제가 발생한다.
지역 필터가 적용되었을 때 두 개의 Fixed LOD가 필터에 의해 값이 바뀌어야 드릴 다운이 정상적으로 작동된다.
Fixed LOD는 차원 필터보다 작동 순위가 높아, 차원 필터에 영향을 받지 않는다. 따라서 Fixed LOD보다 작동 순위가 높은 Context 필터로 만들어줘야 한다.
컨텍스트 필터로 적용시 위와 같이 정상적으로 드릴 다운된다.
Fixed LOD 결과를 필터링 할 때는 컨텍스트 필터를 활용해야 한다.