Solucionar erros de fórmula

Objetivos de aprendizagem

Após concluir esta unidade, você estará apto a:
  • Entender as causas dos erros de fórmula comuns.
  • Solucionar problemas de campos de fórmula avançados.

Erros de sintaxe

Até mesmo os mestres da fórmula avançada às vezes têm problemas com as fórmulas. Os erros de fórmula mais comuns são erros de sintaxe. Para verificar a sintaxe de sua fórmula a qualquer momento, clique em Verificar sintaxe.

Parênteses ausentes ou extras

É fácil esquecer ou digitar acidentalmente um parêntese extra na sua fórmula. Esse erro é especialmente comum ao aninhar declarações lógicas, como IF() AND() e OR().

Nesta fórmula, por exemplo, está faltando um parêntese de fechamento no final.

Erro de sintaxe para um parêntese ausente

Você também receberá esse erro se tiver muitos parênteses ou uma vírgula fora do lugar dentro de uma função. Esta é a mesma fórmula, mas com um parêntese extra.

Erro de sintaxe para um parêntese extra

Campo não existe

Quando se trata de erros de sintaxe, o Editor de fórmula avançado é seu amigo. É quase impossível errar o nome de um campo ou de uma função quando você está usando os botões Inserir operador ou Inserir campo.

Erro de sintaxe para um nome do campo escrito incorretamente

Aqui, pretendemos fazer referência ao campo Principal__c, não ao Principle__c. Você também encontra esse erro quando se esquece de colocar as aspas em torno de uma string de texto.

Número incorreto de parâmetros

Se você usar o número incorreto de parâmetros para determinada função, encontrará erros de sintaxe. Tome ainda mais cuidado com funções que têm um número variável de parâmetros, como CASE().

Erro de sintaxe para o número incorreto de parâmetros em uma função

Esta fórmula não tinha o último argumento, o caso de fall-through, na declaração CASE(). O Editor de fórmula assumiu que queríamos verificar apenas quatro casos, não cinco. Então, ele procurou 10 argumentos no total, quando na verdade queríamos 12.

Função desconhecida

Você também encontra erros quando erra o nome da função ou tenta usar uma função que não existe.

Erro de sintaxe para uma função desconhecida

Esta fórmula tenta fazer referência à função MINIMUM(), que não existe. Queríamos usar MIN(), que extrai uma lista de números e retorna o mínimo.

Trabalhando com tipos de dados diferentes

Ao criar uma fórmula, pense em qual tipo de dado você quer que ela retorne antes de escrevê-la. Se sua fórmula retornar um tipo de dado diferente daquele que você selecionou, não será possível salvá-la.

É fácil misturar tipos de dados ao converter um valor entre tipos ou usar tipos de dados similares, como data e data/hora ou número e moeda. Esta fórmula, por exemplo, é escrita para retornar um valor de data quando o tipo de retorno da fórmula selecionada for data/hora.

O tipo de retorno desta fórmula é diferente do tipo de dado do valor que ela foi escrita para retornar.

Para corrigir esse erro, você pode alterar o tipo de retorno do campo de fórmula para data. Ou pode substituir TODAY() por NOW() para produzir um valor de data/hora em vez de uma data.

Compilar o tamanho e os erros de comprimento da fórmula

Os campos de fórmula são importantes, mas têm um tamanho limitado. As fórmulas são limitadas a 3.900 caracteres ou 4.000 bytes, incluindo espaços, caracteres de retorno e comentários, e não podem exceder 5.000 bytes quando compiladas. É importante entender as diferenças entre essas restrições de tamanho e como contorná-las ou se manter dentro delas.

Limite de comprimento

As fórmulas são limitadas a 3.900 caracteres. Você pode encurtar fórmulas longas de várias maneiras. Substituir AND() por &&, por exemplo, poupa alguns caracteres a cada uso, assim como substituir declarações aninhadas IF() por uma declaração CASE(). Nomes de campo e comentários mais curtos também fazem uma diferença pequena, mas significativa, no comprimento da sua fórmula.

Se seu campo de fórmula for significativamente maior que 3.900 caracteres, use um campo de fórmula auxiliar.

Limite de tamanho de compilação

Uma fórmula com menos de 3.900 caracteres ainda pode exceder o limite de tamanho de compilação de 5.000 bytes. Quando uma fórmula excede o limite de tamanho de compilação, criar campos auxiliares e encurtar nomes de campo ou comentários não faz diferença. Quando você faz referência a um campo auxiliar, o tamanho de compilação dele é adicionado ao tamanho de compilação da fórmula que faz referência a ele. Uma forma de reduzir o tamanho de compilação de uma fórmula é minimizar referências a outros campos de fórmula.

Alguns métodos para reduzir o comprimento da fórmula, como substituir declarações aninhadas IF() por uma declaração CASE(), também reduzem o tamanho de compilação de uma fórmula.

Considere dois campos:
  • Date1__c é um campo de data.
  • Date2__c é um campo de fórmula que cria uma data a partir do Date1__c.
    DATE( YEAR( Date1__c ), MONTH( Date1__c ), DAY( Date1__c ) )

A fórmula a seguir retorna a data do último dia do mês para uma determinada data (suponha que fevereiro sempre tem 28 dias):

DATE(
 YEAR( SomeDate__c ),
 MONTH( SomeDate__c ),
 IF(
   OR(
     MONTH( SomeDate__c ) = 4,
     MONTH( SomeDate__c ) = 6,
     MONTH( SomeDate__c ) = 9,
     MONTH( SomeDate__c ) = 11
   ),
   30,
   IF(
     MONTH( SomeDate__c ) = 2,
     28,
     31
   )
 )
)

A fórmula primeiro verifica meses com 30 dias, depois fevereiro, e os meses restantes têm 31 dias. Ela exige uma função IF() aninhada, que não é muito legível e compila 1069 caracteres para Date1__c e enormes 7.271 caracteres para Date2__c! Por quê? Porque a fórmula faz referência à data sete vezes. Compare isso com esta versão revisada da fórmula:

DATE(
 YEAR( SomeDate__c ),
 MONTH( SomeDate__c ),
 CASE(
   MONTH( SomeDate__c ),
   2, 28,
   4, 30,
   6, 30,
   9, 30,
   11, 30,
   31
 )
)

Além de ser mais fácil de ler, a fórmula compila apenas 645 caracteres para Date1__c e 3.309 caracteres para Date2__c, e agora faz referência à data três vezes em vez de sete.

Este exemplo veio da Comunidade de respostas do Salesforce. Uma lista de opções armazena o nome de um agente responsável por uma oportunidade. A fórmula calcula uma comissão com base no valor da comissão base e em um multiplicador. Mas como Base_Commission__c é mencionado em cada condição da declaração CASE(), a fórmula excede o tamanho de compilação.

CASE( Agent__c,
  "John", Base_Commission__c * 2,
  "Jane", Base_Commission__c * 6,
  /* Repeat for many other agents */
  Base_Commission__c
)

Para corrigir isso, mova Base_Commission__c para fora da função CASE(). A fórmula pode ser reescrita como:

Base_Commission__c * CASE( Agent__c,
  "John", 2,
  "Jane", 6,
  /* Repeat for many other agents */
  1
)

Mesmo que a comissão de base seja apenas um campo de moeda e não uma fórmula propriamente dita, fazer referência a ela uma vez em vez de várias vezes reduz consideravelmente o tamanho da compilação da fórmula.