Capítulo 3 Transformaciones con Power Query

Power Query es una herramienta de transformación de datos incluida tanto en Power BI como en Excel8. Por tanto, las operaciones que se detallan en este capítulo podrían realizarse desde cualquiera de esas herramientas, aquí se detallará para Power Query en Power BI.

En primer lugar, importaremos los datos directamente en Power Query. A continuación, estudiaremos las operaciones de transformación sobre tablas dinámicas9. Partiendo de los datos en formato de tabla plana, los transformaremos para generar las tablas de dimensiones y hechos.

Para ampliar información y aprender más sobre esta herramienta la mejor referencia que conozco actualmente es el libro de Raviv (2019).

Objetivos del capítulo

  • Conocer el funcionamiento de Power Query y usarlo para:

    • Realizar operaciones de importación de datos.

    • Transformar una tabla dinámica en una tabla plana.

    • Transformar los datos.

    • Generar nuevas tablas.

    • Obtener un diseño en estrella.

  • Entender la estructura y la implementación de los cubos OLAP.

3.1 Introducción

Power Query es una herramienta ETL de usuario final. Es decir, pensada para poder ser usada solo con formación ofimática aunque requiere amplia base técnica para explotar todo su potencial. Implementa un entorno gráfico de desarrollo del componente ETL donde las operaciones representadas en los menús se traducen en pasos de importación de datos o de transformación realizados sobre los datos, que se agrupan en consultas o tablas. Los pasos, internamente, se corresponden con llamadas a funciones en lenguaje de fórmulas M.

Las operaciones de importación y transforación de datos se estructuran en los menús Inicio (figura 3.1), Transformar (figura 3.2) y Agregar columna (figura 3.3).

El menú Inicio (figura 3.1) contiene las operaciones de importación de datos, definición y gestión de consultas, y operaciones de transformación de uso frecuente. Algunas de las operaciones de transformación de este menú también están incluidas en los otros.

Menú Inicio.

Figura 3.1: Menú Inicio.

El menú Transformar (figura 3.2) incluye operaciones de transformación sobre tablas y sobre los distintos tipos de columnas de las tablas.

Menú Transformar.

Figura 3.2: Menú Transformar.

Por último, el menú Agregar columna (figura 3.3) agrupa las opciones para añadir columnas de distintos tipos.

Menú Agregar columna.

Figura 3.3: Menú Agregar columna.

Alternativamente se puede acceder a algunas de estas operaciones desde los menús contextuales de los distintos elementos (consultas, tablas, columnas, pasos).

La estructura de los menús se configura en función de la resolución de la pantalla y el tamaño de la ventana de la aplicación, por lo que la disposición de los apartados y opciones pueden variar considerablemente de un ordenador a otro. La diferencia está en que agrupa o expande las opciones por temas en función del espacio disponible. Así, un tema puede aparecer como un apartado en la barra de herramientas o como un icono con una ventana de menú asociada.

En la figura 3.4, se muestra el menú Inicio totalmente desplegado. Se corresponde con el de la figura 3.1 pero con la ventana un poco más amplia

Menú Inicio totalmente desplegado.

Figura 3.4: Menú Inicio totalmente desplegado.

En la figura 3.5, se muestra el mismo menú Inicio en una ventana más pequeña, lo que hace que aparezca una barra desplazadora a la derecha para moverse a la parte no visible del mismo.

Menú Inicio parcialmente presentado.

Figura 3.5: Menú Inicio parcialmente presentado.

Para las capturas de pantalla, he tratado de adaptarlas para que se pueda seguir la explicación de la mejor forma posible10.

3.2 Transformar una tabla dinámica

El objetivo de este apartado es transformar una tabla dinámica almacenada en formato Excel en una tabla plana equivalente a la almacenada en formato CSV.

3.2.1 Importar los datos

En lugar de importar los datos en Power BI y desde allí usar Power Query para transformarlos (como se hizo en el capítulo 2), podemos importar los datos directamente en Power Query y, una vez transformados, pasar los que necesitemos a Power BI.

Para inicial Power Query, una vez abierto Power BI, pulsamos sobre Inicio > Consultas > Transformar datos (figura 3.6). De esta forma accedemos al Editor de Power Query.

Transformar datos, acceso a Power Query desde Power BI.

Figura 3.6: Transformar datos, acceso a Power Query desde Power BI.

Para importar datos a Power Query, pulsamos sobre Inicio > Nueva consulta > Nuevo origen y, en el menú que se abre, elegimos el tipo de archivo o, en general, de fuente de datos (figura 3.7).

Importar datos directamente a Power Query.

Figura 3.7: Importar datos directamente a Power Query.

Vamos a comenzar importando los datos con formato Excel descargados, en mi caso, el archivo 2871.xlsx11. Seleccionamos la opción Excel en el menú (figura 3.7)

Seleccionamos el archivo en la carpeta de trabajo y, para importar los datos, también hemos de seleccionar las hojas que queremos importar, en este caso solo tiene una (figura 3.8) y pulsamos sobre Aceptar.

Importar a Power Query un archivo Excel.

Figura 3.8: Importar a Power Query un archivo Excel.

El resultado de la importación se muestra en la figura 3.9.

Resultado de importar a Power Query un archivo Excel.

Figura 3.9: Resultado de importar a Power Query un archivo Excel.

En la sección PASOS APLICADOS (en la parte inferior derecha de la figura 3.9), además de los pasos comentados en el apartado 2.3, aparece un nuevo paso: Navegación, necesario en este caso por tratarse de un archivo Excel, en él se indica lo necesario para acceder a la hoja que hemos seleccionado.

Podemos observar que los pasos aplicados no son adecuados ya que el resultado que se muestra en la zona central de la ventana no es una tabla plana como en el caso del apartado 2.3. En este caso, por tratarse de una tabla dinámica, debemos aplicar transformaciones adicionales.

Cada paso se corresponde con una función de transformación en lenguaje M. Si queremos ver la función asociada al paso seleccionado en la zona PASOS APLICADOS, en el menú Vista, seleccionamos la opción Barra de fórmulas. La función se muestra en una barra sobre la tabla de datos del resultado (figura 3.9).

3.2.2 Eliminar pasos que no son correctos

Partimos de los datos importados y de las transformaciones que la herramienta aplica por defecto para este tipo de archivo, que se muestran en la figura 3.10.

Pasos para importar a Power Query un archivo Excel.

Figura 3.10: Pasos para importar a Power Query un archivo Excel.

En este caso, los pasos Tipo cambiado y Encabezados promovidos, necesarios para importar el archivo en formato CSV con estructura de tabla plana, no son adecuados para importar una tabla dinámica. Los eliminaremos pulsando sobre la X que aparece a la izquierda de su nombre al situar el cursor sobre ellos. El resultado obtenido se muestra en la figura 3.11.

Resultado de eliminar los pasos no necesarios.

Figura 3.11: Resultado de eliminar los pasos no necesarios.

3.2.3 Eliminar las filas de cabecera y pie de tabla

Observamos que las primeras 6 filas de la tabla no forman parte de la tabla dinámica, contienen información adicional de los datos de la tabla. En algún caso esos datos pueden resultar de utilidad, especialmente si queremos integrar los datos contenidos en varios archivos. En este caso, como estamos trabajando con un solo archivo, podemos eliminarlas mediante la operación Inicio > Reducir filas > Quitar filas > Quitar filas superiores (figura 3.12).

Operación para quitar filas superiores.

Figura 3.12: Operación para quitar filas superiores.

Se abre una ventana donde podemos introducir el número de filas a eliminar (en este caso 6). Como resultado se añade un paso llamado Filas superiores quitadas. Si observamos en el resultado que nos hemos equivocado en el número, pulsando sobre la rueda dentada que aparece a la derecha de cada paso, se abre la ventana de definición asociada y podemos modificar sus parámetros.

También observamos que la tabla dinámica tiene un pie compuesto por 9 filas (figura 3.13). Las podemos eliminar mediante la operación Inicio > Reducir filas > Quitar filas > Quitar filas inferiores (figura 3.12).

Filas que forma el pie de la tabla dinámica.

Figura 3.13: Filas que forma el pie de la tabla dinámica.

Como resultado se eliminan las filas indicadas y aparece el nuevo paso Filas inferiores quitadas (figura 3.14).

Tabla dinámica sin cabecera ni pie.

Figura 3.14: Tabla dinámica sin cabecera ni pie.

3.2.4 Definir la cabecera de los datos en una sola fila

La transformación Encabezados promovidos permite transformar los datos contenidos en la primera fila de la tabla en nombres de las columnas. En este caso, los datos de la cabecera de la tabla están en las dos primeras filas. Por tanto, antes de realizar esa operación deberíamos fusionar las dos filas en una.

Aunque hay operaciones que operan sobre filas (acabamos de eliminar filas), Power Query está orientado a trabajar sobre columnas. En particular, ofrece una operación para fusionar columnas pero no una para fusionar filas. Si necesitamos hacer una operación sobre filas que solo está disponible para ser realizada sobre columnas, debemos transponer la tabla para transformar las filas en columnas y viceversa, pulsando sobre Transformar > Tabla > transponer (figura 3.15).

Transponer la tabla.

Figura 3.15: Transponer la tabla.

El resultado de la operación se muestra en la figura 3.16. Se han intercambiado filas y columnas, y se ha añadido el paso Tabla transpuesta a la lista PASOS APLICADOS.

Tabla transpuesta.

Figura 3.16: Tabla transpuesta.

Ahora podríamos fusionar las dos primeras columnas (seleccionándolas y pulsando sobre Transformar > Columna de texto > Combinar columnas), volver a transponer la tabla y tendríamos los datos de la cabecera en una sola fila. Pero, si nos fijamos, esto no es necesario porque ya tenemos los datos de la cabecera en una sola fila. Resulta que solo teníamos una columna de datos de dimensiones (los datos de los municipios), al transponer la tabla, ahora es la única fila de encabezado de la tabla, podemos trabajar directamente con esta disposición de los datos.

Para definir el encabezado de la tabla, pulsamos sobre Transformar > Tabla > Usar la primera fila como encabezado (figura 3.17).

Usar la primera fila como encabezado.

Figura 3.17: Usar la primera fila como encabezado.

El resultado obtenido se muestra en la figura 3.18. Podemos ver que los datos de los municipios están en la cabecera de la tabla y se han añadido dos nuevos pasos: Encabezados promovidos y Tipo cambiado.

Resultado de usar la primera fila como encabezado.

Figura 3.18: Resultado de usar la primera fila como encabezado.

Aunque solo hemos indicado la operación para definir los encabezados, automáticamente ha aplicado la operación de obtener el tipo de las columnas: Tipo cambiado. Mi experiencia con esta herramienta es que la aplicación automática de esta operación presenta más inconvenientes que ventajas. Como se pueden definir los tipos manualmente, mi recomendación es eliminar este paso siempre que se defina automáticamente y definir los tipos de las columnas manualmente cuando sea necesario, generalmente al final del proceso de transformación. Por tanto, pulsando sobre la X situada a la izquierda del paso Tipo cambiado, lo eliminamos. El resultado obtenido se muestra en la figura 3.19.

Resultado de usar la primera fila como encabezado eliminando el cambio de tipo.

Figura 3.19: Resultado de usar la primera fila como encabezado eliminando el cambio de tipo.

3.2.5 Completar los datos

En la figura 3.19, se puede observar que los datos de la primera columna no están completos. Esto es frecuente que ocurra así en tablas dinámicas: se evita repetir datos para formar la combinación de valores de varios campos, se entiende que el primer valor se repite con el resto de valores del campo siguiente. Si queremos tener los datos en una tabla plana, debemos completar los valores que faltan.

Se puede realizar esta operación seleccionando la columna (pulsando clic sobre su cabecera) y pulsando sobre Transformar > Cualquier columna > Rellenar > Abajo (figura 3.20).

Completar los datos de una columna.

Figura 3.20: Completar los datos de una columna.

El resultado obtenido se muestra en la figura 3.21.

Resultado de completar los datos de una columna.

Figura 3.21: Resultado de completar los datos de una columna.

3.2.6 Anular la dinamización de la tabla

En esta situación, anulamos la dinamización de la tabla:

  • Seleccionando las columnas que tienen datos de dimensiones (teniendo pulsada la tecla Ctrl, haciendo clic sobre la cabecera de cada columna).

  • Pulsando sobre Transformar > Cualquier columna > Anulación de dinamización de otras columnas (figura 3.22).

Anular dinamización de la tabla.

Figura 3.22: Anular dinamización de la tabla.

El resultado de la operación se muestra en la figura 3.23. Se han creado dos nuevas columnas: una con los valores de la cabecera (Atributo) y otra con los valores asociados a la combinación de las instancias de las columnas fijas y los valores de la cabecera (Valor). Tenemos los mismos datos numéricos pero ahora, en lugar de estar representados en forma de matriz, están representados en forma de un vector.

