martes, 6 de octubre de 2020

Fórmulas Desbordadas: FILTRAR, ORDENARPOR y BUSCARX

Si buscamos entre las nuevas funciones que Excel pone a nuestra disposición, sin duda, FILTRAR, ORDENARPPOR y BUSCARX son algunas de las más potentes por separado, asi que imagina las posibilidades que se nos ofrece si las combinamos entre sí!!.
Hoy veremos un ejemplo donde a partir de un listado por paises, productos y en columnas por información de dos años por tres conceptos (Ventas Reales, Presupuesto y Forecast) podremos recuperar dicha información filtrada y ordenada por criterios a nuestra elección...
Vemos nuestro objetivo en la siguiente imagen:
Fórmulas Desbordadas: FILTRAR, ORDENARPOR y BUSCARX

¿Qué está ocurriendo en nuestra hoja?...
En la celda M1 el usuario seleccionará el 'País' por el que se desea filtrar, mientras que en M3 y M4 inidicará por cual de los campos numéricos queremos que aparezcan ordenados (Real 2020 Ppto 2020 Forecast 2020 Real 2021 Ppto 2021 Forecast 2021 ).
Los campos que se desean ver serán los descritos en L6:O6, que corresponden al 'Producto' y los tres campos numéricos del año seleccionado previamente ('Real 202X' - 'Ppto 202X' - 'Forecast 202X').
Es importante cómo aparezcan escritos estos campos ya que los emplearemos ennuestra fórmula para referenciarnos con la Tabla origen de información (llamada 'TblVentas').

Veamos nuestras fórmulas...
En primer lugar obtendremos la lista de productos ordenados por el criterio descrito por el usuario al elegir 'concepto' y 'año' en las celdas M3 y M4; así pues en la celda L7 escribimos: =ORDENARPOR(FILTRAR(TblVentas[Producto];TblVentas[País]=$M$1;""); FILTRAR(BUSCARX(M3&" "&M4;TblVentas[#Encabezados];TblVentas;"";0;1);TblVentas[País]=$M$1;""))
Fórmulas Desbordadas: FILTRAR, ORDENARPOR y BUSCARX

Comentamos nuestra fórmula 'desde lo más profundo'.
Tenemos BUSCARX:
BUSCARX(M3&" "&M4;TblVentas[#Encabezados];TblVentas;"";0;1)
con lo que obtendríamos los valores completos del campo elegido en M3 y M4
Fórmulas Desbordadas: FILTRAR, ORDENARPOR y BUSCARX

Sobre ese rango de valores aplicamos una función FILTRAR:
FILTRAR(campo_anterior;TblVentas[País]=$M$1;"")
donde aplicamos el criterio de País igual al buscado en M1, esto es, solo nos quedamos con los tres elementos deseados...
Fórmulas Desbordadas: FILTRAR, ORDENARPOR y BUSCARX

Estos tres valores son los que emplearemos como segundo argumento de ORDENARPOR - 'por_matriz1', es decir, los emplearemos para ordenar nuestros productos.
Por tanto, como primer argumento de ORDENARPOR tendríamos una matriz filtrada de los 'productos' vinculados con el 'País' buscado en M1:
FILTRAR(TblVentas[Producto];TblVentas[País]=$M$1;"")
La función ORDENARPOR se encarga de devolver los datos de los productos ordenados según los importes del campo seleccionado.

Con esta forma de operar el resto es fácil de entender...
Replicaremos el proceso para los tres campos restantes.
En M7 insertamos la fórmula:
=ORDENARPOR(FILTRAR(INDIRECTO("TblVentas["&M$6&"]");TblVentas[País]=$M$1;""); FILTRAR(BUSCARX($M$3&" "&$M$4;TblVentas[#Encabezados];TblVentas;"";0;1);TblVentas[País]=$M$1;""))
Con idéntico funcionamiento al descrito en el paso anterior... con una incorporación 'dinámica' de la función INDIRECTO, que nos sirve para asociar los datos devueltos al valor de la celda M6 (que recordemos está vinculado al año seleccionado en M4).
INDIRECTO("TblVentas["&M$6&"]")
nos iddentifica y trata como referencia el texto de M6 como el campo 'Real 2021' de nuestra tabla origen 'TblVentas'.
Esto nos permite copiar y pegar la fórmula en N7 y O7 con un resultado correcto...
Fórmulas Desbordadas: FILTRAR, ORDENARPOR y BUSCARX

En el ejemplo de la imagen es sencillo verificar el adecuado resultado. Vemos como los tres productos (pdto3, pdto1, pdto2) quedan ordenados según los importes (1.198, 1.568, 1.906) del campo 'Forecast 2021' seleccionado en M3 y M4 para el 'País' = IT de M1... por supuesto con las equivalencias de importes respecto a los otros campos.

No hay comentarios:

Publicar un comentario

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