miércoles, 11 de agosto de 2021

Experimento con fechas en Microsoft Excel

Hoy haré un experimento para comprobar que ocupa más en un fichero de Microsoft Excel.

Compararemos una columna con fechas distintas, contra el equivalente en tres columnas mostrando por separado día mes y año de las mismas fechas.

Tal cual vimos en el post de ayer, cuantos menos valores diferentes mayor razón de compresión de lo datos en el motor de almacenamiento de Microsoft Excel.

En este caso tendremos una comparativa entre una única columna con datos sin repeticiones, contra 3 columnas con datos con repeticiones. ¿Cuál ocupará menos? Lo mejor es un experimento para demostrarlo.


El primer fichero constará de una única columna con fechas.



El ejemplo usará fechas entre el 01/01/2000 y el 25/11/4870 (un día por cada fila de la hoja de cálculo).


Para el segundo fichero, se generarán tres columnas adicionales, para el día, mes y año.

Usaremos la función DIA().


Luego usaremos la función MES().


Y finalmente usaremos la función AÑO().


Una vez obtenidas las tres funciones, las copiamos a todas las filas.


Llegando hasta la última fila.


Ahora copiamos los datos y pegamos valores, para quedarnos solo con el resultado, eliminando las fórmulas.

Y eliminamos la columna A, para quedarnos solo con las que representan el día, el mes y el año por separado.


Guardamos ambos ficheros en formato XLSX.

Finalmente hemos obtenido dos ficheros que almacenan la misma información, pero de dos formas totalmente distintas.

Nos queda por saber cuál de las dos formas ocupa menos espacio en disco.


Finalmente podemos comprobar que usar una única columna con un dato de tipo fecha, requiere la mitad de espacio que usar tres columnas para día, mes y año.

Esto es debido, principalmente a que, en el segundo fichero, los valores correspondientes a los días no se repiten de forma consecutiva, siendo esta columna la que más espacio precisa para ser almacenada.
A

A

martes, 10 de agosto de 2021

Tamaño de ficheros en Microsoft Excel según el número de decimales almacenado.

Ayer demostraba que Microsoft Excel almacena más eficientemente los datos cuando hay muchos datos repetidos.

Hoy veremos otra faceta del motor de almacenamiento de Microsoft Excel que también afecta al tamaño del fichero, y por tanto a la capacidad de procesamiento de los datos.

En este caso analizaremos la repercusión del número de decimales en el tamaño del fichero.

Para ello partimos de un fichero con una única columna de datos, en la que introducimos la fórmula ALEATORIO ().

Esta fórmula genera un número decimal aleatorio entre cero y uno, con el máximo de decimales que gestiona Excel, esto es 16 decimales.

El resto de los ficheros se ha generado usando la función REDONDEAR () para obtener una versión con menos decimales de los valores originales en la columna B.

Posteriormente copio los datos de la columna B y pego valores en la columna A.

Finalmente elimino la columna B, dejando solo la columna A.

También cambio el título de la columna, para indicar el número de decimales.

Sin embargo no modifico el número de decimales que se muestran para que se aprecie el redondeo.

En la siguiente imagen muestro el fichero con 10 decimales.

Como podéis ver en la imagen, el tamaño se reduce radicalmente a medida que se reduce el número de decimales.

La versión original del fichero, tenía 16 decimales y pesaba 18MB.

La versión de 10 decimales reduce su tamaño hasta los 16 MB.

En la versión de 5 decimales nos quedamos en 13 MB.

Es importante entender que el valor almacenado por Microsoft Excel es el que se muestra en la barra de fórmulas, no en las celdas.

Como se puede apreciar en esta imagen, en el valor resaltado en rojo, no se tienen en cuenta los ceros decimales a la derecha.

Versión para 3 decimales, que pesa 11 MB.

Y finalmente la versión con 2 decimales que se queda en algo menos de 9 MB.


Aunque aparentemente está reducción del tamaño se deba a la reducción del número de decimales, no es esa la razón de que los ficheros ocupen menos.

La verdadera razón es la misma que veíamos ayer, a menos valores distintos menos valores realmente almacena el motor de Microsoft Excel.

Solo hay que pensar cuántos valores entre 0 y 1 con dos decimales existen y nos daremos cuenta de que, el máximo número de elementos distintos que hay en el fichero de dos decimales, es de 1000 elementos distintos. Razón por la cual es más fácil almacenar los datos y requieren menos tamaño.

Esto nos demuestra que cuando trabajemos con decimales deberíamos tener claro cuál es el máximo número decimales que nos interesa almacenar ya que podremos ahorrar una cantidad enorme de espacio y facilitar el procesamiento del fichero.

Este comportamiento que hemos visto en Microsoft Excel es aplicable también a Power BI, en el cual adquiere una especial importancia ya que el tamaño máximo del fichero de Power BI, es de 1GB.

lunes, 9 de agosto de 2021

Reducir tamaño en Microsoft Excel según datos guardados

Voy a explicar la relación entre los datos almacenados en una columna de Microsoft Excel y el tamaño del fichero generado.

Usaremos como ejemplo dos ficheros de Microsoft Excel en formato XLSX.

En ambos cubriremos de datos toda la columna A.

En el primero, escribiremos el número 1 en todas las celdas.

En el segundo escribiremos en cada celda el número correspondiente a su fila.


Microsoft Excel usa un motor de análisis en memoria para gestionar los datos. 

Para ello implementa técnicas de compresión para reducir lo datos a almacenar.

La razón de compresión depende, sobre todo, del número de valores únicos en cada columna, ya que se utiliza un sistema de diccionarios que almacena cada valor y los índices correspondientes.

De forma que cuanta mayor variedad de datos, mayor será el tamaño necesario para almacenarlos, y por tanto mas memoria será necesaria para procesarlos.

En la captura podéis comprobar la diferencia de tamaño de ambos ficheros.

Habíamos visto en otra publicación que cambiando el formato a XLSB podíamos ahorrar tamaño.

Eso es correcto, pero en este caso la diferencia en porcentaje de tamaño aún es mayor entre ambos ficheros.

En el caso del formato XLSX es necesario un 54% más de tamaño para almacenar datos distintos que para un único dato repetido.


Mientras que en el formato XLS este incremento alcanza el 90%.


Con esta introducción, podemos comenzar a entender cómo Microsoft Excel, y más adelante Power BI, almacena los datos, y de esta forma optimizar nuestras hijas de cálculo y paneles de análisis.

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.