Partilhar via


Uso adequado de funções de erro

Como um modelador de dados, quando você escreve uma expressão DAX que pode gerar um erro no tempo de avaliação, você pode considerar o uso de duas funções 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 aceita 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 contribuir para escrever expressões fáceis de entender, elas também podem degradar 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 no momento da avaliação são devidos a BLANKs inesperados, valores zero ou conversões de tipos de dados inválidas.

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 são carregados no modelo: Utilizar transformações do Power Query para remover ou substituir valores inválidos ou em falta e para definir os tipos de dados corretos. Uma transformação do Power Query também pode ser utilizada para filtrar linhas quando ocorrem erros, como conversão de dados inválida.

    A qualidade dos dados também pode ser controlada definindo a coluna do modelo propriedade Is Nullable como Off, que falhará na atualização de dados caso BLANKs sejam 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 ocorreria um resultado de erro. 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 em vez disso. A função DIVIDE é um desses exemplos. Para obter orientações adicionais sobre esta função, leia o artigo DAX: DIVIDE função vs 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 quando 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 melhorada 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 da medida alcança o mesmo resultado, ainda que de forma mais eficiente e elegante.

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