Seguimos con la herramienta Obtener y transformar/Power Query.
Hoy trabajaremos para conseguir, a partir de una tabla con campo 'Zona', 'Producto' e 'Importes', una nueva tabla resumen con importes acumulados de los 'productos' por cada 'zona' (a semejanza de una tabla dinámica'.
En particular nos aprovecharemos de una herramienta especialmente útil de Power Query: Columna dinámica / Unpivot.
Como siempre, desde la tabla, cargamos los datos en el editor de consultas:
Desde la hoja de cálculo accedemos a la Ficha Datos > grupo Obtener y transformar > Desde una tabla.
Ya en editor de consulta, y con nuestra consulta habilitada, seleccionamos el campo 'Zona', y navegamos hasta el menú Transformar > grupo Cualquier columna > botón Columna dinámica
Se abrirá una ventana de configuración donde ajustar la conversión.
Seleccionaremos como 'columna de valores' el campo numérico ('Importes'); y como función de valor agregado (que se empleará para agrupar los datos cruzados) la Suma.
Hemos acabado. Podemos Cerrar y Cargar para obtener el resultado mostrado al inicio de la explicación.
Tenemos un tabla de referencia cruzada por zona y producto, y resumido por suma de importes acumulados...
Y como una tabla dinámica, nuevos elementos se incorporarán automáticamente en nuestro informe resumen.
A modo de curiosidad, si entramos en el editor avanzado de la consulta veremos:
Donde observamos el uso de la función Table.Pivot, que es precisamente la que habilita la posibilidad de crear nuevas columnas por cada elemento del campo indicado.
Hoy trabajaremos para conseguir, a partir de una tabla con campo 'Zona', 'Producto' e 'Importes', una nueva tabla resumen con importes acumulados de los 'productos' por cada 'zona' (a semejanza de una tabla dinámica'.
En particular nos aprovecharemos de una herramienta especialmente útil de Power Query: Columna dinámica / Unpivot.
Como siempre, desde la tabla, cargamos los datos en el editor de consultas:
Desde la hoja de cálculo accedemos a la Ficha Datos > grupo Obtener y transformar > Desde una tabla.
Ya en editor de consulta, y con nuestra consulta habilitada, seleccionamos el campo 'Zona', y navegamos hasta el menú Transformar > grupo Cualquier columna > botón Columna dinámica
Se abrirá una ventana de configuración donde ajustar la conversión.
Seleccionaremos como 'columna de valores' el campo numérico ('Importes'); y como función de valor agregado (que se empleará para agrupar los datos cruzados) la Suma.
Hemos acabado. Podemos Cerrar y Cargar para obtener el resultado mostrado al inicio de la explicación.
Tenemos un tabla de referencia cruzada por zona y producto, y resumido por suma de importes acumulados...
Y como una tabla dinámica, nuevos elementos se incorporarán automáticamente en nuestro informe resumen.
A modo de curiosidad, si entramos en el editor avanzado de la consulta veremos:
let Origen = Excel.CurrentWorkbook(){[Name="Tbl_Pdtos"]}[Content], #"Columna dinamizada" = Table.Pivot(Origen, List.Distinct(Origen[Zona]), "Zona", "Importes", List.Sum) in #"Columna dinamizada"
Donde observamos el uso de la función Table.Pivot, que es precisamente la que habilita la posibilidad de crear nuevas columnas por cada elemento del campo indicado.
Hola amigo, muchas gracias por tus aportes, son de gran ayuda, tengo una duda: como Pivotear valores de Texto? usando tu ejemplo tengo:
ResponderEliminarZona | Producto |
==================
Norte | P1 |
Norte | P2 |
Sur | P3 |
Sur | P4 |
y quisiera obtener:
Norte | Sur |
================
P1 | P3 |
P2 | P4 |
de antemano muchas gracias por la ayuda que puedas prestarme.
Saludos,
MA
Hola Miguel
Eliminaren unos días (a finales de este mes) está programada la publicación de un post que creo te dará alguna pista de cómo conseguirlo...
Más posibilidades sería con columnas condicionales... siempre que tengas un número finito de zonas
Saludos
Este comentario ha sido eliminado por el autor.
EliminarHola Ismael, muchas gracias por tu respuesta y estaré muy atento a ese post, te queria comentar que de tanto buscar lei que alguien recomendaba crear una columna adicional para poder agrupar y así lo hice y me funcionó. te dejo como lo resolvi:
EliminarTenemos la siguiente tabla:
Zona | Texto
---------------
Norte | TextoA
Norte | TextoB
Sur | TextoC
Sur | TextoD
Este | TextoE
Oeste | TextoF
Oeste | TextoG
Oeste | TextoH
y queremos que nos quede así:
Norte | Sur | Este | Oeste
---------------------------------
TextoA | TextoC | TextoE | TextoF
TextoB | TextoD | null | TextoG
null | null | null | TextoH
Para eso debemos agregar a la tabla original un GRUPO que se reinicie por cada cambio de la Cabecera (Zona) p.e. Norte será 1 y 2, Sur será también 1 y 2, Este será 1 y Oeste será 1,2 y 3.
Por que? se hace para agregar líneas a cada cabecera (Zona)
Zona | Texto | Grupo
----------------------
Norte | TextoA | 1
Norte | TextoB | 2
Sur | TextoC | 1
Sur | TextoD | 2
Este | TextoE | 1
Oeste | TextoF | 1
Oeste | TextoG | 2
Oeste | TextoH | 3
Paso para transformar ya en PowerQuery:
1) Seleccionar la columna con la cabecera (Zona)
2) le damos al botón de "COLUMNAS DINAMICAS"
2) Seleccionar la columna con valores (Texto)
4) en opciones avanzadas seleccionar->No agregar
5) Las columnas no seleccionadas serán las filas (Grupo + n..)
6) eliminamos la Columna creada (Grupo)
**El resultado será el esperado**
El codigo de PowerQuery es:
=========================================
let
Origen = Excel.CurrentWorkbook(){[Name="MiTabla"]}[Content],
#"Columna dinamizada" = Table.Pivot(Origen, List.Distinct(Origen[Zona]), "Zona", "Texto"),
#"Columnas quitadas" = Table.RemoveColumns(#"Columna dinamizada",{"Grupo"})
in
#"Columnas quitadas"
=========================================
Espero haberme explicado bien y contribuir con la comunidad!
Gracias por la atención.
Muchas gracias por compartirlo!!
Eliminar