domingo, 8 de agosto de 2021

Cargar fechas en formato Americano a través de Power Query sin modificar la configuración regional de Windows

 

Uno de los defectos de Microsoft Excel, es que comparte configuración con el sistema operativo Windows.

Cómo ejemplo, indicar que para cambiar el separador de listas por defecto en Microsoft Excel, es necesario modificarlo en el sistema operativo, lo que afectará a todos los programas que dependan de ese valor.

Sin embargo, veremos que en Power Query es posible realizar ese cambio sin afectar a ningún otro programa.

Partimos del ejemplo de ayer, en el cual se cargan todas las fechas como textos.


Caso que podíamos confirmar al aplicar un filtro y ver que las fechas no se acumulaban.

Dn este caso, al ver que al cambiar el tipo de dato a fecha en Power Query, no vamos a proceder a eliminar errores.

En su lugar haremos que Power Query detected las fechas correctamente.

A diferencia de en Excel, en Power Query sin que es posible indicar la configuración regional de los datos sin alterar la configuración del sistema operativo.

Para ello dentro del menú contextual del botón derecho, en la opción "Cambiar tipo" accederemos a la última opción "Usar configuración regional".

A través de esta opción se nos muestra una ventana en la que se nos solicitan dos datos. El tipo de dato, y la configuración regional del dato.

Para el ejemplo de la fecha en formato MMDDAAAA, seleccionamos en tipo de datos fecha y en configuración regional indicamos Inglés (Estados Unidos).

Solo con ese cambio las fechas se cargan correctamente.

La instrucción en lenguaje M es la siguiente.

Cargamos los datos directamente en Excel.

Aplicamos un filtro y en esta ocasión comprobamos que se acumulan correctamente.

Con esta opción se corrige el problema que tuvimos al importar los datos directamente en Excel.

sábado, 7 de agosto de 2021

Peligro a la hora de eliminar errores en Power Query

Ayer importabamos un listado de fechas en formato MMDDAAAA a Microsoft Excel, mediante Power Query.

Veíamos como se importaban como texto, al analizar Power Query las mil primeras líneas y entender que el único formato común era el texto.

Recordemos que al aplicar un filtro no se acumulaban ya que no se reconocían como fechas.

Es posible corregir el tipo de datos indicándolo manualmente en Power Query.

Botón derecho, Cambiar tipo, y seleccionar Fecha.

Al cambiar el tipo de dato, aplica el formato de a los que contienen datos válidos para ese formato, el resto aparecen como error.

Recordemos que estamos trabajando con una hoja de cálculo de Microsoft Excel configurada en castellano para España.

En Power Query existe la posibilidad desde el grupo "Reducir filas" de "Eliminar errores".

Esta opción elimina la fila completa en la que se detecta el error.

Automáticamente desaparecen todas las menciones al error.

Cargamos los datos en Excel, y aparentemente todo va bien.

Ha cambiado el alineado, mostrando que ahora se tratarán como números.

 Y si aplicamos un filtro veremos que todas las fechas se agrupan en meses.

Cargamos los datos a Excel, y aunque aparentemente se cargan correctamente, posñdemos apreciar que solo se han cargado 48.

Si se han cargado 48 filas de las 102 originales, esto significa que se ha cargado me osndel 50 % de las filas.

Podría no ser muy importante si no resultase que las fechas cargadas son incorrectas.

Para Power Query los herrores eran fechas que indicaban meses que no existen, sin embargo que una fecha tenga el formato correcto no significa que represente el valor original.

En este caso, de las fechas que se cargan, solo son correctas aquellas en las que coinciden el número del día con el número del mes.

El resto son incorrectas.

Es muy importante saber que realmente lo que se nos muestra como error si lo sea. 

Ante un error antes de eliminarlo directamente es mejor analizar de donde ha surgido.

viernes, 6 de agosto de 2021

Importación de fechas en formato Americano en Microsoft Excel mediante Power Query.

Repetimos la importación en Microsoft Excel, del listado de fechas en formato Americano pero en esta ocasión a través de Power Query.

Seleccionamos importar CSV.


Al tratarse de un fichero txt, no se muestra, además no existe el filtro para txt.

Podemos o seleccionar el filtro para todos los archivos, o escribir en el cuadro de texto del nombre del fichero el nombre con comodines, tal que así *.txt y pulsar Enter.

Ahora ya se muestran todos los ficheros txt.

Seleccionamos el que nos interesa y pulsamos el botón Abrir.


Al abrirse la ventana de importación vemos que se reconocen todas las fechas.

Cargamos.los.dstos a Microsoft Excel.


Vemos que se han importado los 102 registros.


Aparentemente está correcto.

Sim embargo la alineación es a la izquierda.


