Compartilhar via


Uso apropriado de funções de erro

Como modelador de dados, ao escrever uma expressão DAX que pode gerar um erro de tempo de avaliação, você pode considerar o uso de duas funções de DAX úteis.

  • A função ISERROR, que usa uma única expressão e retorna TRUE se essa expressão resultar em erro.
  • A função IFERROR, que usa duas expressões. Se a primeira expressão resultar em erro, o valor da segunda expressão será retornado. Na verdade, é uma implementação mais otimizada de aninhamento da função ISERROR dentro de uma função IF.

No entanto, embora essas funções possam ser úteis e possam contribuir para escrever expressões fáceis de entender, elas também podem prejudicar significativamente o desempenho dos cálculos. Isso pode acontecer porque essas funções aumentam o número de verificações do mecanismo de armazenamento necessárias.

A maioria dos erros de tempo de avaliação ocorre devido a valores BLANKs inesperados ou valores zero, ou devido à conversão de tipo de dados inválidos.

Recomendações

É melhor evitar o uso das funções ISERROR e IFERROR. Em vez disso, aplique estratégias defensivas ao desenvolver o modelo e escrever expressões. As estratégias podem incluir:

  • Garantir que os dados de qualidade sejam carregados no modelo: usar transformações do Power Query para remover ou substituir valores inválidos ou ausentes e definir tipos de dados corretos. Uma transformação do Power Query também pode ser usada para filtrar linhas quando ocorrem erros, como conversão de dados inválida.

    A qualidade dos dados também pode ser controlada com a definição da propriedade Is Nullable da coluna do modelo como Off, o que fará a atualização dos dados falhar quando valores BLANKs forem encontrados. Se essa falha ocorrer, os dados carregados como resultado de uma atualização bem-sucedida permanecerão nas tabelas.

  • Usando a função IF: A expressão de teste lógico da função IF pode determinar se um resultado de erro ocorreria. Observe que, como as funções ISERROR e IFERROR, essa função pode resultar em verificações adicionais do mecanismo de armazenamento, mas provavelmente terá um desempenho melhor do que elas, pois nenhum erro precisa ser gerado.

  • Usando funções tolerantes a erros: Algumas funções DAX testarão e compensarão as condições de erro. Essas funções permitem que você insira um resultado alternativo que seria retornado no lugar. A função DIVIDE é um desses exemplos. Para obter orientações adicionais sobre essa função, leia o artigo DAX: função DIVIDE versus operador de divisão (/).

Exemplo

A expressão de medida a seguir testa se um erro seria gerado. Ele retorna BLANK nesta instância (que é o caso em que você não fornece a função IF com uma expressão value-if-false).

Profit Margin
= IF(ISERROR([Profit] / [Sales]))

Esta próxima versão da expressão de medida foi aprimorada usando a função IFERROR no lugar das funções IF e ISERROR.

Profit Margin
= IFERROR([Profit] / [Sales], BLANK())

No entanto, esta versão final da expressão de medida obtém o mesmo resultado, ainda mais eficiente e elegantemente.

Profit Margin
= DIVIDE([Profit], [Sales])