Tableau에서 계산을 만드는 최상의 방법

이 문서에서는 Tableau 에서 효율적인 계산을 만들기 위한 몇 가지 팁과 지침에 대해 설명합니다. 이 지침은 통합 문서의 성능을 최적화하는 데 도움을 주기 위한 것입니다. 통합 문서 성능을 향상시킬 수 있는 모든 방법에 대한 자세한 내용은 통합 문서 성능 최적화 시리즈를 참조하십시오.

일반적인 원칙: 또 다른 계산에서 계산된 필드를 여러 번 사용하지 않음

또 다른 계산에서 동일한 계산된 필드를 여러 번 참조하면 성능 문제가 발생합니다. 계산 내에서 계산된 필드를 사용하는 경우(중첩된 계산 만들기라고도 함) 계산에서 한 번만 참조해야 합니다.

계산에서 필드(터미널 필드)를 여러 번 참조하면 성능이 저하됩니다.

트윗에서 멘션이나 Twitter 핸들을 찾기 위해 복잡한 여러 줄의 계산을 사용하는 계산된 필드를 만든다고 가정해 보겠습니다. 계산된 필드의 제목은 Twitter Handle입니다. 반환되는 각 핸들은 '@' 기호(예: @user)로 시작합니다.

분석을 위해 '@' 기호를 제거하려고 합니다.

이렇게 하려면 다음 계산을 사용하여 문자열에서 첫 번째 문자를 제거하면 됩니다.

RIGHT([Twitter Handle], LEN([Twitter Handle]) -1)

이 계산은 매우 단순합니다. 하지만 이 계산에서 Twitter Handle 계산을 두 번 참조하므로 데이터 원본의 각 레코드에 대해 계산이 두 번 수행됩니다. 즉, RIGHT 함수에 대해 한 번 계산되고 LEN 함수에 대해 다시 한 번 계산됩니다.

동일한 계산이 여러 번 수행되지 않게 하려면 Twitter Handle 계산을 한 번만 사용하도록 계산을 다시 작성할 수 있습니다. 이 예에서는 MID를 사용하여 동일한 목적을 달성합니다.

MID([Twitter Handle], 2)

팁 1: 여러 동일성 비교를 CASE 식 또는 그룹으로 변환

계산된 필드인 Person (calc)를 여러 번 사용하고 일련의 OR 함수를 적용하는 다음과 같은 계산이 있다고 가정해 보겠습니다. 이 계산은 단순한 논리 식이지만 Person (calc) 계산을 적어도 10번 수행하므로 쿼리 성능 문제를 유발합니다.

IF [Person (calc)] = 'Henry Wilson'
OR [Person (calc)] = 'Jane Johnson'
OR [Person (calc)] = 'Michelle Kim'
OR [Person (calc)] = 'Fred Suzuki'
OR [Person (calc)] = 'Alan Wang'
THEN 'Lead'
ELSEIF [Person (calc)] = 'Susan Nguyen'
OR [Person (calc)] = 'Laura Rodriguez'
OR [Person (calc)] = 'Ashley Garcia'
OR [Person (calc)] = 'Andrew Smith'
OR [Person (calc)] = 'Adam Davis'
THEN 'IC'
END

동일성 비교를 사용하는 대신 다음과 같은 해결 방법을 시도해 보십시오.

해결 방법 1

CASE 식을 사용합니다. 예를 들면 다음과 같습니다.

CASE [Person (calc)]
WHEN 'Henry Wilson' THEN 'Lead'
WHEN 'Jane Johnson' THEN 'Lead'
WHEN 'Michelle Kim' THEN 'Lead'
WHEN 'Fred Suzuki' THEN 'Lead'
WHEN 'Alan Wang' THEN 'Lead'

WHEN 'Susan Nguyen' THEN 'IC'
WHEN 'Laura Rodriguez' THEN 'IC'
WHEN 'Ashley Garcia' THEN 'IC'
WHEN 'Andrew Smith' THEN 'IC'
WHEN 'Adam Davis' THEN 'IC'
END

이 예에서 계산된 필드인 Person (calc)는 한 번만 참조됩니다. 즉, 한 번만 실행됩니다. CASE 식은 쿼리 파이프라인에서 더욱 최적화되므로 추가적인 성능 향상을 얻을 수 있습니다.

해결 방법 2