Resultado de anular dinamización de la tabla.

Figura 3.23: Resultado de anular dinamización de la tabla.

3.2.7 Definir las columnas de la tabla

Una vez tenemos los datos estructurados en forma de tabla plana, podemos definir los nombres de las columnas y su tipo. Para cambiar el nombre a una columna, pulsamos doble-clic sobre su nombre actual y escribimos el nuevo nombre. Para cambiar el tipo, seleccionamos el tipo deseado en el menú que se abre al pulsar sobre el icono situado a la izquierda de su nombre, en la cabecera de la tabla (figura 3.24).

Renombramos las columnas con los nombres: Sexo, Periodo, Municipios y Cantidad. Las definimos a todas de tipo Texto excepto Cantidad que la definimos de tipo Número entero.

Cambiar el nombre y tipo de las columnas.

Figura 3.24: Cambiar el nombre y tipo de las columnas.

La figura 3.24 muestra los pasos realizados (Columnas con nombre cambiado y Tipo cambiado) y el resultado obtenido. Evidentemente esta vez no borramos el paso Tipo cambiado porque no se ha insertado automáticamente, lo acabamos de definir.

En este caso el orden de las columnas nos da igual. Si quisiéramos tenerlas exactamente en el mismo orden que la tabla obtenida a partir del archivo en formato CSV, bastaría con pulsar-arrastrar-soltar cada columna sobre la ubicación que deseemos. Como resultado se añadiría un paso Columnas reordenadas.

Ejercicio 3.1 Importa y transforma tus datos en forma de tabla dinámica para obtener una tabla plana a partir de ellos (captura una pantalla del resultado final donde se vean todos los pasos del apartado PASOS APLICADOS y los nombres de los municipios).

3.3 Alternativa a transformar una tabla dinámica

Si el resultado obtenido en el apartado anterior coincide en estructura, nombre y tipo de los campos con el que se muestra en la figura 3.24, este apartado se puede ignorar. Es decir, solo hay que hacer el ejercicio propuesto en este apartado si no se ha conseguido realizar con éxito el ejercicio del apartado anterior. Este ejercicio no puntúa pero nos permite seguir con los ejercicios siguientes.

En este caso solo tenemos que importar el archivo en formato CSV directamente a Power Query (ver apartado 3.2.1) y renombrar y cambiar el tipo de las columnas que lo necesiten (ver apartado 3.2.7).

3.4 Definir los datos a nivel de individuo

De acuerdo al contenido de apartado 1.2.1, el periodo y el municipio identifican a cada individuo (un municipio en un periodo); la cantidad de hombres y mujeres son medidas de cada uno de los individuos.

Vamos a transformar los datos de manera que cada fila de la tabla se corresponda con un individuo, es decir, un municipio de la provincia que tenemos asignada en un periodo concreto.

3.4.1 Eliminar datos agregados

Además de los datos a nivel básico, la tabla con la que trabajamos incluye datos agregados:

  • Suma de la cantidad de hombres y mujeres: valor “Total” en la columna Sexo.

  • Observaciones a nivel de provincia que se corresponden a la suma de observaciones a nivel de municipio: valor asociado al nombre de la provincia en la columna Municipios con un código numérico de dos posiciones.

Estos son valores agregados que debemos eliminar y quedarnos exclusivamente con los datos de granularidad más fina a partir de los que se obtienen, tal y como se describió en el apartado 2.3.2. El resultado obtenido se muestra en la figura 3.25.

Filtrar los datos de las columnas.

Figura 3.25: Filtrar los datos de las columnas.

3.4.2 Agrupar los datos a nivel de individuo

Un individuo está definido por el periodo y el municipio, atributos que están en forma de columnas (Periodo y Municipios). Sin embargo, los atributos correspondientes a cantidad de hombres y cantidad de mujeres están definidos como combinación de las columnas Sexo y Cantidad.

Para que cada fila de la tabla se corresponda a los datos de un individuo, deberíamos tener una columna para cada valor de Sexo y, en la celda del individuo, el valor del campo Cantidad para ese valor de Sexo. Es decir, deberíamos realizar una operación para presentar los datos en forma de tabla dinámica considerando los valores de Sexo como cabecera de columnas.

Esta operación se puede hacer directamente seleccionando la columna Sexo y pulsando sobre Transformar > Cualquier columna > Columna dinámica (figura 3.26).

Definir una columna dinámica.

Figura 3.26: Definir una columna dinámica.

Se abre una ventana para que indiquemos la columna de donde debe tomar los valores: debemos seleccionar la columna Cantidad y pulsar Aceptar. El resultado obtenido se muestra en la figura 3.27.

Resultado de definir una columna dinámica.

Figura 3.27: Resultado de definir una columna dinámica.

Con esta transformación tenemos cada individuo representado en una fila de la tabla.

3.4.3 Obtener medidas adicionales de los individuos

Tenemos disponibles datos adicionales de los municipios, en concreto el archivo municipios.csv obtenido inicialmente. En estos datos no hay una observación para cada periodo y municipio, en este caso son datos actuales, el individuo es el municipio. Sin embargo, pueden ser compatibles con los datos con los que trabajamos hasta ahora porque los datos de este archivo no son datos muy cambiantes (al contrario de lo que ocurre con la cantidad de habitantes). En principio, el único problema puede ser que los municipios en sí hayan cambiado a lo largo de los años (unos se hayan unido, otros se hayan segregado) y en este archivo solo tenemos la situación actual.

A pesar de esto, las posibilidades adicionales que pueden ofrecer estos datos para realizar consultas compensan los posibles problemas. Vamos a tratar de integrarlos con los datos originales.

Importar los datos

En primer lugar, tenemos que importar los datos a Power Query, tal y como hemos hecho previamente en el apartado 3.2.1, pero seleccionando el tipo de archivo adecuado: Texto o CSV.

El resultado de la importación, después de eliminar el paso Tipo cambiado12, se muestra en la figura 3.28.

Importación de datos adicionales de municipio.

Figura 3.28: Importación de datos adicionales de municipio.

El resultado es una nueva consulta con el nombre del archivo que acabamos de importar: municipios.

Adaptar los campos para tener uno en común

