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.
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.
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.
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.
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!'
:
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.
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.
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.
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
.
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.
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.
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.
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