Appropriate use of error functions (Utilização adequada de funções de erro)

Como um modelador de dados, ao escrever uma expressão DAX que pode gerar um erro em 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 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 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 de tempo de avaliação são devidos a BLANKs inesperados ou valores zero, ou conversão de tipo de dados inválida.

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: utilize as 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 Is Nullable property 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 SE: A expressão de teste lógico da função SE 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 condições de erro. Essas funções permitem que você insira um resultado alternativo que seria retornado em vez disso. A função DIVIDIR é um desses exemplos. Para obter orientações adicionais sobre essa função, leia o artigo DAX: DIVIDE function vs divide operator (/).

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 measure 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])