계산된 필드 대신 그룹을 만듭니다. 자세한 내용은 데이터 그룹화를 참조하십시오.

팁 2: 여러 문자열 계산을 단일 REGEXP 식으로 변환

참고: REGEXP 계산은 Tableau 데이터 추출을 사용하거나 텍스트 파일, Hadoop Hive, Google BigQuery, PostgreSQL, Tableau 데이터 추출, Microsoft Excel, Salesforce, Vertica, Pivotal Greenplum, Teradata(버전 14.1 이상) 및 Oracle 데이터 원본에 연결한 경우에만 사용할 수 있습니다. 자세한 내용은 추가 함수를 참조하십시오.


예 1: CONTAINS

Category (calc) 계산된 필드를 여러 번 사용하는 다음과 같은 계산이 있다고 가정해 보겠습니다. 이 계산은 단순한 논리 식이지만 Category (calc) 계산을 여러 번 수행하므로 쿼리 성능 문제를 유발합니다.

IF CONTAINS([Segment (calc)],'UNKNOWN')
OR CONTAINS([Segment (calc)],'LEADER')
OR CONTAINS([Segment (calc)],'ADVERTISING')
OR CONTAINS([Segment (calc)],'CLOSED')
OR CONTAINS([Segment (calc)],'COMPETITOR')
OR CONTAINS([Segment (calc)],'REPEAT')
THEN 'UNKNOWN'
ELSE [Segment (calc)] END

REGEXP 식을 사용하면 많은 반복 없이 동일한 결과를 얻을 수 있습니다.

해결 방법

IF REGEXP_MATCH([Segment (calc)], 'UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT') THEN 'UNKNOWN'
ELSE [Segment (calc)] END


유사한 패턴을 사용하는 문자열 계산이 있는 경우 동일한 REGEXP 식을 사용할 수 있습니다.

예 2: STARTSWITH

IF STARTSWITH([Segment (calc)],'UNKNOWN')
OR STARTSWITH([Segment (calc)],'LEADER')
OR STARTSWITH([Segment (calc)],'ADVERTISING')
OR STARTSWITH([Segment (calc)],'CLOSED')
OR STARTSWITH([Segment (calc)],'COMPETITOR')
OR STARTSWITH([Segment (calc)],'REPEAT')
THEN 'UNKNOWN'

해결 방법

IF REGEXP_MATCH([Segment (calc)], '^(UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT)') THEN 'UNKNOWN'
ELSE [Segment (calc)] END

이 해결 방법에는 '^' 기호가 사용되었습니다.

예 3: ENDSWITH

IF ENDSWITH([Segment (calc)],'UNKNOWN')
OR ENDSWITH([Segment (calc)],'LEADER')
OR ENDSWITH([Segment (calc)],'ADVERTISING')
OR ENDSWITH([Segment (calc)],'CLOSED')
OR ENDSWITH([Segment (calc)],'COMPETITOR')
OR ENDSWITH([Segment (calc)],'REPEAT')
THEN 'UNKNOWN'
ELSE [Segment (calc)] END

해결 방법

IF REGEXP_MATCH([Segment (calc)], '(UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT)$') THEN 'UNKNOWN'
ELSE [Segment (calc)] END

이 해결 방법에는 '$' 기호가 사용되었습니다.

팁 3: LEFT, MID, RIGHT, FIND, LEN 대신 REGEXP로 문자열 조작

정규식은 매우 강력한 도구가 될 수 있습니다. 복잡한 문자열 조작을 수행할 때 정규식 사용을 고려해 보십시오. 많은 경우 정규식을 사용하면 더 짧고 효율적인 계산을 얻을 수 있습니다. 정규식에 대한 자세한 내용은 Tableau 블로그에서 Become a regex regular and wrangle imperfect data(링크가 새 창에서 열림)(정규식을 사용하여 불완전한 데이터 처리) 게시물을 참조하십시오.

예 1

URL에서 프로토콜을 제거하는 다음과 같은 계산이 있다고 가정해 보겠습니다. 예를 들어 "https://www.tableau.com"은 "www.tableau.com"이 됩니다.

IF (STARTSWITH([Server], "http://")) THEN
MID([Server], Len("http://") + 1)
ELSEIF(STARTSWITH([Server], "https://")) THEN
MID([Server], Len("https://") + 1)
ELSEIF(STARTSWITH([Server], "tcp:")) THEN
MID([Server], Len("tcp:") + 1)
ELSEIF(STARTSWITH([Server], "\\")) THEN
MID([Server], Len("\\") + 1)
ELSE [Server]
END

