본문 바로가기

Tableau Desktop/[인프런] 웰컴 투 태블로 월드

[인프런] 웰컴 투 태블로 월드 - 3. 태블로의 주요 기능 익히기(계산된 필드)

개요

지난 포스팅에서는 Tableau에서 지도를 활용하여 대한민국 시도 및 시군구 시각화를 수행하는 방법, 행정구역 필드를 계층 구조로 만드는 방법, 마크 카드 밀도 방식으로 시각화했을 때의 특징, 마지막으로 지도 시각화의 강점 및 약점을 정리하였습니다.

이번 포스팅은 [인프런] 웰컴 투 태블로 월드 강의 네 번째 '태블로의 주요 기능 익히기' 섹션 중에 계산된 필드 관련된 내용을 아래 순서대로 정리하였습니다.

  • 계산된 필드 생성 방법
  • 계산된 필드에서 사용하는 함수

 

참고한 링크는 아래와 같습니다.

 

본문

1. 계산된 필드 생성 방법

계산된 필드데이터에 있는 필드를 활용하여 새로운 필드를 만드는 작업입니다. 예시로 Sales 필드와 Profit 필드 합계를 계산하는 필드 Sales + Profit을 생성합니다. (데이터셋은 Tableau에서 제공하는 Sample - Superstore를 사용했습니다!)

 

생성된 필드명 앞에는 = 기호가 필드명 붙습니다. 이는 Sales + Profit가 계산된 필드임을 알려줍니다.

 

생성한 Sales + Profit 필드 계산 결과를 확인합니다. 

  • 각 row 데이터의 Profit과 Sales 합계를 올바로 계산했음을 알 수 있습니다.

 

이제 Tableau에서 기본적으로 제공하는 Profit Ratio 계산된 필드 내용을 확인합니다.

  • Profit Ratio(수익률)는 전체 Sales(판매 금액) 합계 중에 전체 Profit(수익 금액) 합계 비율로 정의하고 있습니다.

 

Profit Ratio 필드 계산 결과를 확인합니다.

  • 각 row 데이터의 Profit Ratio를 올바로 계산했음을 알 수 있습니다.

 

참고로, Profit Ratio의 계산 수식이 [Profit] / [Sales] 이 아닌, SUM([Profit]) / SUM([Sales])인 이유는 아래와 같습니다.

  • 기본적으로 Tableau에서 필드를 측정값 카드에 올릴 때, 집계를 수행하는 특성 때문입니다.
  • 1) 계산 수식을 [Profit] / [Sales]으로 적용하는 경우 -> 오류
    • 위 수식을 가진 계산된 필드는 Raw Level 데이터에서 각 행마다 Profit / Sales를 계산합니다. 
    • 해당 계산된 필드(Profit Ratio 2)는 측정값 카드에 합계(계산된 필드명) 방식으로 올라가기 때문에 각 행마다 계산한 Profit / Sales 값을 모두 더하기 때문에 잘못된 값이 도출됩니다.

 

  • 2) 계산 수식을 SUM([Profit]) / SUM([Sales])으로 적용하는 경우 -> 정상
    • 위 수식을 가진 계산된 필드는 Raw Level 데이터의 전체 Profit 합계를 전체 Sales 합계로 나눕니다.
    • 해당 계산된 필드(Profit Ratio)는 측정값 카드에 집계(계산된 필드명) 방식으로 올라가기 때문에 수식 SUM([Profit]) / SUM([Sales])으로 올바로 계산한 값이 도출됩니다.

 

이처럼 데이터 양이 방대할수록 Raw Level 집계 계산을 신중하게 다뤄야 합니다. 

 

 

2. 계산된 필드에서 사용하는 함수

계산된 필드창에서 우측 화살표를 누르면, Tableau에서 제공하는 기본적인 함수들을 확인할 수 있습니다. 또한, 전체를 누르면 함수가 기능별로 분류되어 있는 것을 확인할 수 있습니다.

 