Para definir una relación entre ambas consultas debemos encontrar algún campo o conjunto de campos en común. Actualmente no hay ninguno pero podemos obtenerlo: los 5 primeros dígitos del campo COD_INE de la consulta municipios coinciden con el prefijo numérico del campo Municipios en la tabla original. Vamos a extraer ese fragmento de ambos campos.

Para dividir un campo, hemos de seleccionarlo y pulsar sobre Transformar > Columna de texto > Dividir columna > Por número de caracteres (figura 3.29).

Dividir columna.

Figura 3.29: Dividir columna.

En la ventana que se abre, podemos configurar las opciones de la operación. En concreto, el número de caracteres a considerar y si es una extracción simple, múltiple, por la derecha, por la izquierda, entre otras posibilidades. Seleccionamos una sola extracción comenzando por la izquierda (figura 3.30).

Configuración de dividir columna.

Figura 3.30: Configuración de dividir columna.

El resultado, después de eliminar el paso Tipo cambiado, se muestra en la figura 3.31.

Resultado de dividir columna.

Figura 3.31: Resultado de dividir columna.

Observamos que se ha dividido la columna original en dos partes. La primera contiene el código que buscamos; la segunda parte, aparentemente solo contiene ceros. Si es así, podríamos eliminarla. Para asegurarnos, pulsamos sobre la flecha situada a la derecha de su nombre y, a continuación, sobre el enlace Cargar más para que cargue más valores de la columna en la ventana asociada (figura 3.32).

Cargar más valores de una columna.

Figura 3.32: Cargar más valores de una columna.

Observamos que, efectivamente, solo hay un valor con todas las posiciones a 0. Por tanto, podemos eliminar esa columna. Para eliminarla, seleccionamos la columna y pulsamos sobre Inicio > Administrar columnas > Quitar columnas > Quitar columnas (figura 3.33)

Eliminar una columna.

Figura 3.33: Eliminar una columna.

Asimismo, podemos renombrar la columna del código (como hemos hecho anteriormente para otras columnas) para quitar la terminación que se le había añadido automáticamente al dividir el campo original, para asignarle nombre a los dos campos obtenidos.

En la tabla original, hemos de extraer el código del campo Municipios. Habiendo seleccionado esa columna, pulsamos sobre Transformar > Columna de texto > Dividir columna > Por delimitador. En la ventana de configuración, observamos que ha detectado que el delimitador es el espacio (si fuera otro lo podríamos definir) y tenemos que definir que solo considere el delimitador para realizar la separación una vez, el que esté situado más a la izquierda (figura 3.34).

Configuración de dividir columna por delimitador.

Figura 3.34: Configuración de dividir columna por delimitador.

El resultado, después de eliminar el paso Tipo cambiado, se muestra en la figura 3.35.

Resultado de dividir columna por separador.

Figura 3.35: Resultado de dividir columna por separador.

Podemos renombrar los campos generados y llamarlos cod_municipio y municipio, respectivamente.

Definir la unión entre tablas

Una vez tenemos al menos un campo en común entre las tablas, podemos definir una operación de unión entre ellas. Queremos añadir a la tabla original los campos de la tabla municipios. Para ello, estando situados en la consulta de definición de la tabla original, pulsamos sobre Inicio > Combinar > Combinar consultas > Combinar consultas (figura 3.36).

Combinar consultas.

Figura 3.36: Combinar consultas.

En la ventana de configuración que se abre (figura 3.37), seleccionamos el campo cod_municipio en la tabla original pulsando sobre él; elegimos la tabla municipios (en el campo intermedio) y pulsamos sobre el campo COD_INE.

Configuración de combinar consultas.

Figura 3.37: Configuración de combinar consultas.

El tipo de combinación por defecto es adecuada (Externa izquierda) de manera que no se eliminen instancias de la tabla original y se completen con los datos de la tabla municipios. En la última línea de esta ventana informa del resultado de la unión: en este caso todas las filas de la tabla original están relacionadas con alguna fila de la tabla municipios. Es decir, en el caso de Granada, no han quedado filas sin relacionar.

Como resultado de la unión se añade una nueva columna a la tabla original donde se indica que se corresponde con una tabla. Pulsando sobre el icono donde se representan dos flechas, en la parte derecha del nombre de la columna, podemos seleccionar las columnas de la tabla municipios que queremos que se añadan a esta (figura 3.38).

Selección de campos del resultado de combinar consultas.

Figura 3.38: Selección de campos del resultado de combinar consultas.

Nos interesa añadir todas las columnas excepto COD_INE y NOMBRE_ACTUAL que se corresponden con el código y nombre del municipio, que ya están disponibles en la tabla original. Asimismo podemos indicar que se le añada el nombre de la tabla como prefijo a los campos, en este caso no es necesario. Parte del resultado se muestra en la figura 3.39.

Campos en la tabla resultado de combinar consultas.

Figura 3.39: Campos en la tabla resultado de combinar consultas.

En este caso, los nombres de las columnas están escritos en mayúsculas. Vamos a renombrar todos los campos de la tabla siguiendo un mismo criterio, el formato snake case, de manera que los nombres de las columnas sean los siguientes:

  • periodo

  • cod_municipio

  • municipio

  • hombres

  • mujeres

  • capital

  • cod_comarca

  • comarca

  • cod_provincia

  • provincia

  • cod_comunidad_autonoma

  • comunidad_autonoma

  • altitud_m

  • nivel_altitud

  • superficie_ha

Ejercicio 3.2 Define los datos de tu tabla a nivel de individuo y obtén mediciones adicionales de los individuos a partir de los datos del archivo municipios.csv, por último, selecciona y renombra los campos de la tabla resultante mediante el criterio snake case (captura una pantalla del resultado final donde se vean todos los pasos del apartado PASOS APLICADOS y los nombres de los municipios).

Definir niveles adicionales de campos

Si observamos los campos altitud_m y nivel_altitud podemos comprobar que nivel_altitud se ha definido a partir de altitud_m agrupando los datos en niveles. De esta forma el campo nivel_altitud se puede usar para consultas como una simplificación del campo original. También podríamos definir niveles similares para la cantidad de habitantes o la extensión del municipio. Es lo que vamos a hacer a continuación para la cantidad de habitantes.

Para definir niveles en función la cantidad de habitantes, contamos con el archivo cod-habitantes.csv donde tenemos definidos códigos asociados a tramos de cantidad de valores de este campo. Por otro lado tenemos las columnas hombres y mujeres a partir de las que podemos obtener la cantidad de habitantes como una nueva columna.

