martes, 5 de febrero de 2019

FILA INDIRECTO en una matricial

Algunos días atrás un lector me consultaba sobre la forma de trabajar sobre listados de fechas repetidas.
En concreto quería obtener cantidades vendidas máximas, mínimas o medias teniendo presente las ventas repetidas en los mismos días.
Veamos nuestro listado de ventas:

FILA INDIRECTO en una matricial


En la tabla tenemos nuestras ventas detalladas.. y de manera manual, a modo de ejemplo, en la columna E, he dispuesto los datos sobre los que realmente deseamos trabajar...
Obviamente, la columna E desaparecerá ;-)


Queremos trabajar ahora sobre las ventas de cada uno de los tres años...

FILA INDIRECTO en una matricial



Empezamos calculando la media de ventas por día del año 2017 en la celda K3:
=PROMEDIO(SI(SUMAR.SI.CONJUNTO(TblVentas[Unidades];TblVentas[Fechas];FILA(INDIRECTO($I3&":"&$J3)))>0;SUMAR.SI.CONJUNTO(TblVentas[Unidades];TblVentas[Fechas];FILA(INDIRECTO($I3&":"&$J3)))))
(ejecutada matricialmente presionando Ctrl+Mayusc+Enter)

FILA INDIRECTO en una matricial



Lo interesante de esta fórmula (y de las siguientes) es el uso de
FILA(INDIRECTO($I3&":"&$J3))
para obtener una secuencia de 365 fechas desde la fecha de la celda I3: 1/1/2017 hasta la fecha de J3: 31/12/2017...
Luego matricialmente se obtiene la suma acumulada de las ventas de nuestra tabla origen por cada día.
Será sobre esta matriz sobre la que realizaremos cálculos posteriores.

FILA INDIRECTO en una matricial



Si nos fijamos en ese vector de valores, hay 365 cantidades... apareciendo los valores acumulados por día.
Además, finalmente, puedes comprobar el resultado (si eres desconfiado) seleccionado el rango E2:E17 y viendo cuál es su promedio en la barra de estado...


De forma similar calcularemos la cantidad máxima acumulada por día dentro del año.
Para ello en la celda L3 añadimos la fórmula matricial:
=MAX(SUMAR.SI.CONJUNTO(TblVentas[Unidades];TblVentas[Fechas];FILA(INDIRECTO($I3&":"&$J3))))

FILA INDIRECTO en una matricial



Y por último, de manera similar, calcularemos la cantidad menor de unidades vendida por día en un mismo año en la celda M3:
=MIN(SI(SUMAR.SI.CONJUNTO(TblVentas[Unidades];TblVentas[Fechas];FILA(INDIRECTO($I3&":"&$J3)))>0;SUMAR.SI.CONJUNTO(TblVentas[Unidades];TblVentas[Fechas];FILA(INDIRECTO($I3&":"&$J3)))))
(siempre ejecutada matricialmente)

FILA INDIRECTO en una matricial



MUY interesante del uso de la función FILA con INDIRECTO, aprovechándonos del tratamiento de las fechas como números para conseguir obtener nuestros cálculos por año...

2 comentarios: