¿Qué es la anulación de dinamización de columnas?
- Jaime Franco Jimenez
- 12 feb 2024
- 4 Min. de lectura
Vamos a explicar cómo funciona la anulación de dinamización de columnas.
Vamos a ver ejemplos usando la opción de anulación de dinamización de columnas, y, la funcion Table.UnpivotOtherColumns.
Vamos a abrir una hoja de Excel, vamos a la pestaña de datos, dentro del grupo obtener y transformar datos, desplegamos obtener datos, desplegamos de otras fuentes, y, seleccionamos consulta en blanco.
Una vez dentro de Power Query, vamos a la pestaña vista, y, hacemos clic en editor avanzado.
Borramos las líneas existentes.
Usamos la funcion Table.FromRecords, que convierte registros en una lista de registros, abrimos un paréntesis, debemos de pasar una lista de registros, por lo que abrimos unas llaves.
Pulsamos Enter, abrimos un corchete, para introducir el primer registro, que va a estar compuesto de cuatro columnas, como primer nombre, ponemos producto1 e igualamos a producto1 entre comillas dobles, ponemos coma, el siguiente campo lo llamamos enero e igualamos a 1, el siguiente campo lo llamamos febrero e igualamos a 2, el ultimo campo, lo llamamos marzo e igualamos a 3, cerramos corchete, y, ponemos coma.
Cuando pulsamos en listo, y, volvemos a entrar en el editor avanzado, veremos como se ha agregado LET e IN.
Copiamos la línea, la copiamos, y, cambiamos producto1 por producto2, y, cambiamos los valores para los meses, pero, quitamos la coma final.
Cerramos llaves.
Cerramos paréntesis.
Hacemos clic en listo.
Tenemos una tabla de dos filas, y, cuatro columnas.
Vemos que el tipo de datos aun no ha sido cambiado porque aparece ABS/123, pero, lo dejamos.
Vamos a convertirlo en formato tabular, que no es otra cosa que devolvernos el formato original, si nos fijamos en el modelo, tenemos una columna llamada producto, otra columna, llamada meses, y, otra columna llamada, por ejemplo, valores.
Debemos de ir fila por fila, vamos a poner el primer producto en la columna producto.
Ahora, debemos de poner los meses para el producto1, pero debemos de transponerlos, quedaría:
Los valores para estos meses también debemos de transponerlos.
El valor producto1 se debe de repetir el número de meses que haya.
Para el siguiente producto la operación es la misma.
Lo que estamos haciendo es revertir el modelo, y, se conoce como anulación de dinamización de columnas.
Veamos un ejemplo, tenemos el siguiente modelo, donde tenemos una ciudad, el código de la ciudad, y, los valores para los años desde el año 2019 al año 2023.
Una vez en Power Query, vamos a pasos aplicados, y, borramos los pasos tipo cambiado, y, navegación.
Vemos lo siguiente:
Si hacemos clic en Table de la columna Data, que es el modelo que necesitamos, veremos en la parte inferior, el modelo, donde vemos que el encabezado no ha sido promovido.
Pues, vamos a promoverlo, pero no vamos a añadir un nuevo paso, vamos a la barra de fórmulas, vemos el argumento useHeaders de Excel.Workbook que es Null, es decir, no se ha promovido los encabezados.
Lo cambiamos a true.
Ya tenemos los encabezados promovidos.
Solo vamos a necesitar la columna data.
Volvemos a la barra de fórmulas, vamos al final de la expresión, abrimos dobles corchetes ponemos Data, cerramos corchete, con esto le estamos diciendo que solo nos devuelva la columna data.
= Excel.Workbook(File.Contents("C:\Users\migue\OneDrive - miguelangel\MIGUEL\DIRECTORIOS\CURSOS\POWER QUERY\2. NORMALIZAR DATOS EN POWER QUERY\DatosPoblación.xlsx"), true, true) [[Data]]
Hacemos clic en expandir.
Desmarcamos usar el nombre de columna original como prefijo.
Aceptamos.
Agregamos un nuevo paso.
Después del signo igual, ponemos Table.UnpivotOtherColumns, abrimos paréntesis, como argumento tabla, es el paso anterior.
= Table.UnpivotOtherColumns(#"Se expandió Data"
Como argumento pivotColumns como una lista, debemos de poner la columna que no va a cambiar, que es la columna ciudad, pero, debemos de ponerla entra llaves, porque debe de ser una lista.
= Table.UnpivotOtherColumns(#"Se expandió Data",{"Ciudad"}
Como argumento attributeColumn como texto, debemos de poner el nombre de encabezado para la segunda columna, le voy a poner atributo.
= Table.UnpivotOtherColumns(#"Se expandió Data",{"Ciudad"},"Atributo"
Como argumento valueColumn como texto, debemos de poner el nombre de encabezado para la tercera columna donde van a aparecer los valores, le voy a poner valores, y, cerramos paréntesis.
= Table.UnpivotOtherColumns(#"Se expandió Data",{"Ciudad"},"Atributo","Valores")
Aceptamos, y, ya tenemos el total por año para cada ciudad.
Con una celda dentro del modelo, pulsamos CTRL mas A para seleccionar el modelo, vamos a la pestaña transformar, y, hacemos clic en detectar tipo de datos.
Vemos que ha detectado el tipo de datos para cada columna.
Ahora, vamos a realizar el mismo ejemplo, pero, sin añadir tantos pasos.
Seguimos con el paso donde nos hemos quedado con la columna Data.
Agregamos un paso.
Despues del signo igual ponemos Table.TransformColumns, que transforma una tabla mediante una operación, como argumento tabla es el paso anterior.
= Table.TransformColumns(Origen
Como argumento transformOperations, donde el formato es { nombre de la columna, transformación }, pues, abrimos unas llaves, entre comillas dobles, ponemos Data, cerramos llaves, ponemos coma, ahora viene la transformación que queremos hacer dentro de la tabla, pues, ponemos la palabra clave each.
= Table.TransformColumns(Origen, {"Data", each
Ponemos la funcion Table.UnpivotOtherColumns.
= Table.TransformColumns(Origen, {"Data", each Table.UnpivotOtherColumns
Abrimos paréntesis.
Nos pide una table, ponemos un guion bajo, quiere decir que va a trabajar fila de la columna data.
= Table.TransformColumns(Origen, {"Data", each Table.UnpivotOtherColumns(_
El siguiente argumento es pivotcolumns como lista, que es la columna que debe de quedarse tal cual, pues, es la columna ciudad, entre comillas dobles, ponemos Ciudad, pero, debemos de proporcionarla como una lista, por lo que encerramos el nombre entre llaves.
= Table.TransformColumns(Origen, {"Data", each Table.UnpivotOtherColumns(_,{"Ciudad"}
El siguiente argumento es attributeColumn como texto, que es el nombre de la columna, ponemos entre comillas dobles Años.
= Table.TransformColumns(Origen, {"Data", each Table.UnpivotOtherColumns(_,{"Ciudad"},"Años"
El siguiente argumento es valueColumn como texto, que es la columna que contiene los valores, ponemos un nombre.
Cerramos paréntesis de Table.UnpivotOtherColumns, cerramos llaves, cerramos paréntesis de Table.TransformColumns.
= Table.TransformColumns(Origen, {"Data", each Table.UnpivotOtherColumns(_,{"Ciudad"},"Años","Valores")})
Aceptamos, y, seguimos teniendo la columna de Data, donde hacemos clic en Table, pero, no en Table, al lado, y, vemos en la parte inferior el modelo con anulación de dinamización de columnas.
Hacemos clic en expandir.
Desmarcamos usar el nombre de columna original como prefijo.
Aceptamos, y, ya lo tenemos.
Detectamos tipo de datos igual que lo hemos hecho para el ejemplo anterior.
Ahora, lo vamos a realizar desde Power Query, duplicamos la query, dejamos solo el paso origen, y, expandimos.
Hacemos clic con botón alternativo de raton sobre la columna ciudad, y, seleccionamos anulación de dinamización de otras columnas.
Pues, ya lo tenemos.
Volvemos a detectar tipo de datos.
Ya la podemos cargar en Excel, bien, como tabla, o, como tabla dinámica.
Miguel Angel Franco
Comentarios