Para el siguiente ejemplo, tenemos el modelo que suelo usar habitualmente, ventas de productos en diferentes fechas, provincias, y, centros comerciales.
Pero este modelo tiene una peculiaridad, y, es que tenemos dos columnas de centros, y, dos columnas de productos.
El modelo está en formato de tabla, y, se llama ventas.
Queremos crear un informe donde aparezcan solo los registros donde el centro de la columna centro1 y centro2, sean iguales, así como el producto de la columna producto1 y producto2 también sean iguales.
El primer registro cumple la condición, porque el centro es el mismo tanto en centro1 como en centro2, y, el producto también es igual para la columna producto1 y producto2.
Empecemos…
Voy a usar la funcion IGUAL, donde como argumento texto1, concateno las columnas centro1 y producto1.
=IGUAL(Ventas[Centro1]&Ventas[Producto1]
Punto y coma, como argumento texto2, concateno centro2 con producto2.
Cerramos paréntesis.
=IGUAL(Ventas[Centro1]&Ventas[Producto1];Ventas[Centro2]&Ventas[Producto2])
Aceptamos.
Obtenemos una matriz desbordada con VERDADERO donde hay coincidencia, y, FALSO donde no lo hay.
Ahora, voy a usar la funcion FILTRAR para filtrar la tabla ventas, donde como argumento array es la tabla ventas.
=FILTRAR(Ventas
Punto y coma, como argumento Include es la expresión anterior siempre que sea igual a VERDADERO.
Cerramos paréntesis.
=FILTRAR(Ventas;IGUAL(Ventas[Centro1]&Ventas[Producto2];Ventas[Centro2]&Ventas[Producto1])=VERDADERO)
Aceptamos.
Obtenemos una matriz desbordada con los registros cuyos centros y productos son iguales.
Pero queremos ver solo una columna de centro y otra de producto, para ello, voy a volver a usar la funcion FILTRAR, donde como argumento array es la expresión anterior.
=FILTRAR(FILTRAR(Ventas;IGUAL(Ventas[Centro1]&Ventas[Producto2];Ventas[Centro2]&Ventas[Producto1])=VERDADERO)
Punto y coma, como argumento Include, vamos a usar una constante de matriz, abrimos unas llaves, vamos poniendo 1 en el encabezado que queremos ver, y, 0 en el encabezado que no queremos ver, separado por la barra invertida, porque son columnas.
Cerramos paréntesis.
=FILTRAR(FILTRAR(Ventas;IGUAL(Ventas[Centro1]&Ventas[Producto2];Ventas[Centro2]&Ventas[Producto1])=VERDADERO);{1\1\1\0\1\0\1\1\1})
Obtenemos una matriz desbordada, pero vemos que ya solo aparece una columna de centro y de producto.
Ahora nos vamos a traer los encabezados, para ello, usamos la siguiente sintaxis.
=Ventas[#Encabezados]
Como ya solo tenemos una columna de centro y de producto, sobran encabezados, pues, vamos a hacer lo mismo que antes, usamos la funcion FILTRAR, como argumento array es la expresión, y, como argumento Include, volvemos a usar una constante de matriz, y, ponemos 1 en el encabezado que queremos ver, y, 0 en el encabezado que no queremos ver, separado por la barra invertida.
=FILTRAR(Ventas[#Encabezados];{1\1\1\0\1\0\1\1\1})
Pero, no queremos ver centro1 ni producto1, queremos ver centro y producto, para ello, vamos a usar la funcion SUSTITUIR, donde como argumento texto, es la expresión anterior.
=SUSTITUIR(FILTRAR(Ventas[#Encabezados];{1\1\1\0\1\0\1\1\1})
Punto y coma, como argumento texto original, ponemos 1, que es el valor para sustituir.
=SUSTITUIR(FILTRAR(Ventas[#Encabezados];{1\1\1\0\1\0\1\1\1});1
Punto y coma, como argumento texto nuevo, ponemos dobles comillas, es decir, nada.
Cerramos paréntesis.
=SUSTITUIR(FILTRAR(Ventas[#Encabezados];{1\1\1\0\1\0\1\1\1});1;"")
Aceptamos, y, vemos los encabezados como queríamos.
Vamos a ver otra forma de hacerlo.
En este caso, lo vamos a realizar con la funcion MAP, donde como argumento array, concatenamos las columnas de centro1 y producto1.
=MAP(Ventas2[Centro1]&Ventas2[Producto1]
Punto y coma, como argumento array2, concatenamos las columnas centro2 y producto2.
Cerramos paréntesis.
=MAP(Ventas2[Centro1]&Ventas2[Producto1];Ventas2[Centro2]&Ventas2[Producto2]
Punto y coma, ponemos la funcion LAMBDA, abrimos una paréntesis, y, declaramos dos variables, la primera variable almacena la concatenación de las columnas centro1 y producto1, y, la segunda variable almacena la concatenación de las columnas centro2 y producto2.
=MAP(Ventas2[Centro1]&Ventas2[Producto1];Ventas2[Centro2]&Ventas2[Producto2];LAMBDA(a;b
Punto y coma, voy a usar el condicional SI para preguntar si la variable A es igual a la variable B, en ese caso, que pona 1, en caso contrario, que ponga2.
=MAP(Ventas2[Centro1]&Ventas2[Producto1];Ventas2[Centro2]&Ventas2[Producto2];LAMBDA(a;b;SI(a=b;1;0)))
Cerramos paréntesis.
Aceptamos.
Obtenemos una matriz desbordada con 1 donde hay coincidencia y 0 donde no la hay.
Ahora, voy a usar la funcion FILTRAR para filtrar la tabla ventas, siempre que la expresión anterior sea igual a 1.
=FILTRAR(Ventas;MAP(Ventas2[Centro1]&Ventas2[Producto1];Ventas2[Centro2]&Ventas2[Producto2];LAMBDA(a;b;SI(a=b;1;0)))=1)
Vemos que tenemos los mismos resultados que los obtenidos en el primer ejemplo.
Para quitar las columnas dobles, y, poner el encabezado es igual que para el primer ejemplo.
Otra forma de hacerlo es como sigue, abrimos un paréntesis, seleccionamos la columna centro1 y la igualamos a centro2, y, cerramos paréntesis.
Aceptamos.
=(Ventas3[Centro1]=Ventas3[Centro2])
Obtenemos una matriz desbordada con VERDADERO donde son iguales los centros y FALSO donde no lo son.
Ponemos el símbolo de asterisco que es igual que el operador lógico Y, abrimos un paréntesis, seleccionamos producto1 y lo igualamos a producto2, cerramos paréntesis.
=(Ventas3[Centro1]=Ventas3[Centro2])*(Ventas3[Producto1]=Ventas3[Producto2])
Obtenemos una matriz desbordada, pero ahora aparece 1 donde hay coincidencia y 0 donde no la hay.
Ahora, filtramos la tabla, siempre que el resultado de la expresión anterior sea igual a 1.
=FILTRAR(Ventas3;(Ventas3[Centro1]=Ventas3[Centro2])*(Ventas3[Producto1]=Ventas3[Producto2])=1)
Pues ya lo tenemos, repetimos los pasos de los ejercicios anteriores, para quedarnos con la columna centro y producto, y, lo mismo para los encabezados.
Comentarios