jueves, 22 de octubre de 2020

Fórmulas desbordadas: Añadir Totales Generales

Ya hemos hablado en varios post de estas magníficas fórmulas y funciones desbordadas. Sin duda una experiencia en Excel ;-)
Hoy combinaremos y aplciaremos este comportamiento desbordado sobre unas funciones clásicas: la función SI y SUMAR.SI.CONJUNTO.
Nuestra meta es lograr incorporar unos Totales generales por filas y columnas a una tabla de referencia cruzada de forma automática...
Fórmulas desbordadas: Añadir Totales Generales


Partimos de una tabla 'TblDatos' en nuestra hoja de cálculo con campos: Año, País, Uds. A partir de dicha tabla queremos resumir o agrupar por Año y País las Uds vendidas, añadiendo además los Totales Generales por filas o columnas.
Fórmulas desbordadas: Añadir Totales Generales

Comenzaremos incorporando los encabezados de la tabla resumen... para lo cual haremos uso de las funciones desbordadas UNICOS y ORDENAR.
Así en la celda I3 introducimos la siguiente fórmula:
=TRANSPONER(ORDENAR(UNICOS(TblDatos[Año])))
donde obtenemos los elementos únicos del campo 'Año', ordenados en Ascendente, y cuya matriz resultante transponemos de vertical a horizontal.
Fórmulas desbordadas: Añadir Totales Generales

De forma similar obtenemos los encabezados para los países en la celda H4:
=ORDENAR(UNICOS(TblDatos[País]))
donde conseguimos en una matriz vertical los elementos únicos del campo 'País' ordenada en sentido Ascendente.
Fórmulas desbordadas: Añadir Totales Generales

Finalmente, apoyándonos en estos rangos desbordados anteriores, construiremos nuestro resumen de uds vendidas por Año y País.
Entonces en I4 insertamos la fórmula buscada:
=SI.ERROR( SI(SECUENCIA(CONTARA(UNICOS(TblDatos[País]))+1;1)>CONTARA(UNICOS(TblDatos[País])); SUMAR.SI.CONJUNTO(TblDatos[Uds];TblDatos[Año];I3#); SI(SECUENCIA(1;CONTARA(TRANSPONER(UNICOS(TblDatos[Año])))+1)>CONTARA(TRANSPONER(UNICOS(TblDatos[Año]))); SUMAR.SI.CONJUNTO(TblDatos[Uds];TblDatos[País];H4#); SUMAR.SI.CONJUNTO(TblDatos[Uds];TblDatos[Año];I3#;TblDatos[País];H4#))); SUMA(TblDatos[Uds]))
Fórmulas desbordadas: Añadir Totales Generales

Una fórmula algo larga, sin duda, pero sencilla de comprender... pero con una gran ventaja, y es que no necesita de ningún refresco ni actualización (como una tabla dinámica o una consulta de Power Query) para mostrar siempre los datos reales.
La explicamos.

Tenemos un primer uso de la función SI con una prueba lógica:
SI(SECUENCIA(CONTARA(UNICOS(TblDatos[País]))+1;1)>CONTARA(UNICOS(TblDatos[País]));
donde generamos una lista de números 1,2,3,.. hasta llegar al número que sobrepase el número de elementos únicos del campo 'País'; en nuestro ejemplo 1,2,3,4,5,6.
Comparando con el número de elementos únicos de 'País'.
Vemos la idea en la siguiente imagen
Fórmulas desbordadas: Añadir Totales Generales

Esta prueba lógica nos dice, entonces, en qué fila nos encontramos... y si estuvieramos en la última fila (en nuestro ejemplo, la 6) aplicaría la opción de 'si_verdadero'
SUMAR.SI.CONJUNTO(TblDatos[Uds];TblDatos[Año];I3#)
esto es, la suma acumulada para cada 'Año'.
De manera semejante aplicamos en nuestra fórmula un segundo condicional:
SI(SECUENCIA(1;CONTARA(TRANSPONER(UNICOS(TblDatos[Año])))+1)>CONTARA(TRANSPONER(UNICOS(TblDatos[Año])));
donde comparamos una lista de números 1,2,3,4,5,6,7 con el número total de elementos únicos del campo 'Año'
Fórmulas desbordadas: Añadir Totales Generales

Identificando columna a columna si aplicamos un parcial o el Total General en la columna 7...
Del segundo condicional la opción de 'si_verdadero' que aplica cuando llegamos a esa columna 7 es:
SUMAR.SI.CONJUNTO(TblDatos[Uds];TblDatos[País];H4#)
esto es, la suma acumulada para cada 'País'.

La última opción de nuestras condiciones nos sitúa en los casos existentes de Año-País, con un SUMAR.SI.CONJUNTO basado en dos criterios (obviamente Año y País):
SUMAR.SI.CONJUNTO(TblDatos[Uds];TblDatos[Año];I3#;TblDatos[País];H4#)

La fórmula acaba, o empieza según se mire, con un SI.ERROR para corregir el fallo que aparecería en el Total Absoluto (fila 6 y columna 7 de nuestro ejemplo), donde decimos que nos devuelva la suma de todas las unidades:
SUMA(TblDatos[Uds]).

En la primera imagen, a modo de comprobación veíamos una tabla dinámica donde por supuesto de forma más sencilla llegamos al mismo resultado... LLegando al conflicto de dos partes: uso tablas dinámicas - uso fórmulas desbordadas.
Comentaré ventajas e inconvenientes de ambas:
1- uso de tabla dinámica: mínimo esfuerzo en su construcción versus posibilidad de olvidar refrescar los datos y trabajar con información obsoleta no actualizada.
2- uso de fórmulas desbordadas: mayor trabajo en su elaboración versus datos constantemente actualizados.

No hay comentarios:

Publicar un comentario

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