Vamos a comenzar definiendo una columna personalizada como suma de las columnas hombres y mujeres. Pulsamos sobre Agregar columna > General > Columna personalizada (figura 3.40).

Columna personalizada.

Figura 3.40: Columna personalizada.

En la ventana que se abre podemos definir la columna: definimos el nombre (habitantes) y su expresión ([mujeres] + [hombres]). Para añadir una columna existente, la seleccionamos en la zona Columnas disponibles pulsando sobre ella y, a continuación, pulsamos sobre el botón Insertar (figura 3.41).

Definición de la columna personalizada.

Figura 3.41: Definición de la columna personalizada.

El resultado obtenido lo podemos ver en la figura 3.42. Aunque hemos definido la columna como suma de dos columnas de tipo entero, como hay datos con valor null, el tipo no está totalmente definido, lo cambiamos para definirlo como tipo entero.

Resultado de la definición de columna personalizada.

Figura 3.42: Resultado de la definición de columna personalizada.

A partir de la columna habitantes podemos definir una nueva columna con el código del nivel de la cantidad de habitantes. Pulsamos sobre Agregar columna > General > Columna condicional (figura 3.43).

Columna condicional.

Figura 3.43: Columna condicional.

En primer lugar, definimos el nombre de la nueva columna. La expresión condicional la vamos construyendo basándonos en los códigos definidos en el archivo cod-habitantes.csv, pulsando sobre el botón Agregar cláusula (figura 3.44).

Definición de la columna condicional.

Figura 3.44: Definición de la columna condicional.

El resultado obtenido podemos verlo en la figura 3.45. Hay un problema porque aparecen datos erróneos. El problema está en que en los datos de partida hay valores null y ese valor no está contemplado en las condiciones que hemos considerado en la definición del campo condicional.

Resultado de la definición de columna condicional.

Figura 3.45: Resultado de la definición de columna condicional.

Podemos redefinir el campo (pulsando sobre la rueda dentada a la derecha del paso de definición) añadiendo una condición específica para tratar los valores null. Si la añadimos a continuación de la última sigue apareciendo el mismo error. El problema es que debería ejecutarse en primer lugar para que no se produzca el error al hacer la primera comparación con un valor. En la pantalla de definición de condiciones, estas se pueden mover pulsando sobre los puntos verticales que aparecen en la parte derecha de la condición. El resultado final se muestra en la figura 3.46.

Definición de la columna condicional modificada.

Figura 3.46: Definición de la columna condicional modificada.

Con esta modificación, en lugar de producirse un error, transmitimos el valor null al código generado.

A continuación, importamos la tabla de niveles del archivo cod-habitantes.csv (como hemos hecho antes con las otras tablas) y combinamos la tabla original con ella, como se muestra en la figura 3.47.

Combinar la tabla original con la tabla de niveles.

Figura 3.47: Combinar la tabla original con la tabla de niveles.

En la figura 3.48, se puede ver el resultado de combinar la tabla original y la de niveles, una vez seleccionado solo el campo de descripción del nivel.

Cuando tengamos campos de texto entre los que exista un orden que no coincida necesariamente con el orden alfabético, es conveniente añadir un código como prefijo, de manera que el orden alfabético coincida con el orden implícito. Generalmente, las herramientas de consulta presentan los literales en orden alfabético, añadiendo el código como prefijo es más fácil identificar la relación de orden existente entre ellos. En este caso, para conseguir esto, debemos combinar las columnas de código y descripción de los niveles. Para ello, seleccionamos las columnas a combinar y pulsamos sobre Agregar columnas > De texto > Combinar columnas (figura 3.48).

Combinar columnas.

Figura 3.48: Combinar columnas.

En la ventana de configuración definimos el separador de valores a utilizar y el nombre de la nueva columna (figura 3.49).

Configuración de combinar columnas.

Figura 3.49: Configuración de combinar columnas.

El resultado obtenido se muestra en la figura 3.50. Se puede observar que hay filas en las que no está definido el nivel de población.

Resultado de combinar las columnas.

Figura 3.50: Resultado de combinar las columnas.

Ejercicio 3.3 Define en la tabla original un campo llamado nivel_habitantes con los códigos y descripciones del archivo cod-habitantes.csv definido en función de la cantidad de habitantes de cada municipio (captura una pantalla del resultado final donde se vean todos los pasos del apartado PASOS APLICADOS y los nombres de los municipios).

Ejercicio 3.4 Define en la tabla original un campo llamado nivel_superficie en función del campo superficie_ha, similar a los anteriores13, con 3 niveles, con los límites que consideres oportunos según tu criterio (captura una pantalla del resultado final donde se vean todos los pasos del apartado PASOS APLICADOS y los nombres de los municipios, y otra donde se vea la definición de los niveles).

3.5 Generar hechos y dimensiones

Una vez tenemos las observaciones a nivel individuo y tenemos asociado a cada individuo las mediciones disponibles, vamos a estructurar los datos en forma de dimensiones y hechos.

En ejemplos más sencillos este es el punto de partida. Tenemos una tabla plana de observaciones y, a partir de ella, vamos a generar un diseño multidimensional en forma de hechos y dimensiones. Previamente vamos a realizar una comprobación de los datos.

3.5.1 Comprobación de los datos

Deberemos comprobar:

  • Que todas las instancias corresponden al mismo nivel de detalle. Se trataría de conocer las instancias y definir la granularidad de los datos que tenemos.

  • Que todos los caracteres (columnas) están definidos para todas las instancias14. En caso de encontrar instancias con campos que nos interese considerar en el diseño y se encuentren sin definir, deberemos aplicar alguna solución.

El primer paso ya lo hemos hecho: previamente hemos eliminado los agregados y hemos transformado los datos para que cada fila se corresponda con un individuo (un municipio en un periodo).

Para llevar a cabo esta segunda comprobación, podemos ir columna por columna, pulsando sobre la flecha situada a la derecha de su nombre y comprobando los valores que tiene. Inicialmente solo muestra unos pocos valores, pero si pulsamos sobre el enlace Cargar más, obtiene más valores. Una vez cargados todos, los muestra ordenados, podemos comprobar si hay algún valor null o vacío, que suelen estar situados al principio de la lista.

En la figura 3.51, se puede ver la comprobación realizada para uno de los campos que tiene valores null.

Comprobar si hay valores sin definir.

Figura 3.51: Comprobar si hay valores sin definir.

En este caso, el problema lo tenemos en las medidas hombres, mujeres y la obtenida a partir de ellas, habitantes.

