martes, 29 de diciembre de 2020

Power Query: Porcentajes sobre el total

Seguimos avanzando con Power Query.
Hoy algo siempre útil, el cálculo porcentual sobre el total general.
Power Query: Porcentajes sobre el total
Como vemos el objetivo es incluir para cada país, cada fila, el peso o porcentaje de cada país sobre el total acumulado de éstos.
Como siempre cargaremos nuestra tabla al editor de Power Query, y una vez en la consulta creada añadiremos una columna personalizada, desde la ficha Agregar Columna > General > Columna personalizada,, donde le asignaremos el nombre '% Total' y la fórmula:
= [VENTAS] / List.Sum(#"Tipo cambiado"[VENTAS])
Power Query: Porcentajes sobre el total
Importante la forma en que nos referimos, con la función M List.Sum, al campo completo de VENTAS.. indicando la lista completa de elementos de la tabla de trabajo (paso previo) y de una de sus columnas '[VENTAS]'.

Muy rápido y simple, sin necesidad de variables o cálculos externos... al modo Excel :D

Calcularemos ahora los porcentajes de cada país respecto al subtotal de la REGIÓN a la que pertenece.
Seguimos en nuestra consulta de Power Query y añadiremos una nueva columna personalizada, que llamaré '% Región' con la fórmula:
= [VENTAS]/ Table.SelectRows(Table.Group(#"Tipo cambiado1", {"REGION"},
{{"Region Total", each List.Sum([VENTAS]), type number}})
, each ([REGION] = [REGION])){[REGION=[REGION]]}[Region Total]

Power Query: Porcentajes sobre el total
En este caso el truco consiste en agrupar 'virtualmente' por REGION, y así poder trabajar sobre ese parcial en cada caso:
Table.Group(#"Tipo cambiado1", {"REGION"},{{"Region Total", each List.Sum([VENTAS]), type number}})
Para finalmente con Table.SelectRows trabajamos en cada fila con el parcial que nos interesa, esto es, cuando coincidan las REGIONES, recuperando el dato de la columna agrupada [Region Total].
Table.SelectRows(... , each ([REGION] = [REGION])){[REGION=[REGION]]}[Region Total]
Obteniendo finalmente el cociente buscado...

El código completo quedaría:
let
    Origen = Excel.CurrentWorkbook(){[Name="Tabla1"]}[Content],
    #"Tipo cambiado" = Table.TransformColumnTypes(Origen,{{"PAIS", type text}, {"VENTAS", Int64.Type}}),
    
    #"Personalizada agregada" = Table.AddColumn(#"Tipo cambiado", "% Total", each [VENTAS] / List.Sum(#"Tipo cambiado"[VENTAS])),

    #"Tipo cambiado1" = Table.TransformColumnTypes(#"Personalizada agregada",{{"% Total", Percentage.Type}}),
    
    #"Personalizada agregada1" = Table.AddColumn(#"Tipo cambiado1", "% Region", 
                each [VENTAS]/ Table.SelectRows(
                                    Table.Group(#"Tipo cambiado1", {"REGION"}, 
                                    {{"Region Total", each List.Sum([VENTAS]), type number}})
                                , each ([REGION] = [REGION])){[REGION=[REGION]]}[Region Total])
in
    #"Personalizada agregada1"

Power Query: Porcentajes sobre el total

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.