Veremos hoy un clásico del análisis de ventas: Listado del top 3 de ventas por cada cliente... resuelto con Power Query.
Partiremos de un sencillo listado (que ya he ordenado para verificar los resultados obtenidos):
Notemos algo que en ocasiones pasamos por alto.. en uno de los clientes aparece un importe repetido (en segunda y tercera posición). Obviamente, en mi opinión, ambas facturas de ventas deberán aparecer en nuestro listado.
Así pues cargaremos la tabla de ventas 'TblVENTAS' al editor de Power Query, y desde ahí entraremos al Editor avanzado donde escribiremos:
Lo relevante del ejemplo es cómo con la función M: Table.Group conseguimos nuestros listados
Table.Group(table as table, key as any, aggregatedColumns as list, optional groupKind as nullable number, optional comparer as nullable function) as table
agrupamos sobre el campo 'Cliente' e incorporamos dos nuevas 'columnas agregadas': 'Sum3' y 'Top3'.
La primera 'Sum3' responde a una secuencia de funciones M anidadas, donde primero ordenamos en descendente la lista de importes 'Total' de cada cliente (con List.Sort), para luego recuperar los tres primeros con List.FirstN.
Esta combinación sería la equivalente de DAX: TOPN.
Finalmente, para 'Sum3' aplicamos List.Sum para acumular los tres 'totales' resultantes... para cada cliente.
Para la otra columna agregada 'Top3' a partir de la base anterior (List.FirstN sobre List.Sort), y con el fin de concatenar los tres 'totales' obtenidos, le aplicaremos una función List.Transform para convertir en texto cada importe, y poder unirlos con Text.Combine.
Para acabar dividiremos en tres columnas esta combinación y aplicaremos un cambio en el tipo de datos de éstas.
El resultado es el esperado:
Partiremos de un sencillo listado (que ya he ordenado para verificar los resultados obtenidos):
Notemos algo que en ocasiones pasamos por alto.. en uno de los clientes aparece un importe repetido (en segunda y tercera posición). Obviamente, en mi opinión, ambas facturas de ventas deberán aparecer en nuestro listado.
Así pues cargaremos la tabla de ventas 'TblVENTAS' al editor de Power Query, y desde ahí entraremos al Editor avanzado donde escribiremos:
let Origen = Excel.CurrentWorkbook(){[Name="TblVENTAS"]}[Content], GrupoCliente = Table.Group(Origen, {"Cliente"}, { {"Sum3", each List.Sum( List.FirstN (List.Sort([Total],Order.Descending),3) )}, {"Top3", each Text.Combine(List.Transform(List.FirstN (List.Sort([Total],Order.Descending),3),each Number.ToText(_) ),", ")} }), DividirColumna = Table.SplitColumn(GrupoCliente, "Top3", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"Top3.1", "Top3.2", "Top3.3"}), TipoCambiado = Table.TransformColumnTypes(DividirColumna,{{"Top3.1", Int64.Type}, {"Top3.2", Int64.Type}, {"Top3.3", Int64.Type}}) in TipoCambiado
Lo relevante del ejemplo es cómo con la función M: Table.Group conseguimos nuestros listados
Table.Group(table as table, key as any, aggregatedColumns as list, optional groupKind as nullable number, optional comparer as nullable function) as table
agrupamos sobre el campo 'Cliente' e incorporamos dos nuevas 'columnas agregadas': 'Sum3' y 'Top3'.
La primera 'Sum3' responde a una secuencia de funciones M anidadas, donde primero ordenamos en descendente la lista de importes 'Total' de cada cliente (con List.Sort), para luego recuperar los tres primeros con List.FirstN.
Esta combinación sería la equivalente de DAX: TOPN.
Finalmente, para 'Sum3' aplicamos List.Sum para acumular los tres 'totales' resultantes... para cada cliente.
Para la otra columna agregada 'Top3' a partir de la base anterior (List.FirstN sobre List.Sort), y con el fin de concatenar los tres 'totales' obtenidos, le aplicaremos una función List.Transform para convertir en texto cada importe, y poder unirlos con Text.Combine.
Para acabar dividiremos en tres columnas esta combinación y aplicaremos un cambio en el tipo de datos de éstas.
El resultado es el esperado:
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.