La solución depende de cada caso, en algunas situaciones la solución adecuada consiste en sustituir los valores null o vacíos por algún valor predefinido del estilo de “Desconocido”, “No disponible”, “No aplicable”, o similar. Esta operación se puede realizar fácilmente en varias columnas a la vez, seleccionando las columnas donde se quiera llevar a cabo y pulsando sobre Transformar > Cualquier columna > Reemplazar los valores (figura 3.52).

Reemplazar valores.

Figura 3.52: Reemplazar valores.

En el caso de tratarse de valores numéricos correspondientes a medidas, como ocurre en nuestros datos, es poco probable que pueda ser apropiado reemplazar esos valores por algún valor concreto (podríamos pensar en 0). Si tenemos los medios, lo ideal es averiguar el motivo de que se produzcan esos valores y actuar en consecuencia.

En nuestros datos, la explicación la podemos encontrar en el archivo Excel. En las notas al pie de la tabla dinámica se indica: “No existen cifras a 1 de enero de 1997 porque no se realizó revisión del padrón para ese año”. En este caso, la solución más adecuada es eliminar los datos correspondientes a 1997 y comprobar si dejamos de tener valores null en esas columnas.

Los podemos eliminar como como se describió en el apartado 2.3.2 para eliminar los datos agregados.

Puede haber valores null asociados a mediciones de municipios de nueva creación (segregaciones) o que hayan desaparecido (por fusionarse se con otros). Para evitar posibles problemas, podemos eliminarlos seleccionando la opción Quitar vacíos en el menú de las columnas de mediciones, en este caso habitantes (figura 3.53).

Quitar vacíos.

Figura 3.53: Quitar vacíos.

3.5.2 Generar las dimensiones

Vamos a generar las dimensiones Cuándo y Dónde a partir de la tabla original mediante nuevas consultas.

Podemos crear una consulta a partir de otra mediante dos métodos:

  • Duplicar: duplica todos los pasos de la consulta original bajo un nuevo nombre.

  • Referencia: genera una nueva consulta que tiene como punto de partida el resultado de la consulta original.

La consultas creadas mediante referencia tienen la ventaja de que cualquier cambio que realicemos sobre la consulta original se propaga automáticamente a la nueva consulta. Por este motivo, en este caso, vamos a crear las consultas mediante referencia.

Dimensión Cuándo

Para crear una consulta por referencia a partir de la tabla original, seleccionamos la consulta y pulsamos sobre Inicio > Consulta > Administrar > Referencia (figura 3.54), o bien, en el menú contextual de la consulta (se abre pulsando sobre el botón derecho de ratón sobre el nombre de la consulta) seleccionamos la opción Referencia.

Nueva consulta mediante referencia.

Figura 3.54: Nueva consulta mediante referencia.

El resultado es que se crea una nueva consulta con el mismo nombre que la tabla original al que se le ha añadido un sufijo. Tiene un único paso llamado Origen que la enlaza con la consulta a partir de la que se ha definido. En primer lugar la renombramos pulsando doble-clic sobre su nombre o mediante el campo Nombre en el apartado PROPIEDADES situado en la parte derecha de la ventana. La llamamos cuándo.

Esta nueva consulta solo contendrá el campo periodo por ser el único campo que responde a la pregunta Cuándo: ha de contener todos los valores de este campo, sin repetir. Es decir, en primer lugar, debemos eliminar el resto de campos. La forma más inmediata de hacer esta operación es desde el menú contextual del campo, seleccionando la opción Quitar otras columnas, también pulsando sobre Inicio > Administrar columnas > Quitar columnas > Quitar otras columnas (figura 3.55).

Eliminar las otras columnas.

Figura 3.55: Eliminar las otras columnas.

Podemos eliminar los duplicados del campo desde su menú contextual, seleccionando la opción Quitar duplicados, también pulsando sobre Reducir filas > Quitar filas > Quitar duplicados (figura 3.56).

Eliminar duplicados.

Figura 3.56: Eliminar duplicados.

Para añadir una llave generada, seleccionamos la opción Agregar columna > General > Columna de índice > Desde 1 (figura 3.57).

Insertar índice.

Figura 3.57: Insertar índice.

El criterio que he seguido para renombrar las llaves generadas ha sido añadir el sufijo “key” al nombre de la tabla. Siguiendo con el criterio snake case, lo renombramos como cuando_key. No es relevante la posición de los campos en una tabla, hay herramientas que los ordenan alfabéticamente. En cualquier caso, es habitual que los campos que forman la llave primaria de la tabla se sitúen al principio de esta. Podemos mover el campo cuando_key pulsando-arrastrando-soltando para ubicarlo al principio de la tabla. El resultado de estas operaciones se muestra en la figura 3.58.

Renombrar y reubicar el índice.

Figura 3.58: Renombrar y reubicar el índice.

Usaremos esta dimensión para representar la evolución de la población a lo largo de los periodos o para mostrar la situación en un periodo concreto. Podemos facilitar las consultas en las que intervenga esta dimensión añadiendo nuevos campos que nos permitan seleccionar un grupo de periodos en lugar de tener que hacerlo de forma individual. Por ejemplo, si es frecuente presentar informes en los que aparezcan los periodos de un decenio, si tenemos los grupos predefinidos, la selección se puede realizar de forma inmediata.

Para añadir un campo decenio, podemos usar la funcionalidad que permite obtener la función de definición mediante ejemplos. Seleccionamos la columna periodo y pulsamos sobre Agregar columna > Columna a partir de los ejemplos > A partir de la selección (figura 3.59).

Definir columna a partir de ejemplos.

Figura 3.59: Definir columna a partir de ejemplos.

En la nueva columna, comenzamos a introducir valores, cuando introduzcamos el segundo valor, hace una propuesta para el resto marcándolos en gris. Como no son los adecuados, comenzamos a corregir desde la primera posición donde vemos que no es el adecuado. En la parte inmediatamente superior, va adaptando la función de generación a los valores que vamos introduciendo. En el momento que veamos que el resultado es correcto, pulsamos sobre Aceptar (figura 3.60).

Añadir ejemplos en la nueva columna.

Figura 3.60: Añadir ejemplos en la nueva columna.

Renombramos el nuevo campo con el nombre decenio. El resultado se muestra en la figura 3.61.

Resultado de definir columna a partir de ejemplos.

Figura 3.61: Resultado de definir columna a partir de ejemplos.

