Leer en inglés

Compartir a través de


Control de errores

Al igual que Excel y el lenguaje DAX tienen una función IFERROR, Power Query tiene su propia sintaxis para comprobar y detectar errores.

Como se mencionó en el artículo sobre cómo tratar los errores en Power Query, los errores pueden aparecer tanto en el nivel de paso como en el de celda. Este artículo se centra en cómo detectar y gestionar los errores en función de su propia lógica específica.

Nota

Para mostrar este concepto, en este artículo se utiliza un libro de Excel como origen de datos. Los conceptos que se muestran aquí se aplican a todos los valores de Power Query y no solo a los procedentes de un libro de Excel.

El origen de datos de ejemplo de esta demostración es un libro de Excel con la tabla siguiente.

Captura de pantalla de datos de ejemplo de un libro de Excel que contiene tres errores.

Esta tabla de un libro de Excel tiene errores de Excel, como #NULL!, #REF! y #DIV/0! en la columna Tarifa estándar. Al importar esta tabla en el editor de Power Query, la siguiente imagen muestra el aspecto que tiene.

Captura de pantalla de la tabla de ejemplo cargada en Power Query.

Observe cómo se muestran los errores del libro de Excel con el valor [Error] en cada una de las celdas.

En este artículo, aprenda a reemplazar un error por otro valor. Además, también podrá aprender a detectar un error y a usarlo para su propia lógica específica.

Proporcionar un valor alternativo al encontrar errores

En este caso, el objetivo es crear una nueva columna de Tarifa final en el origen de datos de ejemplo en la que se usan los valores de la columna Tarifa estándar. Si hay algún error, usa el valor de la columna Tarifa especial correspondiente.

Para crear una nueva columna personalizada, vaya al menú Agregar columna y seleccione Columna personalizada. En la ventana Columna personalizada, escriba la fórmula try [Standard Rate] otherwise [Special Rate]. Asigne a esta nueva columna el nombre de Tarifa final.

Captura de pantalla con el cuadro de diálogo Columna personalizada abierta y una fórmula de prueba especificada en la columna personalizada.

Esta fórmula intenta evaluar la columna de Tarifa estándar y muestra su valor si no se encuentran errores. Si se encuentran errores en la columna Tarifa estándar, la salida es el valor definido después de la instrucción otherwise que, en este caso, es la columna Tarifa especial.

Después de agregar los tipos de datos correctos a todas las columnas de la tabla, la siguiente imagen muestra el aspecto final de la tabla.

Captura de pantalla de la tabla con los errores de Tarifa estándar reemplazados por la tarifa especial en la columna Tarifa final.

Nota

Como enfoque alternativo, también puede escribir la fórmula try [Standard Rate] catch ()=> [Special Rate], que es equivalente a la fórmula anterior, pero mediante la palabra clave "catch" con una función que no requiere parámetros.

La palabra clave catch se introdujo en Power Query en mayo de 2022.

Proporcionar su propia lógica de error condicional

Utilizando el mismo origen de datos de ejemplo de la sección anterior, el nuevo objetivo es crear una nueva columna para la Tarifa final. Si el valor de Tarifa estándar existe, se usa ese valor. De lo contrario, se usa el valor de la columna Tarifa especial, excepto para las filas con cualquier error de #REF!.

Nota

El único propósito de excluir el error #REF! es a efectos de demostración. Con los conceptos expuestos en este artículo, puede dirigirse a cualquier campo de su elección desde el registro de errores.

Al seleccionar cualquiera de los espacios en blanco junto al valor de error, obtendrá el panel de detalles en la parte inferior de la pantalla. El panel de detalles contiene el motivo del error, DataFormat.Error y el mensaje de error Invalid cell value '#REF!':

Captura de pantalla del error seleccionado, con un mensaje de error en la parte inferior del cuadro de diálogo.

Solo puede seleccionar una celda a la vez, por lo que solo puede examinar eficazmente los componentes de error de un valor de error a la vez. En este punto creará una nueva columna personalizada y usará la expresión try.

Uso de try con lógica personalizada

Para crear una nueva columna personalizada, vaya al menú Agregar columna y seleccione Columna personalizada. En la ventana Columna personalizada, escriba la fórmula try [Standard Rate]. Asigne a esta nueva columna el nombre Todos los errores.

Captura de pantalla con el cuadro de diálogo Columna personalizada abierta y una fórmula try escrita en la columna personalizada.

La expresión try convierte valores y errores en un valor de registro que indica si la expresión try manejó un error o no, y el valor adecuado o el registro de error.

Captura de pantalla de la tabla con la columna Todos los errores agregados y los errores mostrados como Registros.

Puede expandir esta columna recién creada con valores de registro y examinar los campos disponibles que se van a expandir seleccionando el icono situado junto al encabezado de columna.

Captura de pantalla de la columna Todos los errores con el icono de expansión resaltado y los cuadros HasError, Valor y Error seleccionados.

Esta operación expone tres campos nuevos:

  • All Errors.HasError: muestra si el valor de la columna Tarifa estándar tenía un error o no.
  • All Errors.Value: si el valor de la columna Tarifa estándar no tenía ningún error, esta columna muestra el valor de la columna Tarifa estándar. En el caso de los valores con errores, este campo no está disponible y durante la operación de expansión, esta columna tiene valores null.
  • All Errors.Error: si el valor de la columna Tarifa estándar tiene un error, esta columna muestra el registro de error para el valor de la columna Tarifa estándar. En el caso de los valores sin errores, este campo no está disponible y durante la operación de expansión, esta columna tiene valores null.

Captura de pantalla de la tabla con los nuevos campos de columnas, con un valor All.Errors.Error seleccionado, donde se muestran los mensajes de error debajo de la tabla.

Para seguir investigando, puede expandir la columna All Errors.Error para obtener los tres componentes del registro de errores:

  • Motivo del error
  • Mensaje de error
  • Detalle del error

Después de realizar la operación de expansión, el campo All Errors.Error.Message muestra el mensaje de error específico que indica exactamente qué error de Excel tiene cada celda. El mensaje de error se obtiene del campo Mensaje de error del registro de errores.

Captura de pantalla con los mensajes de error específicos mostrados.

Ahora, con cada mensaje de error en una nueva columna, puede crear una nueva columna condicional con el nombre de Tarifa final y las cláusulas siguientes:

  • Si el valor de la columna All Errors.Errors.Message es igual a null, la salida es el valor de la columna Tarifa estándar.
  • De lo contrario, si el valor de la columna All Errors.Errors.Message no es igual a Invalid cell value '#REF!'., la salida es el valor de la columna Tarifa especial.
  • De lo contrario, será null.

Captura de pantalla del cuadro de diálogo Agregar columna condicional con todas las condiciones de error establecidas para la nueva columna.

Tras conservar solo las columnas de Cuenta, Tarifa estándar, Tarifa especial y Tarifa final, y de agregar el tipo de datos correcto para cada columna, la siguiente imagen muestra el aspecto final de la tabla.

Captura de pantalla de la tabla final con las columnas restantes con los tipos de datos adecuados.

Uso de try y catch con lógica personalizada

Como alternativa, también puede crear una nueva columna personalizada mediante las palabras clave try y catch.

try [Standard Rate] catch (r)=> if r[Message] <> "Invalid cell value '#REF!'." then [Special Rate] else null

Cuadro de diálogo de columna personalizada con una nueva fórmula que muestra el enfoque de sintaxis try y catch.

Más recursos