jueves, 12 de noviembre de 2020

Power Query: Try-Otherwise-Gestionando Errores

Con bastante frecuencia nos encontramos en nuestras fuentes de daots registros o elementos en ciertos campos que bien son errores o bien están condenados a convertirse en un error... situación que provocará en nuestras consultas de Power Query comportamientos no deseados o incluso fallos estructurales :'(
Veremos hoy algunas formas de manejar los errores en Power Query.

Partiremos de un sencillo listado de números, textos, vacíos y errores:
Power Query: Try-Otherwise-Gestionando Errores

La idea es provocar, a partir de esos datos anteriores, errores en la consulta, además de los distintos errores existentes (#REF, #DIV/0, #¡NULO!,#¿NOMBRE?, etc.).
Para ello cargaremos en una consulta la tabla como siempre desde la ficha Datos > grupo Obtener y transformar > Desde Tabla o Rango.
Una vez cargada y ya en el editor de Power Query añadiremos un par de pasos.
En un primer paso cambiaremos el tipo de dato a 'text'
Power Query: Try-Otherwise-Gestionando Errores

Como era de esperar los primeros problemas están ya a la vista, y es que las celdas con errores se muestran como tal en la consulta (y en algunos casos provoca la interrupción de la carga de los datos!!).
Soluciones rápidas serían las de Reemplazar errores o incluso Quitar errores
Power Query: Try-Otherwise-Gestionando Errores

Power Query: Try-Otherwise-Gestionando Errores

Igualmente válido (personalmente la prefiero) emplear cualquiera de las opciones haciendo clic derecho del ratón sobre el campo...
Ambas suelen ser soluciones útiles y eficientes... siempre que tengamos claro la procedencia del error, y la repercusión de nuestra decisión!!.

Pero hoy nos adentraremos un poco más en el mundo del control de errores y veremos las posibilidades que ofrece la expresión try... otherwise....
Añadiremos una columna personalizada con la siguiente instrucción:
try Number.FromText([cod])
Power Query: Try-Otherwise-Gestionando Errores

La expresión M de Power Query -try- convierte tanto los valores como los errores en un registro 'record' que nos dice si la expresión probada genera un error o no, es decir, nos retornará un VERDADERO o FALSO, así como información del valor o tipo de error.
El empleo de la cláusula -otherwise- la podemos emplear junto a -try- para retornar alguna acción alternativa cuando salte el error.
Por este motivo en muchos lugares aparece como la alternativa a la función SI.ERROR(valor; valor_si_error) de Excel.

Comprobemos qué ocurre al aceptar nuestra columna personalizada con la expresión: try Number.FromText([cod])
fórmula que intenta pasar a formato número los valores almacenados como texto...
Ojo, por que Number.FromText pide como argumento una representación textual de un valor numérico... cualquier otra situación devolverá un fallo!.
Power Query: Try-Otherwise-Gestionando Errores

Al tratar de Expandir la columna se nos sugiere tres campos u opciones: HasError, Value o Error
Power Query: Try-Otherwise-Gestionando Errores

Si expandiéramos las tres opciones veríamos:
Power Query: Try-Otherwise-Gestionando Errores

Si haces clic en uno de los registros de la columna 'Error' mostrará en la parte inferior información de razón, mensaje y detalle del error (reason, message, details).
Para la gestión de errores bastaría expandir el primero de los 'campos': HasError. Suficiente para en un paso siguiente filtrar sobre este los valores FALSE
Power Query: Try-Otherwise-Gestionando Errores


Alternativamente al uso del asistente y de los botones de expandir, podríamos haber empleado la sentencia completa -try...otherwise...-.
En nuestra columna personalizada podríamos haber incluido:
=try Number.FromText([cod]) otherwise "fallo"
Power Query: Try-Otherwise-Gestionando Errores

No haciendo necesaria la acción de expandir la columna, ni trabajar sobre esos TRUE o FALSE...sencillamente damos alternativa en caso de error (bien venga de origen, o bien se haya provocado por nuestras operaciones en la columna origen...).
La lectura de la expresión sería algo así como: intenta convertir a número el valor de la columna [cod], y si generas un error devuelve el texto 'fallo'.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.