2025.05.31 - [프로그래밍/데이터 시각화] - [Tableau] Table of Contents
이번 포스팅에서 다룰 내용은 Table Calculation입니다. 사실 저도 퀵테이블 계산은 자주 쓰지만 테이블 계산 자체는 아주 많이 쓰는 편이 아닌 것 같은데, 이번 기회를 통해 한번 정리해보도록 하겠습니다. 테이블 계산은 기본적으로 데이터의 원본을 조작하지 않으면서 워크시트에 표시된 데이터의 집계 결과를 이용해 추가 계산을 수행하는 작업입니다. 순위 계산, 누적 합계, 퍼센트 변화 등이 그 예라고 할 수 있겠습니다. Tableau의 테이블 계산을 Configurable Secondary Calcuation이라고 지칭하기도 하는 이유가 여기에 있을겁니다.
그리고 테이블 계산에 주의할 점이 있습니다. 앞 선 포스팅에서 살펴보았듯이 Order of operation에서 테이블 계산은 상당히 우선순위가 낮은 편에 속합니다. 따라서 필터를 건다든가 했을 경우에는 우선순위가 밀려서 의도한 대로 계산이 되지 않을 수도 있습니다. (이런경우에는 lookup함수를 활용하여 차원필터로 삼아 적용하는 방안도 있습니다)
1. Partition 함수: 데이터를 특정 그룹(파티션)으로 나누어 계산을 수행합니다.
(1) INDEX() : 데이터 행의 번호를 반환합니다.
(2) SIZE() : 현재 파티션 내의 행 개수를 반환합니다.
(3) FIRST() : 현재 행이 파티션에서 처음 행과 얼마나 떨어져 있는지를 반환합니다.
(4) LAST() : 현재 행이 파티션에서 마지막 행과 얼마나 떨어져 있는지를 반환합니다.
(5) LOOKUP(expression, offset) : 특정 행에서 값을 참조합니다.
예) LOOKUP(SUM([Sales]), -1)은 이전 행의 합계를 반환합니다.
(6) PREVIOUS_VALUE(expression) : 계산의 이전 결과값을 반환합니다.
Partition 함수 중 index, size, first, last가 table calculation의 개념을 잡기 쉬운 예시니까 먼저 살펴보도록 하겠습니다.
2. Runining 함수 : Partition의 첫번째행부터 현재행까지의 여러 계산값들을 반환합니다.
(1) RUNNING_SUM() : 파티션의 첫번째 행부터 현재 행까지 누적합계
(2) RUNNING_AVG() : 파티션의 첫번째 행부터 현재 행까지 누적평균
(3) RUNNING_MAX() : 파티션의 첫번째 행부터 현재 행까지 최대값
(4) RUNNING_MIN() : 파티션의 첫번째 행부터 현재 행까지 최소값
아래 예시에서는 RUNNING_SUM함수를 적용하는 예시를 보여주고 있습니다. 어떤 방향으로 누적해서 합하는지는 위에서 살펴봤던 index함수의 번호를 생각해보면 되겠죠?
3. Window함수 :
계산을 항상 첫행부터 현재까지를 범위로 하는 것은 아니겠죠? 좀 더 자유도를 높여 customizing해서 사용할 수 있도록 하는 함수가 window 함수입니다. window함수는 WINDOW_AVG(식, [시작, 끝]) 과 같이 어디서부터 시작해서 어디까지 연산을 수행하는지 지정해 줄 수 있습니다. 첫번째나 마지막을 지칭할 때는 FIRST(), LAST()을 활용할 수도 있습니다. 예를들어 첫번째 바로다음을 지칭할 때는 FIRST()+1과 같이 쓰고, 현재 행을 기준으로 두 행 전을 -2라고 쓰는 식입니다.
(1) WINDOW_SUM(집계[필드], 시작위치, 끝위치) : 지정한 윈도우 범위 내 집계된 필드의 합계 계산
(2) WINDOW_SUM(집계[필드], 시작위치, 끝위치) : 지정한 윈도우 범위 내 집계된 필드의 평균 계산
(3) WINDOW_SUM(집계[필드], 시작위치, 끝위치) : 지정한 윈도우 범위 내 최대값 계산
(4) WINDOW_SUM(집계[필드], 시작위치, 끝위치) : 지정한 윈도우 범위 내 최소값 계산
4. Rank함수 :
RANK(집계[필드], asc|desc) : 집계된 필드의 순위를 반환
RANK_DENSE(집계[필드], asc|desc) : 집계된 필드의 순위를 반환(1위가 여러개라도 다음은 2위)
RANK_UNIQUE(집계[필드], asc|desc) : 집계된 필드의 순위를 반환(공동 1위끼리도 순위)
5. Total함수 : 지정된 범위 전체에서의 Aggregated Calculation
참고로 sum()으로 합계를 구하는 것과 Total(sum())으로 합계를 구하는 것이 같은 값을 가질 경우도 있지만 내부 메커니즘은 다릅니다. sum()으로 구하는 것은 태블로의 기본(선택된 VLOD-차원-에서 집계하여 보여준다. default 집계 방식은 합계-sum-이다)컨셉에 충실하게 구하는 방식이고, Total은 차원에 상관없이 테이블계산으로 지정해준 범위에서 정말로 Total을 해주는 작업입니다. 어떤 경우에 유용하게 사용할 수 있을까요? 예를 들어 아래 예시에서 특정범위(Region 내 라든가)에서의 average를 구하고 싶다하면 sales의 집계방식을 average로 놓고 올리면 될까요? 내가 구하고 싶은건 지역 내 평균이고 이건 (지역 내 총 sales합계)/(지역 내 총 관측치 수)로 계산해야하는 건데 이렇게 올려놔버리면 계산할 수 있는건 평균을 다시 평균하는 건데..? 이건 우리가 구하고자하는 값과 다른 값입니다(물론 각 카테고리 내 관측치가 1개씩이라면 똑같겠지만..). 그래서 이런 목적으로 위해서는 Total(avg(Sales))와 같은 식으로 구하는 것이지요.
'프로그래밍 > 데이터 시각화' 카테고리의 다른 글
[Tableau] Table of Contents (0) | 2025.05.31 |
---|---|
[Tableau 기초] 변수의 Distribution(Histogram) 그리기 (0) | 2025.01.13 |
[Tableau] Level of Detail Calculation (1) | 2024.12.15 |
[Tableau] Order of Operation (0) | 2024.12.01 |
[Tableau] Tableau 기초 (0) | 2024.12.01 |