숫자 관련 함수

  • CEILING(숫자)
    • 숫자를 올림해서 표현합니다.
    • (ex) CELING(3.1415) = 4
  • FLOOR(숫자
    • 숫자를 내림해서 표현합니다.
    • (ex) FLOOR(3.1415) = 3
  • PI()
    • 숫자 상수 pi를 반환합니다.
  • ZN(식)
    • 이  NULL이 아니면 <식>을 반환하고, NULL이면 0을 반환합니다. 
    • (ex) ZN([Profit]) -> Profit이 NULL이 아니면 해당값을 반환하고, NULL이면 0을 반환합니다.

 

논리 관련 함수 (다음 포스팅에서 자세히 정리합니다.)

  • IF <식> THEN <해당하는 경우> [ELSEIF <식 2> THEN <해당하는 경우>] [ELSE <해당하지 않는 경우>] END
    • ZN()과는 반대로, 0(zero)를 NULL로 변환할 수 있습니다.

 

문자열 관련 함수

  • LEFT(문자열, 숫자_문자)
    • 입력한 문자열의 시작부터 숫자_문자 만큼의 문자를 반환합니다.
    • (ex) LEFT("Calculation", 4) = "Calc"
  • RIGHT(문자열, 숫자_문자)
    • 입력한 문자열의 끝부터 숫자_문자 만큼의 문자를 반환합니다.
    • (ex) RIGHT("Calculation", 4) = "tion"
  • MID(문자열, 시작, [길이])
    • 입력한 문자열시작 위치부터 [길이] 만큼의 문자를 반환합니다. -> 전체 문자열에서 가운데 부분을 슬라이싱 할 때 사용합니다! 
    • (ex) MID("Calculation", 2, 3) = "alc" 
  • REGEXP_EXTRACT(문자열, 패턴)
    • 입력한 문자열에서 정규식 패턴과 일치하는 부분 문자열 캡처 그룹을 반환합니다.
    • (ex) 
      • REGEXP_EXTRACT('abc 123', '[a-z]+\s+(\d+)') = '123' -> 소괄호 내부(캡처 그룹) \d+에 해당하는 123 반환
      • REGEXP_EXTRACT('abc 123', '([a-z]+\s+\d+)') = 'abc 123' -> 소괄호 내부(캡처 그룹) [a-z]+\s+\d+에 해당하는 abc 123 반환
  • REGEXP_EXTRACT_NTH(문자열, 패턴, 인덱스)
    • 입력한 문자열에서 정규식 패턴과 일치하는 부분 문자열 중, 인덱스 위치에 해당하는 캡처 그룹을 반환합니다. 
    • (ex)
      • REGEXP_EXTRACT_NTH('abc 123', '([a-z]+)\s+(\d+)', 1) = 'abc' -> 첫 번째 캡처 그룹 [a-z]+에 해당하는 abc 반환
      • REGEXP_EXTRACT_NTH('abc 123', '([a-z]+)\s+(\d+)', 2) = '123' -> 두 번째 캡처 그룹 \d+에 해당하는 123 반환
  • REGEXP_MATCH(문자열, 패턴)
    • 입력한 문자열부분 문자열 정규식 패턴과 일치하면 True를 반환합니다.
    • (ex) REGEXP_MATCH('-([1234].[The.Market])-', '\[\s*(\w*\.)(\w*\s*\])') = True
  • REGEXP_REPLACE(문자열, 패턴, 대체)
    • 입력한 문자열에서 정규식 패턴과 일치하는 부분 문자열을 대체하여 반환합니다.
    • (ex) REGEXP_REPLACE('abc 123', '\s', '-') = 'abc-123'
  • SPLIT(문자열, 구분 기호, 토큰 번호)
    • 입력한 문자열구분 기호로 분해하여 토큰 번호 위치에 해당하는 문자를 반환합니다.
    • (ex)
      • SPLIT('a-b-c-d', '-', 2) = 'b' -> 두 번째에 위치한 'b' 반환
      • SPLIT('a-b-c-d', '-', -2) = 'c' -> 뒤에서 두 번째에 위치한 'c' 반환
  • UPPER(문자열)
    • 입력한 문자열을 모두 대문자로 변경
    • (ex) UPPER("product") = "PRODUCT"
  • LOWER(문자열)
    • 입력한 문자열을 모두문자로 변경
    • (ex) UPPER("PRODUCT") = "product"
  • (참고) 날짜가 들어간 '문자열' 타입 필드(ex: 20200101)를 '날짜'로 변경했는데, 원하는 형식으로 변환되지 않는 경우..
    • (step 1) 문자열 필드에 LEFT, MID, RIGHT 함수를 사용하여 각 '연도', '월', '일'을 추출합니다!
      • 연도: LEFT("20200101", 4) = '2020'
      • 월: MID("20200101", 5, 2) = '01'
      • 일: RIGHT("20200101", 2) = '01'
    • (step 2) '연도', '월', '일'로 분리한 문자를 합치고, DATEPARSE 함수를 사용하여 날짜 형식으로 변환합니다.
      • DATEPARSE('yyyyMMdd', '2020'+'01'+'01) = 2020-01-01 오전 12:00:00 -> 데이터 유형: '날짜 및 시간'
    • (step 3) 데이터 유형을 '날짜 및 시간'에서 '날짜'로 변경합니다.
      • 2020-01-01 오전 12:00:00 -> 2020-01-01

 

 

날짜 관련 함수 (모두 중요!)

  • DATEADD(날짜_부분, 간격, 날짜)
    • 지정한 날짜날짜_부분('year', 'month', 'day', ...)을 간격만큼 증가 시킵니다.
    • (ex) DATEADD('month', 3, #2021-03-03#) = 2021-06-03 12:00:00 AM
  • DATEDIFF(날짜_부분, 시작_날짜, 끝_날짜, [주_시작])
    • 끝_날짜시작_날짜의 차이를 계산하여 날짜_부분 단위로 표현합니다.
    • 주_시작을 생략하면, 주 시작일이 데이터 원본에 대하여 구성된 시작일에 의해 결정됩니다.(?)
    • (ex) DATEDIFF('month', #2021-03-03#, #2021-06-03#) = 3
  • DATENAME(날짜_부분, 날짜, [주_시작])
    • 입력한 날짜날짜_부분문자열(January, November, December,...)로 반환합니다.
    • 주_시작을 생략하면, 주 시작일이 데이터 원본에 대해 구성된 시작일에 의해 결정됩니다.
    • (ex) DATENAME('month', #2021-03-03#) = "March"
  • DATEPARSE(형식, 문자열)
    • 입력한 문자열을 지정된 형식날짜로 변환합니다.
    • (ex) DATEPARSE("dd.MMMM.yyy", "03.March.2021") = 2021-03-03 12:00:00 AM
      • 형식은 기본적으로 문자열의 각 연, 월, 일 문자 개수와 일치해야 합니다.
      • 예외로 문자열의 연, 월, 일의 문자 개수가 길다면 형식의 4개 문자만 나열하면 됩니다. (예를 들어, March -> MMMM)
    • 이때, Tableau가 날짜 문자열에 들어간 영어(March,..)를 인식하기 위해서는 로캘을 변경해야 합니다.
      • 파일 -> 통합 문서 로캘 -> 영어(미국)으로 변경
      • Tableau 통합 문서 로캘 관련 내용은 이곳에서 참고했습니다.
  • DATEPART(날짜_부분, 날짜, [주_시작])
    • 입력한 날짜날짜_부분정수로 반환합니다.
    • 주_시작을 생략하면, 주 시작일이 데이터 원본에 대해 구성된 시작일에 의해 결정됩니다.
    • (ex) DATEPART('month', #2021-03-03#) = 3
    • 불연속형 날짜 알약을 더블클릭하면 확인할 수 있는 함수입니다.
  • DATETRUNC(날짜_부분, 날짜, [주_시작])
    • 입력한 날짜날짜_부분가장 첫 번째 날짜를 반환합니다.
    • (ex)
      • DATETRUNC('year', #2021-03-03#) = 2021-01-01 12:00:00 AM
      • DATETRUNC('month', #2021-03-03#) = 2021-03-01 12:00:00 AM
    • 연속형 날짜 알약을 더블클릭하면 확인할 수 있는 함수입니다.
  • DAY(날짜)
    • 입력한 날짜'일'을 정수로 반환합니다.
    • (ex) DAY(#2021-03-03#) = 3
  • MONTH(날짜)
    • 입력한 날짜 '월'을 정수로 반환합니다.
    • (ex) MONTH(#2021-03-03#) = 3
  • WEEK(날짜)
    • 입력한 날짜 '주'를 정수로 반환합니다.
    • (ex) WEEK(#2021-03-03#) = 10
  • QUARTER(날짜)
    • 입력한 날짜 '분기'를 정수로 반환합니다.
    • (ex) QUARTER(#2021-03-03#) = 1
  • YEAR(날짜)
    • 입력한 날짜 '연도'를 정수로 반환합니다.
    • (ex) YEAR(#2021-03-03#) = 2021
  • ISDATE(문자열)
    • 입력한 문자열이 유효한 날짜면, True를 반환합니다.
    • (ex) ISDATE("2021-03-03") = True
  • ISOQUARTER(날짜)
    • 입력한 날짜를 ISO8601 주 단위 분기를 정수로 반환합니다.
    • (ex) ISOQUARTER(#2021-03-03#) = 1
  • ISOWEEK(날짜)
    • 입력한 날짜를 ISO8601 주 단위 를 정수로 반환합니다.
    • (ex) ISOWEEK(#2021-03-03#) = 9
  • ISOWEEKDAY(날짜)
    • 입력한 날짜를 ISO8601 주 단위 요일을 정수로 반환합니다.
  • ISOYEAR(날짜)
    • 입력한 날짜를 ISO8601 주 단위 연도를 정수로 반환합니다.
  • MAX(식) 또는 MAX(식 1, 식 2)
    • MAX(식): 모든 데이터에 대한의 최대값을 반환합니다.  
      • (ex) MAX([Profit]) = 8,400
    • MAX(식 1, 식 2): 각 row 데이터에 대한 식1, 식2 중에 큰 값(?)을 반환합니다. -> 각 row 데이터를 대상으로 계산하므로, 해당 계산된 필드를 선반에 올리면, 합계(계산된 필드)로 집계가 됩니다.
    • 날짜 필드를 입력하면, 가장 최근 날짜를 확인할 수 있습니다. 
      • MAX([Order Date])
  • MIN(식) 또는 MIN(식 1, 식 2)
    • MIN(식): 모든 데이터에 대한 의 최소값을 반환합니다.
      • (ex) MIN([Profit]) = -6,599
    • MIN(식 1, 식 2): 각 row 데이터에 대한 식1, 식2 중에 작은 값(?)을 반환합니다. -> 각 row 데이터를 대상으로 계산하므로, 해당 계산된 필드를 선반에 올리면, 합계(계산된 필드)로 집계가 됩니다.
    • 날짜 필드를 입력하면, 가장 오래된 날짜를 확인할 수 있습니다.
      • MIN([Order Date])
  • TODAY()
    • 현재 날짜를 반환합니다.
    • TODAY() = 2021-03-03
  • NOW()
    • 현재 날짜 및 시간을 반환합니다.
    • NOW() = 2021-03-03 14:33:20 PM

 

유형(타입) 변환 관련 함수

  • DATE(식)
    • 입력한 날짜 문자열 식('2020-03-03 12:00 ', '2020/March/03 14:00:02',...)을 날짜로 반환합니다. -> 시/분/초 단위는 모두 제외됩니다.
    • (ex) DATE("2021-03-03 14:28") = 2021-03-03
  • FLOAT(식)
    • 입력한 실수 값으로 반환합니다. 
    • (ex) FLOAT("3") = 3.00
  • INT(식)
    • 입력한 정수 값으로 반환합니다.
    • (ex) INT(8.0 / 3.0) = 2
  • STR(식)
    • 입력한 문자열을 반환합니다.
    • (ex) STR([Sales])

 

집계 관련 함수 

  • ATTR(식)
    • 입력한 식(그룹)모든 행이 단일값만 포함하면 주어진 단일값을 반환하고, 그렇지 않으면 별표(*)를 반환합니다. 이 때, NULL 값은 무시한채로 단일값 포함 여부를 확인합니다.
    • Tableau에서 특성으로 표현됩니다.
    • 문자열에 대한 집계를 수행한다고 생각할 수 있습니다.
    • 마크카드 도구 설명에 차원을 올리면 특성(ATTR)으로 표현되고, 현재 고유 Id 차원은 단일값이 아니기 때문에 별표(*)를 반환합니다.
      • 특성(ATTR)으로 표현된 이유는 보는 사람으로 하여금 차원이 단일 값이 아닌, 여러 개의 값으로 이뤄져 있기 때문에 추가 작업이 필요하다는 것을 알려줄 수 있습니다. -> 만약 특성(ATTR)이 아닌, MIN() 등으로 집계했다면 최소값을 반환하기 때문에 차원이 단일값으로 이루어져 있다고 착각할 수 있을 것입니다!

 

 

 

  • COUNT(식)
    • 입력한 의 row 데이터 개수를 반환합니다. (NULL 값 무시)
    • (ex) COUNT([Orders])
  • COVAR(expr1, expr2)
    • expr1과 expr2의 표본 공분산을 반환합니다.
    • (ex) COVAR([Sales], [Profit])
  • SUM(식)
    • 의 모든 값의 합계를 반환합니다. (NULL 값 무시)
    • 은 숫자 필드만 해당됩니다.
    • (ex) SUM([Profit])
  • VAR(식)
    • 의 표본 분산을 반환합니다.
    • (ex) VAR([Profit])
  • VARP(식)
    • 의 모 분산을 반환합니다.
    • (ex) VARP([Profit])

 

사용자 관련 함수 (많이 사용하지는 않는 듯합니다.)

  • FULLNAME()
    • 현재 사용자의 전체 이름을 반환합니다.
    • (ex) FULLNAME() = 이동희
  • USERNAME()
    • 현재 사용자의 이름을 반환합니다.
    • (ex) USERNAME() = dhleegarret@gmail.com

 

테이블 계산 관련 함수

테이블 계산 함수는 기본적으로 이곳을 참고하여 작성했습니다.

 

INDEX()

  • 기본적으로 열 선반에 올라간 필드를 파티션으로 간주하여 이를 기준으로 인덱스를 반환합니다.

 

  • 만약 Order Date 필드를 파티션으로 간주하여 이를 기준으로 인덱스로 반환하려면 아래 절차를 수행합니다. 
    • 계산 2 우클릭 -> 편집 -> 기본 테이블 계산 -> 다음을 사용하여 계산 -> Order Date

 

FIRST() & LAST()

  • FIRST(): 현재 행에서 첫 번째 행까지의 행 개수
  • LAST(): 현재 행에서 마지막 행까지의 행 개수

 

  • (FIRST(), LAST() 활용 예시 1) 월별 매출 트랜드를 표현하는 라인 차트의 맨 처음과 마지막 날짜의 마크에만 색상 지정!
    • 맨 처음과 마지막 날짜 데이터와 그외 날짜 데이터를 구분하는 문자열을 반환하는 계산된 필드 생성
      • IF FIRST() = 0 OR LAST() = 0 THEN 'ends' ELSE 'etc' END

 

  • (FIRST(), LAST() 활용 예시 2) LAST()를 활용한 최근 6개월 추이 확인
    • 최근 6개월 데이터를 반환하는 계산된 필드 생성
      • LAST() <= 5: 현재 행에서 가장 마지막 행까지의 개수가 5이하인 데이터 

 

LOOKUP()

  • LOOKUP() 함수는 테이블에서 특정한 값을 찾아서 전체 행에 저장!
  • LAST() - 2: 마지막 행으로부터 인덱스가 '2'인(=3번째 위치한) 데이터 
    • LAST() = 2 가 결국 현재 행에서 마지막 행까지의 행 개수가 '2'인 데이터를 의미하는데, LAST() - 2와 동일한 표기

 

입력한 오프셋만큼 현재 행으로부터 떨어진 대상 행에서 입력한 을 계산한 결과를 반환합니다.

  • 1) 오프셋정수인 경우
    • 하위 row 데이터를 끌어올려서 확인할 수 있다!
    • (ex) LOOKUP(SUM[Profit], 2) -> 파티션은 OrderDate 필드로 설정!
      • 각 행은 자신을 기준으로 2만큼 떨어진 행에서의 SUM[Profit]을 저장합니다.
      • 결국, 아래 이미지 예시에서 각 행에서는 2분기 이후의 매출값을 표기할 수 있습니다!

 

  • 2) 오프셋 FIRST() + n(첫 번째 행 + n) 또는 LAST() - n(마지막 행 - n)인 경우
    • 특정 row 데이터로 모든 파티션에 채워 넣을 수 있다!
    • (ex) LOOKUP(SUM[Profit], FIRST()+2) -> 파티션은 OrderDate 필드로 설정!
      • 각 행은 세 번째 행(FIRST()+2)에서의 SUM[Profit]을 저장합니다.
      • 결국, 아래 이미지 예시에서 모든 행에는 최초 세 번째 행의 SUM[Profit]으로 채워집니다!

 

  • 오프셋을 생략한 경우, 필드 메뉴에서 비교 대상 행을 설정할 수 있습니다.(?)
  • 대상 행을 결정할 수 없으면, NULL을 반환합니다.

 

< RANK류 >

RANK(식, ['asc'|'desc'])

  • 파티션에 있는 현재 행의 결과에 대한 순위를 반환합니다.
  • 오름차순 또는 내림차순으로 지정하려면 선택 사항 'asc' | 'desc' 인수를 사용합니다..
    • asc(오름차순): 결과가 커질수록 순위 값도 커집니다. -> 결과가 클수록 낮은 순위
    • (기본) desc(내림차순): 결과가 커질수록 순위 값은 작아집니다. -> 결과가 클수록 높은 순위

  • 값이 동일하면 동일한 순위가 할당되고, 순위 번호 시퀀스에 간격이 동일 순위 이후에 삽입됩니다.
    • (ex) 값 (6, 9, 9, 14)의 순위 -> (1, 2, 2, 4)

 

RANK_DENSE(식, ['asc' | 'desc'])

  • 파티션에 있는 현재 행의 결과에 따른 조밀 순위를 반환합니다.
  • 오름차순 또는 내림차순으로 지정하려면 선택 사항 'asc' | 'desc' 인수를 사용합니다. -> (기본) desc
  • 값이 동일하면 동일한 순위가 할당되지만, 순위 번호 시퀀스에 간격이 삽입되지 않습니다.
    • (ex) 값 (6, 9, 9, 14)의 순위 -> (1, 2, 2, 3)

 

RANK_MODIFIED(식, ['asc' | 'desc'])

  • 파티션에 있는 현재 행의 결과에 따른 수정된 경쟁 순위를 반환합니다.
  • 오름차순 또는 내림차순으로 지정하려면 선택 사항 'asc' | 'desc' 인수를 사용합니다. -> (기본) desc
  • 값이 동일하면 동일한 순위가 할당되고, 순위 번호 시퀀스에 간격이 동일 순위 이전에 삽입됩니다.
    • (ex) 값 (6, 9, 9, 14)의 순위 -> (1, 3, 3, 4)

 

RANK_PERCENTILE(식, ['asc' | 'desc'])

  • 파티션에 있는 현재 행의 결과에 따른 백분위수 순위를 반환합니다.
  • 오름차순 또는 내림차순으로 지정하려면 선택 사항 'asc' | 'desc' 인수를 사용합니다. -> (기본) asc
    • (ex) 값 (6, 9, 9, 14)의 순위 -> (0.00, 0.67, 0.67, 1.00)

 

RANK_UNIQUE(식, ['asc' | 'desc'])

  • 파티션에 있는 현재 행의 결과에 따른 고유 순위를 반환합니다.
  • 오름차순 또는 내림차순으로 지정하려면 선택 사항 'asc' | 'desc' 인수를 사용합니다. -> (기본) desc
  • 값이 동일해도 다른 순위가 할당됩니다.
    • (ex) 값 (6, 9, 9, 14)의 순위 -> (1, 2, 3, 4)

 

< RUNNING 류 > -> 누계

RUNNING_AVG(식)

  • 파티션에 있는 첫 번째 행에서 현재 행까지의 결과의 누계 평균을 반환합니다. 
  • 아래 예시는 Order Date 필드를 파티션으로 간주한 결과입니다.
  • (ex) RUNNING_AVG(SUM(Profit))

 

RUNNING_COUNT(식)

  • 파티션에 있는 첫 번째 행에서 현재 행까지의 결과의 누계 카운트를 반환합니다.
  • 아래 예시는 Order Date 필드를 파티션으로 간주한 결과입니다.
  • (ex) RUNNING_COUNT(SUM(Profit))
    • 마지막 행을 통해 테이블이 총 16개의 row 데이터로 이루어져 있음을 알 수 있습니다!

 

RUNNING_MAX(식)

  • 파티션에 있는 첫 번째 행에서 현재 행까지의 결과의 누계 최대값을 반환합니다.
  • 아래 예시는 Order Date 필드를 파티션으로 간주한 결과입니다.
  • (ex) RUNNING_MAX(SUM(Profit))
    • 마지막 행을 통해 각 항목의 최대값을 알 수 있습니다.

 

RUNNING_MIN(식)

  • 파티션에 있는 첫 번째 행에서 현재 행까지의  결과의 누계 최소값을 반환합니다.
  • 아래 예시는 Order Date 필드를 파티션으로 간주한 결과입니다.
  • (ex) RUNNING_MIN(SUM(Profit))
    • 마지막 행을 통해 각 항목의 최소값을 알 수 있습니다.

 

RUNNING_SUM(식)

  • 파티션에 있는 첫 번째 행에서 현재 행까지의  결과의 누적 합계를 반환합니다.
  • 아래 예시는 Order Date 필드를 파티션으로 간주한 결과입니다.
  • (ex) RUNNING_SUM(SUM(Profit))
    • 마지막 행을 통해 각 항목의 누적 합계를 알 수 있습니다.

 

SIZE()

  • 파티션의 행 개수를 반환합니다.

 

TOTAL(식)

  • 지정된 총합계를 반환합니다.
  • TOTAL(SUM([매출])) -> 지정한 테이블 계산 범위에 따라 매출 총합계를 계산합니다.
  • 아래 이미지는 주문일자 별로 계산 범위를 지정하여 TOTAL()을 계산.

 

  • (ex) 고객 세그먼트로 분할된 매출 파이 차트에서 TOTAL()을 활용한 전체 매출 계산
    • 아래 뷰에서 단순 SUM([매출])은 고객 세그먼트 차원으로 분할하여 표현함 -> 따라서 전체 매출 합계를 계산하려면, TOTAL() 필요!
    • 최종 TOTAL(SUM([매출]))을 시트 제목에 사용하기 위해 마크 카드 세부 정보에 올립니다.

 

WINDOW_AVG(식, [시작, 끝])

  • 의 평균을 반환합니다.
  • [시작, 끝]을 생략하면 전체 파티션이 사용됩니다.
  • 현재 화면의 VLOD와 상관없이 평균값 계산 가능 -> 세부 수준 계산식(INCLUDE, EXCLUDE, FIXED)과 비슷한 기능을 할 수 있는 것 같음
  • (ex) 전체 년-월 별 Sales 합계의 평균값보다 크거나 작은 경우를 색상으로 표현
    • 계산된 필드 생성 
      •  SUM(Sales) >= WINDOW_AVG(SUM(Sales))
        • WINDOW_AVG(SUM(Sales)): [시작, 끝]을 생략했으므로, 전체 파티션(테이블)의 평균 Sales 계산

 

  • 테이블 계산 범위를 각 연도별(패널)로 변경하여 연도별 평균값을 기준으로 변경

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(추가) 공간 관련 함수

BUFFER(geometry, number, units)

  • geometry(주로 MAKEPOINT 공간 개체로 사용?)을 중심으로 number(지정된 거리) units(단위)만큼의 버퍼를 반환합니다.
  • (ex) BUFFER(MAKEPOINT(47.59, -122.32), 5, 'km')

 

MAKELINE(start, end)

  • start(주로 MAKEPOINT 공간 개체로 사용?)end(주로 MAKEPOINT 공간 개체로 사용?) 사이의 라인을 반환합니다.
  • (ex) MAKELINE([Start], [End])

 

MAKEPOINT(숫자, 숫자) 또는 MAKEPOINT(숫자, 숫자, 숫자)

  • MAKEPOINT(숫자, 숫자): 위도, 경도로 구성된 공간 개체를 반환
  • MAKEPOINT(숫자, 숫자, 숫자): x 좌표, y 좌표 및 SRID로 구성된 공간 개체 반환 

 

마무리

이번 포스팅에서는 Tableau의 '계산된 필드'에 관한 내용을 정리하였습니다. Tableau에서 계산된 필드를 생성하는 방법과 계산된 필드에서 사용하는 다양한 함수를 정리하였습니다. 계산된 필드는 주어진 데이터셋에서 시각화를 위해 원하는 계산을 수행하는 필드를 만들어서 활용하기에 매우 유용한 기능인 것 같습니다.
이번 포스팅이 도움이 필요하신 분들에게 유용하게 활용이 되면 좋겠습니다.
감사합니다. :)