해결 방법

REGEXP_REPLACE 함수를 사용하여 계산을 단순화하고 성능을 향상시킬 수 있습니다.

REGEXP_REPLACE([Server], "^(http://|https://|tcp:|\\\\)", "")

예 2

IPv4 주소의 두 번째 부분을 반환하는 다음과 같은 계산이 있다고 가정해 보겠습니다. 예를 들어 "172.16.0.1"은 "16"이 됩니다.

IF (FINDNTH([Server], ".", 2) > 0) THEN
MID([Server],
FIND([Server], ".") + 1,
FINDNTH([Server], ".", 2) - FINDNTH([Server], ".", 1) - 1
)
END

해결 방법

REGEXP_EXTRACT 함수를 사용하여 계산을 단순화하고 성능을 향상시킬 수 있습니다.

REGEXP_EXTRACT([Server], "\.([^\.]*)\.")

팁 4: 계산에서 집합을 사용하지 않음

계산에서 집합을 사용하는 경우 집합을 대신할 수 있는 동등한 계산으로 대체하는 것을 고려하십시오.

Top Customers (set) 집합을 사용하는 다음과 같은 계산이 있다고 가정해 보겠습니다.

IF ISNULL([Customer Name]) OR [Top customers (set)] THEN [Segment] ELSE [Customer Name] END

해결 방법 1

집합이 단순한 경우 집합과 동일한 결과를 반환하는 계산된 필드를 만들 수 있습니다. 예를 들면 다음과 같습니다.

CASE [Customer Name]
WHEN 'Henry Wilson' THEN True
WHEN 'Jane Johnson' THEN True
WHEN 'Michelle Kim' THEN True
WHEN 'Fred Suzuki' THEN True
WHEN 'Alan Wang' THEN True
ELSE False
END


참고: 이 경우 집합 사용으로 인한 성능 문제를 방지하려면 WHEN TRUE … ELSE 패턴을 사용하는 것이 좋지만, 대부분의 경우 권장되는 패턴이 아닙니다.

해결 방법 2

집합이 훨씬 복잡한 경우에는 집합의 모든 요소를 ​지정된 값이나 특성에 매핑하는 그룹(예: 'IN')을 만든 다음 해당 값/특성을 확인하도록 계산을 수정해 보십시오. 예를 들면 다음과 같습니다.

IF ISNULL([Customer Name]) OR [Top Customers(group)]='IN' THEN [Segment] ELSE [Customer Name] END

자세한 내용은 데이터 그룹화집합 만들기를 참조하십시오.

팁 5: 집합을 사용하여 데이터를 그룹화하지 않음

집합은 데이터의 하위 집합을 비교하기 위한 것입니다. 그룹은 필드의 관련 멤버를 결합하기 위한 것입니다. 다음 예제와 같이 집합을 그룹으로 변환하는 것은 권장되지 않습니다.

IF [Americas Set] THEN "Americas"
ELSEIF [Africa Set] THEN "Africa"
ELSEIF [Asia Set] THEN "Asia"
ELSEIF [Europe Set] THEN "Europe"
ELSEIF [Oceania Set] THEN "Oceania"
ELSE "Unknown"
END

이 변환은 다음과 같은 이유로 권장되지 않습니다.

  • 집합은 배타적이지 않은 경우가 있습니다. 일부 멤버가 여러 집합에 나타날 수 있습니다. 예를 들어 러시아는 유럽 집합과 아시아 집합에 모두 존재할 수 있습니다.

  • 집합이 그룹으로 변환되지 않을 수 있습니다. 집합이 제외, 조건 또는 제한에 의해 정의된 경우 동등한 그룹을 만드는 것이 어렵거나 불가능할 수 있습니다.

해결 방법

그룹 기능을 사용하여 데이터를 그룹화하십시오. 자세한 내용은 데이터 그룹화를 참조하십시오.

참고 항목

효율적인 계산 만들기

통합 문서 성능 최적화

Tableau의 계산 유형

Tableau의 함수

피드백을 제공해 주셔서 감사합니다!귀하의 피드백이 제출되었습니다. 감사합니다!