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:
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'
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
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])
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!.
Al tratar de Expandir la columna se nos sugiere tres campos u opciones: HasError, Value o Error
Si expandiéramos las tres opciones veríamos:
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
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"
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'.
Veremos hoy algunas formas de manejar los errores en Power Query.
Partiremos de un sencillo listado de números, textos, vacíos y 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'
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
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])
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!.
Al tratar de Expandir la columna se nos sugiere tres campos u opciones: HasError, Value o Error
Si expandiéramos las tres opciones veríamos:
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
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"
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.