Compartir a través de


Uso adecuado de funciones de error

Como modelador de datos, al escribir una expresión de DAX que podría generar un error en tiempo de evaluación, puede considerar el uso de dos funciones de DAX útiles.

  • La función ISERROR, que toma una sola expresión y devuelve TRUE si esa expresión produce un error.
  • La función IFERROR, que acepta dos expresiones. Si la primera expresión produce un error, se devuelve el valor de la segunda expresión. De hecho, es una implementación más optimizada de anidar la función ISERROR dentro de una función IF.

Sin embargo, aunque estas funciones pueden ser útiles y pueden contribuir a escribir expresiones fáciles de entender, también pueden degradar significativamente el rendimiento de los cálculos. Esto puede ocurrir porque estas funciones aumentan el número de exámenes del motor de almacenamiento necesarios.

La mayoría de los errores en tiempo de evaluación se deben a valores BLANK o cero inesperados, o bien a una conversión de tipo de datos no válida.

Recomendaciones

Es mejor evitar el uso de las funciones ISERROR y IFERROR. En su lugar, aplique estrategias defensivas al desarrollar el modelo y escribir expresiones. Las estrategias pueden incluir:

  • Asegurarse de que los datos de calidad se cargan en el modelo: Usar transformaciones de Power Query para quitar o sustituir valores no válidos o que faltan, y para establecer tipos de datos correctos. También se puede usar una transformación de Power Query para filtrar filas cuando se producen errores, como la conversión de datos no válida.

    También se puede controlar la calidad de los datos si se establece la propiedad Is Nullable de la columna del modelo en Off, lo que producirá un error en la actualización de los datos en caso de que se encuentren valores BLANK. Si se produce este error, los datos cargados como resultado de una actualización correcta permanecerán en las tablas.

  • Uso de la función IF: La expresión de prueba lógica de la función IF puede determinar si se produciría un resultado de error. Tenga en cuenta que, al igual que las funciones de ISERROR y IFERROR, esta función puede dar lugar a exámenes adicionales del motor de almacenamiento, pero probablemente funcionará mejor que ellos, ya que no es necesario generar ningún error.

  • Uso de funciones tolerantes a errores: Algunas funciones de DAX probarán y compensarán las condiciones de error. Estas funciones permiten escribir un resultado alternativo que se devolvería en su lugar. La función DIVIDE es un ejemplo de este tipo. Para obtener instrucciones adicionales sobre esta función, lea el artículo DAX: función DIVIDE frente al operador de división (/).

Ejemplo

La siguiente expresión de medida comprueba si se produciría un error. Devuelve BLANK en esta instancia (que es el caso cuando no le proporciona a la función IF una expresión de valor en caso de falso).

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

Esta siguiente versión de la expresión de medida se ha mejorado mediante el uso de la función IFERROR en lugar de las funciones IF y ISERROR.

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

Sin embargo, esta versión final de la expresión de medida logra el mismo resultado, pero de forma más eficaz y elegante.

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