계산과 필터의 작동 순서
계산
필터
이 모든 계산과 필터들은 태블로에서 정의된 순서대로 작동된다. 따라서 상대적으로 무엇이 먼저 적용되고, 무엇이 나중에 적용되는지 아는 것이 중요하다.
2019 - 2022년 Superstore 데이터를 활용하여, 최근 2년 간의 수익(Profit)에 대한 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으로 설정하면
테이블 계산 결과를 필터링 할 때에는 테이블 계산 필터를 활용하자
적용되는 원리: 차원 필터를 테이블 계산 필터로 대체.
새로운 테이블 계산 필터를 아래와 같이 만들어 보자
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 - Table Calc Filter
식: LOOKUP(ATTR([Segment]), 0)
Segment 리스트에서 내가 선택한 줄에 있는 그(=자기 자신의) 값을 갖고 오라.
계산된 필드를 화면 위로 올리고 일단 전체 선택 > 확인 위해 우클릭>필터 표시
우측에 나타난 필터에서 Consumer만 남겨보면
전체 범위 순위 유지
주별 매출을 표현한 지도를 통해 카테고리별 수익률을 필터링하는 대시보드를 만들어보세요. (바 차트의 참조선 값이 바뀌지 않도록 주의하세요.)
State
화면 위로 올리고,
Sales
를 색상으로 올려서 주별 매출 표현
(+ 미국 필터 추가)
새 시트에
Profit Ratio를 행, Category를 열에 올리기
화면을 돌려주고, 레이블 달아준 후 전체 보기로 맞춰주기
Category를 색상에 집어 넣기
참조선 넣어주기 위해서 분석 탭 > 참조선을 ‘셀’로 집어넣기 > 라인 값: 집계(Profit Ratio), 레이블: 사용자 지정으로 해준 후 National Level = <값>으로 변경
여기에 액션 필터 적용시키기
새 대시보드 > 지도를 화면 위, 바 차트를 화면 아래로
액션 걸어주기 위해서 대시보드 > 동작 > 동작 추가 추가 > 필터 > 지도에서 ‘선택’(작업 실행 조건)을 했을 때 바 차트를 필터링 > 선택 내용을 지울 경우의 결과: 모든 값 표시 선택 > 확인 > 확인
"지도에서 무언가 선택했을 때, 바 차트를 필터링하라. 그리고 선택을 해제하면 모든 값을 표시해달라." 라는 의미이다.
이를 위해서 먼저 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를 활용하자
필터 선택(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 or State
식:
IF
{COUNT([Orders])} =
{ FIXED [Region] : COUNT([Orders]) }
THEN
[State/Province]
ELSE
[Region]
END
필터가 드릴 다운 방식으로 작동하지 않음.
따라서 차원 필터를 Fixed LOD보다 작동 순위가 높은 Context 필터로 만들어줘야 한다.
필터
우클릭 → 컨텍스트에 추가
컨텍스트 필터로 적용 시 아래와 같이 정상적으로 드릴 다운된다.
Fixed LOD 결과를 필터링 할 때는 컨텍스트 필터를 활용해야 한다.
참고