Ejercicio 3.5 Genera la tabla de la dimensión Cuándo con los campos periodo, decenio y una llave generada (captura una pantalla del resultado final donde se vean todos los pasos del apartado PASOS APLICADOS).

Dimensión Dónde

Para la dimensión Dónde, actuamos de la misma forma: creamos una consulta mediante referencia a la tabla original y la renombramos.

Para seleccionar los campos de esta dimensión, podemos seleccionar las columnas pulsando sobre su cabecera o acceder a la lista de columnas pulsando sobre Inicio > Administrar columnas > Elegir columnas > Elegir columnas (figura 3.62).

Seleccionar las columnas de la consulta.

Figura 3.62: Seleccionar las columnas de la consulta.

Se abre la ventana de la figura 3.63, donde podemos seleccionar las columnas que deseamos incluir en la consulta. En este caso, dejamos seleccionadas las columnas a considerar en la dimensión Dónde: no se considera el periodo, las medidas, ni los códigos de elementos organizativos (que no consideramos necesarios para realizar consultas).

Selección de columnas.

Figura 3.63: Selección de columnas.

A continuación, debemos eliminar las filas duplicadas considerando los valores de todas las columnas. Seleccionamos las columnas (por ejemplo, pulsamos sobre la cabecera de la primera columna y, manteniendo pulsada la tecla Mayús., pulsamos sobre la cabecera de la última columna), y pulsamos sobre Inicio > Reducir filas > Quitar filas > Quitar duplicados (como hicimos para la dimensión Cuándo).

Se ha reducido el número de filas de la tabla, conservándose exclusivamente las combinaciones de valores únicos. Para añadir una llave generada, procedemos como se hizo para la dimensión Cuándo. Siguiendo el mismo criterio que antes, la llamamos donde_key. Para situarla como primera columna de la tabla, una alternativa a la solución aplicada antes es seleccionarla y, en el menú contextual, pulsar sobre Mover > Al principio.

El resultado se muestra en la figura 3.64. La llave generada se sitúa al principio de la tabla.

Resultado de añadir la llave generada.

Figura 3.64: Resultado de añadir la llave generada.

Ejercicio 3.6 Genera la tabla de la dimensión Dónde con los campos propios de esa dimensión (al menos los incluidos en este apartado) y una llave generada (captura una pantalla del resultado final donde se vean todos los pasos del apartado PASOS APLICADOS).

3.5.3 Generar los hechos

Una vez hemos generado las tablas de todas las dimensiones (en este caso solo son dos), vamos a generar la tabla de hechos, a partir de una nueva tabla, sustituyendo los datos de las dimensiones por las llaves generadas y, además de estas, seleccionando solo las medidas.

Al igual que para las dimensiones, definimos una nueva consulta mediante referencia a partir de la tabla original. En este caso le damos como nombre el nombre del foco de atención: padrón.

Para sustituir los datos de una dimensión por su llave generada, combinamos la tabla de los hechos con la tabla de la dimensión correspondiente (Inicio > Combinar > Combinar consultas > Combinar consultas), definimos la unión mediante los campos comunes y seleccionamos solo la llave generada para incorporarla a los hechos.

Comenzamos por la dimensión Dónde: combinamos las consultas y estamos en la ventana de definición de la combinación, seleccionamos la tabla dónde. Si queremos una regla general para aplicar en todos los casos15, es la siguiente:

  • Seleccionamos los campos de la dimensión que están en los hechos: observamos que al ir seleccionándolos va apareciendo a la derecha del nombre el número de orden en la selección.

  • Seleccionamos en la tabla de hechos, los campos correspondientes en el mismo orden (para ir seleccionándolos, al pulsar sobre ellos, tenemos que mantener pulsada la tecla Ctrl.).

En la figura 3.65 se muestra parte de los campos seleccionados.

Selección de campos para unir dos tablas.

Figura 3.65: Selección de campos para unir dos tablas.

Es importante comprobar que se ha establecido correctamente la relación, esto se muestra en la zona inferior de la ventana de definición, donde se indica el número de filas de la primera tabla relacionadas.

Al expandir la tabla de la dimensión en la tabla de los hechos, seleccionamos exclusivamente la llave generada (figura 3.66).

Selección de la llave generada.

Figura 3.66: Selección de la llave generada.

Procedemos exactamente igual con la dimensión Cuándo. En este caso es todavía más sencillo por tener un solo campo en común.

Cuando tenemos todas las llaves externas añadidas, para acabar de definir la tabla de hechos, tenemos que seleccionarlas junto a las medidas. La selección la podemos realizar pulsando sobre Inicio > Administrar columnas > Elegir columnas > Elegir columnas. En la ventana llevamos a cabo la selección (figura 3.67).

Selección de columnas de la tabla de hechos.

Figura 3.67: Selección de columnas de la tabla de hechos.

Seleccionamos exclusivamente las medidas hombres, mujeres y superficie_ha, y las llaves externas donde_key y cuando_key. Los niveles de altitud los hemos incorporado a la dimensión y no nos interesa la altitud concreta. La cantidad de habitantes la podemos obtener a partir de las medidas seleccionadas.

Si queremos seguir la costumbre de situar los campos de la llave primaria la principio de la tabla, movemos las llaves externas a esa posición (mediante cualquiera de los métodos usados anteriormente).

En este caso no hemos cambiado la granularidad de los datos iniciales (definidos a nivel de municipio y periodo) y podríamos dar por acabado aquí el proceso de transformación. En otros casos, si se cambia la granularidad o sospechamos que pueda haber datos fragmentados por algún motivo, deberemos agrupar los datos de manera que la combinación de llaves externas formen la llave primaria de la tabla.

Teniendo seleccionada la tabla de hechos, pulsamos sobre Transformar > Tabla > Agrupar por (figura 3.68).

Agrupar las filas de una tabla.

Figura 3.68: Agrupar las filas de una tabla.

Realizamos la definición como se muestra en la figura 3.69. Para ir añadiendo los nombres de las medidas, pulsamos sobre Agregar agrupación.

Definición de la agrupación de las filas de la tabla de hechos.

Figura 3.69: Definición de la agrupación de las filas de la tabla de hechos.

Definimos las llaves externas como los campos utilizados para realizar la agrupación. Para cada medida, definimos la función de agregación y su nombre (podemos conservar el mismo). Esta operación cambia los tipos a las medidas, los define como Número decimal; podemos redefinir su tipo, en este caso, las medidas mujeres y hombres son de tipo Número entero.

3.5.4 Seleccionar las tablas que se devuelven a Power BI

