Agrupar por en Power Query: Table.Group, varias agregaciones y conteos
Aprende a agrupar ventas por ciudad y vendedor con Table.Group, varias agregaciones a la vez y conteos de valores distintos.

Un listado de ventas con cientos de filas no responde por sí solo a la pregunta que importa: ¿cuánto vendió cada ciudad, cuántos pedidos hizo cada vendedor o cuál fue el promedio por cliente? En Excel se resuelve con una tabla dinámica, pero cuando los datos vienen de una carpeta de archivos, de una base de datos o de varias consultas ya limpias, lo sensato es hacer ese resumen dentro de Power Query, antes de cargar la tabla al modelo o a la hoja de cálculo.
Para eso está Agrupar por, que en el lenguaje M se escribe con la función Table.Group. Permite tomar una tabla, agruparla por una o varias columnas y calcular, para cada grupo, tantas columnas nuevas como se necesiten: sumas, conteos, promedios, máximos, mínimos o conteos de valores distintos. Este artículo muestra cómo hacerlo con ejemplos de ventas de distribuidoras y tiendas de Ecuador.
Qué hace Agrupar por
En el Editor de Power Query, el botón Agrupar por está en la pestaña Inicio (en Excel: Datos → Obtener datos → Iniciar el Editor de Power Query; en Power BI Desktop: Inicio → Transformar datos). Tiene dos modos:
- Básico: agrupa por una columna y calcula una operación, como suma o conteo de filas.
- Avanzado: agrupa por varias columnas y agrega tantas columnas nuevas como se quieren, cada una con su propia operación.
Detrás del botón está la función Table.Group. Su forma general es:
= Table.Group(
tabla,
columnas_para_agrupar,
{
{"nombre_columna_nueva", cada_fila_grupo, tipo_dato},
...
}
)
La palabra each indica que la operación se aplica fila a fila dentro de cada grupo, y el símbolo _ representa la tabla temporal de ese grupo.
Paso 1: los datos de ejemplo
Imagina una consulta llamada Ventas con estas columnas: Fecha, Ciudad, Vendedor, Cliente, Producto, Cantidad y Total. Cada fila es un pedido de una tienda o distribuidora de Manta, Portoviejo o Guayaquil.
let
Origen = #table(
{"Fecha", "Ciudad", "Vendedor", "Cliente", "Producto", "Cantidad", "Total"},
{
{#date(2026,1,10), "Manta", "Ana", "Distribuidora Costa", "Café 500 g", 10, 65},
{#date(2026,1,11), "Manta", "Ana", "Ferretería Andrade", "Arroz 5 kg", 4, 23},
{#date(2026,1,12), "Portoviejo", "Luis", "Tienda El Sol", "Azúcar 2 kg", 12, 34},
{#date(2026,1,13), "Guayaquil", "Carla", "Distribuidora Costa", "Aceite 1 L", 6, 27},
{#date(2026,1,14), "Manta", "Ana", "Tienda El Sol", "Café 500 g", 5, 33}
}
),
TipoCambiado = Table.TransformColumnTypes(Origen, {
{"Fecha", type date}, {"Total", type number}, {"Cantidad", Int64.Type}
})
in
TipoCambiado
Paso 2: agrupar por una columna y contar
Lo más común es saber cuánto vendió cada ciudad y cuántos pedidos tiene cada una. Con el modo avanzado de Agrupar por:
- Selecciona la consulta Ventas y pulsa Agrupar por.
- Elige Avanzado.
- En Columna, selecciona
Ciudad. - Agrega una nueva operación con Operación = Suma, Nombre de la nueva columna =
Total vendido, sobre la columnaTotal. - Agrega otra operación con Operación = Conteo de filas, nombre
Pedidos. - Acepta.
El código M que genera Power Query es:
= Table.Group(
Ventas,
"Ciudad",
{
{"Total vendido", each List.Sum([Total]), type number},
{"Pedidos", each Table.RowCount(_), Int64.Type}
}
)
Resultado:
Ciudad Total vendido Pedidos
Manta 121 3
Portoviejo 34 1
Guayaquil 27 1
Conteo de filas. Table.RowCount(_) cuenta todas las filas de cada grupo, incluso si alguna celda está vacía. Si necesitas contar solo los valores no nulos de una columna, usa each List.Count(List.RemoveNulls([Total])).
Paso 3: varias agregaciones a la vez
Un resumen de ventas suele necesitar más que una suma. En el modo avanzado se pueden agregar tantas columnas como se quieran, cada una con su propia operación y nombre:
= Table.Group(
Ventas,
"Ciudad",
{
{"Total vendido", each List.Sum([Total]), type number},
{"Pedidos", each Table.RowCount(_), Int64.Type},
{"Promedio por pedido", each List.Average([Total]), type number},
{"Venta más alta", each List.Max([Total]), type number},
{"Venta más baja", each List.Min([Total]), type number}
}
)
Esto devuelve una fila por ciudad con todas las métricas lado a lado, lista para cargar al informe. Se pueden combinar operaciones de texto, como each Text.Combine([Producto], ", "), para ver qué productos aparecen en cada ciudad.
Paso 4: agrupar por varias columnas
Si quieres ver las ventas por ciudad y por vendedor, pon ambas columnas en el grupo:
= Table.Group(
Ventas,
{"Ciudad", "Vendedor"},
{
{"Total vendido", each List.Sum([Total]), type number},
{"Pedidos", each Table.RowCount(_), Int64.Type}
}
)
Cada combinación única de ciudad y vendedor genera una fila. Esto es útil, por ejemplo, para comparar el desempeño de Ana, Luis y Carla dentro de cada ciudad sin crear columnas auxiliares.
Paso 5: contar valores distintos
Para saber cuántos clientes distintos compraron en cada ciudad (no cuántos pedidos, sino cuántos clientes diferentes), usa List.Distinct dentro del conteo:
= Table.Group(
Ventas,
"Ciudad",
{
{"Total vendido", each List.Sum([Total]), type number},
{"Pedidos", each Table.RowCount(_), Int64.Type},
{"Clientes distintos", each List.Count(List.Distinct([Cliente])), Int64.Type}
}
)
List.Distinct([Cliente]) elimina los clientes repetidos dentro del grupo y List.Count cuenta lo que queda. Así sabes cuántos clientes reales mueven cada ciudad, no solo cuántas filas hay.
Unir con otros orígenes
Si los datos vienen de varios archivos de una carpeta, primero úsalos con combinar archivos de una carpeta y luego aplica Agrupar por sobre la consulta combinada. Si antes necesitas arreglar nombres de ciudades o fechas, revisa limpiar datos con Power Query; agrupar sobre datos sucios suma clientes distintos que en realidad son el mismo.
Errores frecuentes
- Expression.Error al sumar: la columna Total se leyó como texto. Cámbiala a número con Tipo cambiado antes de agrupar.
- Columnas que desaparecen: solo quedan las columnas de agrupación y las nuevas agregadas; las demás se pierden. Si las necesitas después, haz una consulta de referencia o une las tablas con Combinar consultas.
- Conteo de filas vs. conteo de valores:
Table.RowCount(_)cuenta filas, no clientes ni productos distintos. Para valores únicos usaList.Count(List.Distinct(...)). - Grupos vacíos o nulos: si la columna de agrupación tiene nulos, Power Query los trata como un grupo más. Filtra los nulos antes de agrupar si no quieres esa fila extra.
- El botón Agrupar por no aparece: asegúrate de estar en el Editor de Power Query y no en la hoja de Excel, y de tener seleccionada una consulta.
Agrupar por convierte una lista larga de ventas en un resumen útil sin salir de Power Query. Con una sola columna obtienes totales y conteos; con varias columnas y varias operaciones obtienes un tablero completo listo para cargar al informe.


