---
schema_version: "1"
id: 5932f5a7a1b3959dfac3e34b27833b3bc81f9444601b962443f1917227823402
title: Práticas recomendadas para a criação de cálculos no Tableau
collection: tableau
version: next
locale: pt-br
portal_url: https://docs.salesforce.com/tableau/next/pt-br/public/desktop/calculations_calculatedfields_bestpractices.md
canonical_url: https://help.tableau.com/v0.0/public/desktop/pt-br/calculations_calculatedfields_bestpractices.htm
source_site: help.tableau.com
content_type: documentation
content_hash: f45ca9b7d0969866de2691409a936807dfdf4af92b1797fd5460856b6cc89f64
description: Tips and guidelines for creating efficient calculations in Tableau to optimize workbook performance.
---
[Pular para o conteúdo principal](#main-content)

# Práticas recomendadas para a criação de cálculos no Tableau

## Regra geral: evite usar um campo calculado várias vezes em um outro cálculo

Fazer referência ao mesmo campo calculado várias vezes em outro cálculo resultará em problemas de desempenho. Se você usar um campo calculado em um cálculo (também conhecido como criação de um Cálculo aninhado), tente referenciá-lo apenas uma vez.

Observe que fazer referência a um campo (campo de terminal) várias vezes em um cálculo não deve reduzir o desempenho.

### Exemplo

Suponhamos que você crie um campo calculado que usa um cálculo complexo de várias linhas para encontrar em tweets menções ou nomes de usuários do Twitter. O campo calculado é chamado de Nome de usuário do Twitter. Todos os nomes de usuário retornados começam com o sinal "@" (por exemplo: @usuário).

Para a análise, remova o símbolo "@".

Para fazer isso, use o seguinte cálculo para remover o primeiro caractere da cadeia de caracteres:

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

Esse cálculo é bem simples. No entanto, como ele faz referência duas vezes ao cálculo do Nome de usuário do Twitter, ele executa esse cálculo duas vezes para cada registro em sua fonte de dados: uma para a função RIGHT e a outra para a função LEN.

Para evitar o mesmo cálculo mais de uma vez, é possível reescrevê-lo para um que use o cálculo do Nome de usuário do Twitter apenas uma vez. Neste exemplo, você pode usar MID para alcançar o mesmo objetivo:

`MID([Twitter Handle], 2)`

## Dica 1: converter várias comparações de igualdade em uma expressão CASE ou um grupo

Suponhamos que você tenha o seguinte cálculo, que usa o campo calculado Pessoa (calc.) várias vezes e aplica uma série de funções OR. Esse cálculo, apesar de ser uma simples expressão lógica, causará problemas de desempenho de consulta, pois executa o cálculo Pessoa (calc.) pelo menos dez vezes.

`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`

Em vez de usar uma comparação de igualdade, tente as soluções a seguir.

### Solução 1

Use uma expressão CASE. Por exemplo:

`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`

Neste exemplo, o campo calculado Pessoa (calc.) é referenciado somente uma vez. Portanto, é realizado somente uma vez. As expressões CASE também são otimizadas na linha de consulta, para que você obtenha um benefício de desempenho adicional.

### Solução 2

Crie um grupo, em vez de um campo calculado. Para obter mais informações, consulte [Agrupar seus dados](https://help.tableau.com/v0.0/public/desktop/pt-br/sortgroup_groups_creating.htm).

## Dica 2: converter vários cálculos de cadeia de caracteres em uma única expressão REGEXP

**Observação**: os cálculos do REGEXP estão disponíveis somente ao usar as extrações de dados do Tableau ou quando conectados a fontes de dados de arquivos de texto, Hadoop Hive, Google BigQuery, PostgreSQL, Extração de dados do Tableau, Microsoft Excel, Salesforce, Vertica, Pivotal Greenplum, Teradata (versão 14.1 e posterior) e Oracle. Para obter mais informações, consulte [Funções adicionais (Regex, Hadoop Hive, Google Big Query)](https://help.tableau.com/v0.0/public/desktop/pt-br/functions_functions_additional.htm).

  

### Exemplo 1: CONTAINS

Suponhamos que você tenha o seguinte cálculo, que usa o campo calculado Categoria (calc.) várias vezes. Esse cálculo, apesar de também ser uma simples expressão lógica, causará problemas de desempenho de consulta, pois executa o cálculo de Categoria (calc.) várias vezes.

`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`

Você pode usar uma expressão REGEXP para obter os mesmos resultados sem muita repetição.

#### Solução

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

  

Com cálculos de cadeia de caracteres que usam um padrão semelhante, você pode usar a mesma expressão REGEXP.

### Exemplo 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'`

#### Solução

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

Observe que o símbolo "^" é usado nessa solução.

### Exemplo 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`

#### Solução

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

Observe que o símbolo "$" é usado nessa solução.

## Dica 3: manipular as cadeias de caracteres com REGEXP em vez de LEFT, MID, RIGHT, FIND, LEN

As expressões regulares podem ser uma ferramenta muito eficiente. Ao manipular uma cadeia de caracteres complexa, considere o uso de expressões regulares. Em muitos casos, usar uma expressão regular resultará em um cálculo mais curto e eficiente. Para obter mais informações sobre expressões regulares, consulte a publicação [Torne-se um regex regular e lide com dados imperfeitos](https://www.tableau.com/pt-br/about/blog/2015/6/become-regular-regular-expressions-39802) no blog do Tableau.

### Exemplo 1

Suponhamos que você tenha o seguinte cálculo, que remove protocolos de URLs. Por exemplo: "https://www.tableau.com" torna-se "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`

#### Solução

Use uma função REGEXP\_REPLACE para simplificar o cálculo e melhorar o desempenho.

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

### Exemplo 2

Suponhamos que você tenha o seguinte cálculo, que retorna a segunda parte de um endereço IPv4. Por exemplo: "172.16.0.1" torna-se "16".

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

#### Solução

Você pode simplificar o cálculo e melhorar o desempenho usando uma função REGEXP\_EXTRACT.

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

## Dica 4: não usar conjuntos em cálculos

Se você estiver usando conjuntos em um cálculo, considere substituí-los por um cálculo alternativo, mas equivalente.

### Exemplo

Suponhamos que você tenha o seguinte cálculo, que usa o conjunto Clientes principais (conjunto).

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

### Solução 1

Se o conjunto for simples, você pode criar um campo calculado que retorna o mesmo resultado do conjunto. Por exemplo:

`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`

  

**Observação**: recomenda-se o uso do padrão WHEN TRUE... ELSE nesta situação para evitar problemas de desempenho devido ao uso de conjuntos. Não é um padrão recomendado na maioria dos cenários.

### Solução 2

Se o conjunto for mais complexo, considere a criação de um grupo que mapeie todos os elementos no conjunto para um determinado valor ou atributo, como "IN", e modifique o cálculo para verificar esse valor/atributo. Por exemplo:

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

Para obter mais informações, consulte [Agrupar seus dados](https://help.tableau.com/v0.0/public/desktop/pt-br/sortgroup_groups_creating.htm) e [Criar conjuntos](https://help.tableau.com/v0.0/public/desktop/pt-br/sortgroup_sets_create.htm).

## Dica 5: não usar conjuntos para agrupar dados

Conjuntos são projetados para fazer comparações em subconjuntos de dados. Grupos são projetados para combinar os membros relacionados em um campo. Não é recomendado converter conjuntos em grupos, como mostrado no seguinte exemplo:

`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`

Isso não é recomendado pelos seguintes motivos:

- **Os conjuntos nem sempre são exclusivos**. Alguns membros podem ser exibidos em vários conjuntos. Por exemplo, Rússia poderia ser colocada tanto no conjunto Europa como no conjunto Ásia.
- **Os conjuntos nem sempre podem ser convertidos em grupos**. Se os conjuntos forem definidos por exclusão, condições ou limites, pode ser difícil ou mesmo impossível criar um grupo equivalente.

### Solução

Agrupe os dados usando o recurso Grupo. Para obter mais informações, consulte [Agrupar seus dados](https://help.tableau.com/v0.0/public/desktop/pt-br/sortgroup_groups_creating.htm).

## Consulte também

[Tipos de cálculo no Tableau](https://help.tableau.com/v0.0/public/desktop/pt-br/calculations_calculatedfields_understand_types.htm)

[Funções no Tableau](https://help.tableau.com/v0.0/public/desktop/pt-br/functions.htm)