DISTINCTCOUNT con AGRUPARPOR: contar valores únicos como en DAX

Dos miembros de la comunidad (en hilos separados del 9 y 15 de enero) plantearon el mismo reto: usar AGRUPARPOR para agrupar datos y, además de SUMA y CONTARA, obtener un conteo de valores únicos (equivalente al DISTINCTCOUNT de DAX). Excel no tiene una función nativa para esto dentro de AGRUPARPOR.

En el primer caso, un usuario necesita agrupar por sucursal mostrando el número de clientes únicos y la facturación total. En el segundo, otro usuario quiere agrupar por categoría con suma de importes, conteo de registros y conteo de NIFs únicos, con cabeceras personalizadas.

Nacho resuelve el primer caso con una LAMBDA personalizada CONTARA(UNICOS()):

``
=AGRUPARPOR(F2:F80;
APILARH(D2:D80;S2:S80);
APILARV(
APILARH(LAMBDA(X;CONTARA(UNICOS(X)));SUMA);
APILARH("CLIENTES";"FACTURACION")
);;;;S2:S80<>0)
`

La clave: pasar LAMBDA(X;CONTARA(UNICOS(X))) como función de agregación personalizada dentro de AGRUPARPOR. Se combinan varias funciones de agregación con APILARH.

Leo aborda el segundo caso con COINCIDIRX + UNICOS para simular DISTINCTCOUNT:

`
=LET(
a;T4:.T2000; b;AB4:.AB2000; c;AC4:.AC2000;
AGRUPARPOR(
APILARH(b;a);
APILARH(c;c;COINCIDIRX(a&b;UNICOS(a&b)));
APILARH(SUMA;CONTARA;SINGLE);;0
))
`

El truco: crea una columna auxiliar con COINCIDIRX(a&b;UNICOS(a&b)) que asigna un número ordinal a cada combinación única. Luego usa SINGLE (equivalente a MIN) para contar únicos.

La evolución de Leo añade cabeceras personalizadas con EXPANDIR + SI.ND:

`
=LET(
a;T4:.T2000; b;AB4:.AB2000; c;AC4:.AC2000;
g;AGRUPARPOR(APILARH(b;a);
APILARH(c;c;COINCIDIRX(a&b;UNICOS(a&b)));
APILARV(APILARH(SUMA;CONTARA;MIN);
{"Clase"\"NIF"};"";"Conteo"\"Unicos"});;0;5);
SI.ND(EXPANDIR({"Clase"\"NIF"};2;3);g))
`

Expande las cabeceras a la misma dimensión que la tabla y usa SI.ND para que los errores #N/D se reemplacen por los datos reales de AGRUPARPOR`.

Más contenido de Excel en InflueXcel