Hoy usaremos algunas funcionalidades de Power Query (Obtener y transformar) en nuestras hoja de cálculo Excel, así como un par de funciones interesantes.
El asunto es que nos han enviado un listado con unos conceptos agregados (aaa, bbb, ccc y ddd ) en un solo campo de nuestra tabla.. siendo nuestro objetivo obtener información individualizada de cada uno de esos conceptos.
Importante:!!: Sabemos que el criterio de reparto es proporcional, a partes iguales...
Esta sería nuestra tabla:
El primer paso es, como siempre, cargar en nuestro Editor de consultas de PQ nuestra tabla.
Desde la ficha de Datos > grupo Obtener y transformar > botón Desde una tabla.
Con la consulta a la vista, desde la ficha Agregar columna > grupo General > botón Columna personalizada configuraremos la siguiente fórmula:
=[Importe]/List.Count(Text.Split([Concepto],"|"))
Fijémonos en las dos funciones de Power Query:
Text.Split - función de texto
devuelve una lista a partir de una cadena, teniendo en cuenta el separador indicado
Text.Split([Concepto],"|")
List.Count - función de lista
devuelve un conteo de elementos en una lista existente
List.Count(listado)
En nuestro caso hemos aprovechado para operar y obtener el reparto del 'Importe' correspondiente.
En el siguiente paso vamos a generar cuatro columnas condicionales nuevas, una por cada elemento existente: aaa, bbb, ccc y ddd.
Podemos hacerlo una a una desde la ficha Agregar columna > grupo General > botón Columna condicional
Prestemos atención a la opción de Salida por 'Columna' y no por 'Valor'.
Repetiríamos esta configuración para los demás elementos... bbb, ccc y ddd
También podríamos trabajarlo con el Editor Avanzado con el código:
let
Source = Excel.CurrentWorkbook(){[Name="Tabla1"]}[Content],
#"Changed Type1" = Table.TransformColumnTypes(Source,{{"Fecha Registro", type date}}),
#"Added Custom" = Table.AddColumn(#"Changed Type1", "Num Eltos.", each [Importe]/List.Count(Text.Split([Concepto],"|"))),
#"Added Conditional Column" = Table.AddColumn(#"Added Custom", "aaa", each if Text.Contains([Concepto], "aaa") then [#"Num Eltos."] else 0),
#"Added Conditional Column1" = Table.AddColumn(#"Added Conditional Column", "bbb", each if Text.Contains([Concepto], "bbb") then [#"Num Eltos."] else 0),
#"Added Conditional Column2" = Table.AddColumn(#"Added Conditional Column1", "ccc", each if Text.Contains([Concepto], "ccc") then [#"Num Eltos."] else 0),
#"Added Conditional Column3" = Table.AddColumn(#"Added Conditional Column2", "ddd", each if Text.Contains([Concepto], "ddd") then [#"Num Eltos."] else 0)
in
#"Added Conditional Column3"
Observa como cada nueva línea es idéntica a la anterior en cuanto a estructura, por lo que se hace muy cómodo copiar y pegar, modificando obviamente los datos correspondientes.
Nuestra consulta, en este momento queda:
LLegados a este punto, con la información dividida por columnas, solo nos quedan un par de pasos simples.
De manera voluntaria quitaremos los campos 'originales' de 'Concepto', 'Importe' y 'Num Eltos.'.
Basta seleccionarlos y con el ratón, botón derecho, y Quitar columnas.
El último paso es igual de sencillo, seleccionaremos las cuatro columnas condicionales creadas (aaa, bbb, ccc y ddd) y desde la ficha Transformar > grupo Cualquier columna > botón Anular dinamización de columnas, quedando nuestra consulta:
Ya podemos devolver a la hoja de cálculo nuestra consulta resultante, así presionamos Cerrar y cargar en... y elegimos destino.
Solo nos falta crear una tabla dinámica sobre la consulta y trabajarla para obtener algo como lo siguiente:
Meta alcanzada.
El asunto es que nos han enviado un listado con unos conceptos agregados (aaa, bbb, ccc y ddd ) en un solo campo de nuestra tabla.. siendo nuestro objetivo obtener información individualizada de cada uno de esos conceptos.
Importante:!!: Sabemos que el criterio de reparto es proporcional, a partes iguales...
Esta sería nuestra tabla:
El primer paso es, como siempre, cargar en nuestro Editor de consultas de PQ nuestra tabla.
Desde la ficha de Datos > grupo Obtener y transformar > botón Desde una tabla.
Con la consulta a la vista, desde la ficha Agregar columna > grupo General > botón Columna personalizada configuraremos la siguiente fórmula:
=[Importe]/List.Count(Text.Split([Concepto],"|"))
Fijémonos en las dos funciones de Power Query:
Text.Split - función de texto
devuelve una lista a partir de una cadena, teniendo en cuenta el separador indicado
Text.Split([Concepto],"|")
List.Count - función de lista
devuelve un conteo de elementos en una lista existente
List.Count(listado)
En nuestro caso hemos aprovechado para operar y obtener el reparto del 'Importe' correspondiente.
En el siguiente paso vamos a generar cuatro columnas condicionales nuevas, una por cada elemento existente: aaa, bbb, ccc y ddd.
Podemos hacerlo una a una desde la ficha Agregar columna > grupo General > botón Columna condicional
Prestemos atención a la opción de Salida por 'Columna' y no por 'Valor'.
Repetiríamos esta configuración para los demás elementos... bbb, ccc y ddd
También podríamos trabajarlo con el Editor Avanzado con el código:
let
Source = Excel.CurrentWorkbook(){[Name="Tabla1"]}[Content],
#"Changed Type1" = Table.TransformColumnTypes(Source,{{"Fecha Registro", type date}}),
#"Added Custom" = Table.AddColumn(#"Changed Type1", "Num Eltos.", each [Importe]/List.Count(Text.Split([Concepto],"|"))),
#"Added Conditional Column" = Table.AddColumn(#"Added Custom", "aaa", each if Text.Contains([Concepto], "aaa") then [#"Num Eltos."] else 0),
#"Added Conditional Column1" = Table.AddColumn(#"Added Conditional Column", "bbb", each if Text.Contains([Concepto], "bbb") then [#"Num Eltos."] else 0),
#"Added Conditional Column2" = Table.AddColumn(#"Added Conditional Column1", "ccc", each if Text.Contains([Concepto], "ccc") then [#"Num Eltos."] else 0),
#"Added Conditional Column3" = Table.AddColumn(#"Added Conditional Column2", "ddd", each if Text.Contains([Concepto], "ddd") then [#"Num Eltos."] else 0)
in
#"Added Conditional Column3"
Observa como cada nueva línea es idéntica a la anterior en cuanto a estructura, por lo que se hace muy cómodo copiar y pegar, modificando obviamente los datos correspondientes.
Nuestra consulta, en este momento queda:
LLegados a este punto, con la información dividida por columnas, solo nos quedan un par de pasos simples.
De manera voluntaria quitaremos los campos 'originales' de 'Concepto', 'Importe' y 'Num Eltos.'.
Basta seleccionarlos y con el ratón, botón derecho, y Quitar columnas.
El último paso es igual de sencillo, seleccionaremos las cuatro columnas condicionales creadas (aaa, bbb, ccc y ddd) y desde la ficha Transformar > grupo Cualquier columna > botón Anular dinamización de columnas, quedando nuestra consulta:
Ya podemos devolver a la hoja de cálculo nuestra consulta resultante, así presionamos Cerrar y cargar en... y elegimos destino.
Solo nos falta crear una tabla dinámica sobre la consulta y trabajarla para obtener algo como lo siguiente:
Meta alcanzada.
Estimado Ismael, me podrías enviar el archivo de trabajo (lmoscosoz@gmail.com) para realizar el ejemplo paso a paso? Te agradezco de antemano.
ResponderEliminarSaludos
Lucho
Hola Luis
Eliminarlo siento, pero no guardo los ficheros :'(
Repite los pasos y cualquier duda comentas
Sdls