Si aplicamos un filtro vemos que las fechas no se acumularon.

En Power Query, con la confirmación por defecto, se importarán todas las fechas como texto.

Esto se debe a que Power Query analiza las mil primeras filas para decidir el tipo de datos.

jueves, 5 de agosto de 2021

Corrección de fechas importadas desde formato MMDDAAAA en hoja de cálculo

Si una de las peores cosas que nos puede pasar en una hoja de cálculo como Mícrosoft Excel es importar incorrectamente las fechas en formato Americano MMDDAAAA, como formato Europeo.

Peor es aún recibir un listado ya importado y no tener acceso a los datos originales para realizar una reimportación.

Hoy os mostraré un método para solucionarlo mediante fórmulas.

Mañana veremos un método mucho más rápido, pero el de hoy no permite ver la aplicación de algunas fórmulas.

La solución será la fórmula que muestro en la imagen, sin embargo vamos a desarrollarla y explicarla paso a paso.



Lo primero que debemos tener claro es que nos enfrentamos a una columna con una mezcla de textos y números, dependiendo de si la hoja de cálculo ha reconocido la fecha (en cuyo caso se comportará como un número) o si no la ha reconocido (en este caso simplemente se tratará como un texto).

Podemos verlo claramente si ampliamos el ancho de la columna, en este caso se alinearán a la derecha los datos reconocidos como fechas y a la izquierda los que no.

Si aplicamos un filtro veremos que algunos datos no se acumulan, son los que no se han reconocido como fechas.


La primera aproximación parece extraer los datos de Meses, Días y Años de la cadena de texto y luego concatenarlos en el orden correcto.

Para extraer el día, usamos la función extrae.

=EXTRAE(A2;4;2")


Pero al intentar extraer el mes de la primera fecha el dato obtenido no se corresponde con el mes.


Si arrastramos la fórmula a todas las filas, vemos que algunas si coinciden, en concreto las que están alineadas a la izquierda.


Si cambiamos el formato de los datos de la columna a Número, tendremos una pista de que está pasando.


Ahora vemos que los datos extraídos se corresponden con la fecha en formato número.


Para hacer lo que deseamos, el primer paso será partir de un tipo de datos comunes.

Para ello, vamos a pasar todos los datos a formato texto usando la función texto.

=TEXTO(A2;"DD/MM/AAAA")


Al ver el resultado de la fórmula, parece que nada a pasado, pero podemos ver que ahora ha cambiado la alineación.


Ahora toda la columna se muestra, por defecto, alineada a la izquierda, esto demuestra que ahora todos los datos son textos.


Ahora que todos los datos son del mismo tipo, podemos usar las funciones de texto para obtener días, meses y años.

Para ello usaremos las funciones Extrae, Izquierda y Derecha.


Concatenamos los datos, sin olvidar incluir los separadores, en este caso la barra.

=EXTRAE(B2;4;2)&"/"&IZQUIERDA(B2;2)&"/"&DERECHA(B2;4)


Ahora vemos que el mes y el año han intercambiado posición.


Incluso para las fechas que no se habían reconocido.


Sin embargo si aplicamos un filtro, vemos que los datos no se acumulan.

Esto nos da una pista de que lo que estamos tratando para la hoja de cálculo (Microsoft Excel, Libreoffice Calc o Google Sheets) está tratando las fechas como textos.

Aprovecharemos la función Valor para convertir el texto en su valor numérico.


Usando valor, obtenemos un número que representa la fecha. 

=VALOR(C2)


Como ya explicamos, las hojas de cálculo representan las fechas con un número que indica el número de días que han pasado desde una fecha de origen, usualmente el 01/01/1900. 

Cambiamos el formato de la columna a fecha corta para ver los datos en el formato deseado.


Finalmente obtenemos las fechas en el formato correcto.


Para confirmarlo, aplicamos un filtro y comprobamos que, ahora si, todos lo datos se agrupan en años y meses correctamente.


Este proceso se ha realizado en tres pasos.



Pero puede resumirse en un único paso.



En este caso se pueden agrupar todos los pasos en uno solo.

=VALOR(EXTRAE(TEXTO(A2;"DD/MM/AAAA");4;2)&"/"&IZQUIERDA(TEXTO(A2;"DD/MM/AAAA");2)&"/"&DERECHA(TEXTO(A2;"DD/MM/AAAA");4))


En este ejercicio hemos resuelto un problema, convirtiendo en primer lugar todos los datos a texto, para procesarlos de forma uniforme, y luego volviendo a transformar los resultados a número y fecha.

En ocasiones es más sencillo dar un rodeo para resolver un problema de forma homogénea, en lugar de aplicar funciones lógicas para cada caso diferente.