Con esto tenemos las tablas de dimensiones y hechos generadas, serán las que usaremos para realizar consultas. El resto de tablas han sido y siguen siendo necesarias para definir estas, sin embargo, no debemos complicar innecesariamente el modelo de datos con ellas ya que no las usaremos para definir informes en Power BI. Podemos configurar que una tabla no pase a Power BI cambiando los parámetros del menú contextual.

En la figura 3.70, se muestra el menú contextual de la tabla original, debemos pulsar sobre la opción Habilitar carga para deshabilitarla y evitar que pase al modelo de datos de Power BI.

Deshabilitar la carga de una tabla.

Figura 3.70: Deshabilitar la carga de una tabla.

Cuando deshabilitamos esa opción, aparece la ventana de advertencia de la figura 3.71, que se refiere a Power BI, no a su uso en Power Query, que no se ve afectado, pulsamos sobre Continuar.

Advertencia al deshabilitar la carga de una tabla.

Figura 3.71: Advertencia al deshabilitar la carga de una tabla.

Además de para la tabla original, hacemos esta misma operación para las tablas municipios y cod-habitantes.

Para acabar, traspasamos los datos de las tablas de hechos y dimensiones a Power BI pulsando sobre Inicio > Cerrar > Cerrar y aplicar > Cerrar y aplicar.

El resultado obtenido en Power BI se muestra en la figura 3.72.

Tablas de hechos y de dimensiones en Power BI.

Figura 3.72: Tablas de hechos y de dimensiones en Power BI.

Ejercicio 3.7 Genera la tabla de hechos padrón (captura una pantalla del resultado final donde se vean todos los pasos del apartado PASOS APLICADOS).

  • Configura las consultas definidas de manera que solo pasen a Power BI las tablas de hechos y dimensiones, y actualízalas en Power BI (captura una pantalla de Power BI donde se vean los datos disponibles para consulta).

3.6 Información adicional

De entre todas las posibilidades adicionales que ofrece esta herramienta, vamos a ver cómo obtener una representación gráfica de las transformaciones, también el código que genera y, por último, cómo exportar las tablas obtenidas.

3.6.1 Representación gráfica

En Power Query, podemos obtener una representación gráfica de las operaciones realizadas pulsando sobre Vista > Dependencias > Dependencias de la consulta (figura 3.73).

Dependencias de la consulta.

Figura 3.73: Dependencias de la consulta.

La representación obtenida se muestra en la figura 3.74

Representación gráfica de las operaciones.

Figura 3.74: Representación gráfica de las operaciones.

3.6.2 Código en lenguaje M

También en Power Query, seleccionando una cualquiera de las consultas definidas y pulsando sobre Vista > Uso avanzado > Editor avanzado (figura 3.73, a la izquierda de Dependencias de la consulta), podemos ver el código en lenguaje M de la consulta (figura 3.75).

Código de una consulta.

Figura 3.75: Código de una consulta.

Los nombres de los pasos que se presentan en la ventana principal se corresponden con nombres de variables a los que se les aplican funciones que implementan la operación correspondiente. Es intuitivo y hacer modificaciones directamente es asequible, aunque no lo hemos necesitado y, por tanto, no lo vamos a hacer aquí.

Este código se puede copiar y pegar directamente en la ventana correspondiente de Power Query en Excel y viceversa, si fuera necesario.

3.6.3 Exportación de datos en foma de tabla

Es posible que nos interese trabajar con los datos en el formato que hemos obtenido, en forma de tablas de dimensiones y hechos, en otra herramienta. Ni Power Query ni Power BI ofrecen una forma directa de exportar los datos de las tablas, pero Power BI permite copiarlas en el portapapeles.

En Power BI, estado situados en el modo Datos (icono central de la barra vertical situada en la parte izquierda), pulsando en el símbolo “…” que aparece a la derecha del nombre de la tabla (en la columna de la derecha), se abre un menú de opciones, pulsando sobre Copiar tabla (figura 3.76) copia la tabla actual en el portapapeles.

Copiar una tabla en el portapapeles.

Figura 3.76: Copiar una tabla en el portapapeles.

La tabla copiada podemos pegarla en una hoja de cálculo de LibreOffice (o cualquier otra aplicación similar) y guardarla en el formato que se considere adecuado, por ejemplo CSV.

Ejercicio 3.8 Obtén la siguiente información adicional:

  • Representación gráfica de las transformaciones realizadas (captura la pantalla).

  • Guarda las tablas de dimensiones y hechos en formato CSV (captura una pantalla para cada tabla en la hoja de cálculo).

Bibliografía

Raviv, Gil. 2019. Collect, Combine, and Transform Data Using Power Query in Excel and Power BI. Microsoft Press.


  1. Está disponible a partir de la versión de Office 2010, en la que hay que descargarla e instalarla, en versiones posteriores solo hay que activarla.↩︎

  2. En el ejemplo sobre el que estamos trabajando, hemos descargado los datos en dos formatos, Excel y CSV; los datos son los mismos pero en el caso de Excel tienen el formato de tabla dinámica. Por eso estas operaciones no serían necesarias en este caso. Se presentan porque en otras situaciones podemos encontrar los datos solo en formato de tabla dinámica.↩︎

  3. Cuando he considerado adecuado capturar la pantalla completa, he optado por el tamaño del menú de la figura 3.4, es decir, el mínimo que lo muestra por completo, aunque haya opciones agrupadas. El objetivo de las capturas de pantalla es mostrar dónde se encuentran las opciones del menú o mostrar algún aspecto de la estructura o disposición de los datos para orientar en su realización, no los valores concretos de estos que pueden resultar difíciles de ver por su tamaño. En caso necesario, están comentados en el texto asociado. Cuando se muestra alguna ventana de configuración, he procurado que el tamaño de letra sea más legible.↩︎

  4. El nombre depende de la provincia.↩︎

  5. Insisto en la recomendación de eliminar el paso Tipo cambiado: por ejemplo, podemos tener códigos compuestos solo por números pero si se tratan como campos numéricos, se eliminan los ceros por la izquierda de manera que en algunos casos tendríamos datos distintos a los originales, este es el caso de COD_INE.↩︎

  6. El resultado debe ser similar a los anteriores, pero no se trata de repetir los pasos que acabamos de hacer para este último.↩︎

  7. Hemos comprobado que no es así, porque había valores null que nos habían ocasionado errores.↩︎

  8. Si hemos seguido los pasos aquí descritos y no tenemos campos vacíos.↩︎