jueves, 1 de octubre de 2020

La función LET en Excel. Declarando variables.

Desde hace algunas semanas (en septiembre del 2020) Microsoft está haciendo un gran esfuerzo en el lanzamiento en abierto, para todo aquel que tenga Microsoft 365, su nueva función LET...
Si bien aún no disponemos de ella todo el mundo (yo incluido :'( ), al menos si podemos ir probándola en la versión de Excel en la Web!!!.
Lo primero que contaría es por qué es tan interesante esta función, y la respuesta nos la ofrece el mismo Microsoft:
-Mejor rendimiento: Si escribe la misma expresión varias veces en una fórmula, Excel calculaba ese resultado varias veces. LET permite llamar a la expresión por el nombre y que Excel la calcule una vez.
-Sencillez de lectura y composición: Ya no tendrá que recordar la referencia de rango o celda específicos a los que se hace referencia, lo que el cálculo hacía o copiar/pegar la misma expresión. Con la capacidad de declarar y asignar un nombre a las variables, puede dar un contexto coherente de la fórmula para usted mismo y sus clientes.


Es decir hablamos de rendimiento, eficiencia y rapidez de cálculo... aderezado de mayor simplicidad y comprensión en nuestras fórmulas más elaboradas!!. No es poca cosa ;-)
Veamos ahora la sintaxis de la función:
= LET(nombre1, nombre_valor1, cálculo_o_nombre2, [nombre_valor2, cálculo_o_nombre3...])
Sabiendo que:
nombre1(Obligatorio):
El primer argumento 'nombre1' será el nombre de nuestra variable a asignar. Puede ser cualquiera siempre que empice con una letra y no puede ser el resultado de una fórmula o tener conflicto con la sintaxis de intervalo.
El segundo argumento será nombre_valor1 (Obligatorio):
Será el valor que se asigna a 'nombre1'. Puede ser un valor, una celda, un rango, una fórmula, etc...
El tercer argumento 'cálculo_o_nombre2' (Obligatorio) será o bien:
-Un cálculo que use todos los nombres en la función LET. Este debe ser el último argumento de la función LET.
-Un segundo nombre para asignar a un segundo nombre_valor. Si se especifica un nombre, se necesitarán nombre_valor2 y cálculo_o_nombre3.
El cuarto argumento 'nombre_valor2' (Opcional):
El valor que se asigna a 'cálculo_o_nombre2'., según haya quedado definido.
Y sucesivamente...

¿Algo confuso?... bueno,si estás acostumbrado a trabajar en programación, o en lenguaje DAX (VAR -Power Pivot) o incluso en lenguaje M (let-Power Query), en todos esos contextos lo habitual es definir variables que luego se emplearán para facilitar nuestros cálculos o procesos.
En Excel, dentro de las hojas de cálculo, la función LET nos ofrece ahora esta posibilidad.

Como siempre, la mejor forma de comprender el uso de la función es viendo algunos ejemplos:
La función LET en Excel. Declarando variables.

Analicemos los ejemplos...
En la celda B1 hemos dispuesto:
=LET(x;1;
y;3;
x+y)

Donde podemos leer algo parecido a esto:
-Sea x igual a 1, e y igual a 3, entonces x+y es... el resultado devuelto por LET.
Esto es, hemos asignado un valor a la variable x y a la variable y, y con estos valores hemos forzado un cálculo.

Otro ejemplo en B2 igual de sencillo:
=LET(x;2;
x^3)

Damos valor 2 a la variable x, para luego forzar el cálculo del cuadrado de x.

En la celda B4 un ejemplo algo más elaborado.
=LET(
a;2;
x;SECUENCIA(10;1;-5;1);
b;10;
    a*x+b)

La idea es obtener los valores de y de la ecuación de una recta (y = ax+b).
Así comenzamos definiendo la variable a (la pendiente de nuestra recta), a la que asignamos el valor 2.
A continuación definimos la variable x dándole un conjunto de valores obtenidos con la función desbordada SECUENCIA... en este caso tendríamos 10 valores o elementos desde -5 hasta el 4.
Seguimos definiendo una nueva variable 'b' (la constante de la ecuación), a la que damos valor 10.
Terminamos, una vez definidas cuantas variables necesitemos, realizando el cálculo: a*x+b

Más ejemplos... en la celda J1 introducimos:
=LET(
rngDatos;H1:H6;
top;{1;2;3};
K.ESIMO.MAYOR(rngDatos;top)
)

Para este ejemplo definimos el nombre de la variable 'rngDatos', al que damos como valor el rango de celdas: H1:H6
Continuamos definiendo una nueva variable 'top', asignándole como valor una constante matricial {1;2;3}
Puesto que nuestro objetivo es obtener los tres mayores valores de H1:H6, terminamos la función LET con el cálculo:K.ESIMO.MAYOR(rngDatos;top)

Y un ejemplo más antes de entrar en algún ejercicio más completo.
En I10 escribimos:
=LET(
dto;10%;
Pz;H10:H15;
Pz*(1-dto)
    )

Damos a la variable 'dto' valor de 10%.
A la variable 'Pz' la cargamos con los valores del rango de celdas H10:H15.
Y concluimos con el cálculo oportuno para saber cuál es el precio ya descontado: Pz*(1-dto)

Como puedes observar, de manera muy simple, somos capaces de simular la creación de nombres definidos que facilitan el uso y lectura de las fórmulas empleadas.
Además, en la versión de escritorio de Microsoft 365 la herramienta de 'intellisense' detecta esas variables creadas en el contexto de la función!!!
MUY interesante sin duda ;-)

Vamos a ver un ejercicio aplicado con LET.
Disponemos de una tabla (TblVentas) con campos Fecha, País, Producto, Comercial y Unidades, al que queremos incorporar un nuevo campo de 'Descuento' según ciertas condiciones:
La función LET en Excel. Declarando variables.

En G3, como parte del campo 'descuento' en la Tabla insertamos:
=LET(
rngComercial;[Comercial];
rngUds;[Unidades];
Acum;SUMAR.SI(rngComercial;[@Comercial];rngUds);
cond;SI(Acum>450;10%;0%);
cond)

Comenzamos definiendo los nombres de algunas variables y asignándoles valor:
A la variable 'rngComercial' la cargamos con los elementos del campo '[Comercial]' de nuestra tabla.
De igual forma con 'rhgUds' que cargamos con el campo '[Unidades]'.
Seguimos definiendo una variable calculada 'Acum' con valor el resultado de una SUMAR.SI... que devuelve la suma acumulado de unidades para cada comercial...
Y finalmente, aplicamos un SI condicional sobre el acumulado anterior... Resultado que retornará LET.
Vemos en la imagen que solo para un comercial se da el caso que sus unidades vendidas acumuladas superan las 450 uds, por tanto solo a éste se le aplica el 10% de descuento.

Sobre la misma tabla de ventas aplicaremos otro ejemplo para obtener un acumulado de unidades vendidas por país y producto...
La función LET en Excel. Declarando variables.

Lo primero será automatizar la forma de obtener los encabezados... así en I4 insertamos:
=ORDENAR(UNICOS(TblVentas[País]))

para listar los países de manera única.
En J3:
=TRANSPONER(UNICOS(TblVentas[Producto]))

listando los productos...
Y finalmente en J4 para recuperar el acumulado cruzado de país-producto:
=LET(
pais;I4#;
pdto;J3#;
rngUds;TblVentas[Unidades];
rngPais;TblVentas[País];
rngPdto;TblVentas[Producto];
SUMAR.SI.CONJUNTO(rngUds;rngPais;pais;rngPdto;pdto)
)

donde comprobamos la misma rutina de trabajo... declaro variable y la cargamos con valor (rango, elemento...). En este caso, vemos que las dos primeras variables las cargamos con el formato desbordado (I4# y J3#) para referirnos a cualquier elemento de los encabezados anteriores...
Concluye el cálculo de LET con el uso de una función SUMAR.SI.CONJUNTO.
Es verdad que no es necesaria tanta 'parafernalia' para conseguir el mismo resultado, y que directamente podríamos tener lo mismo... pero me parece un ejemplo del uso de LET que nos abre los ojos a en qué forma se puede ver o clarificar una fórmula...

Y un último ejemplo... por hoy ya está bien jeje...
Sobre la misma tabla anterior, esta vez llamada TblDatos, pero con los mismos campos, queremos recuperar un resumen de las unidades vendidas por país y año.
La función LET en Excel. Declarando variables.

Incluimos los encabezados.
En I2 insertamos:
=TRANSPONER(ORDENAR(UNICOS(AÑO(TblDatos[Fecha]))))

Y en H3:
=ORDENAR(UNICOS(TblDatos[País]))

Y así conseguimos los encabezados de los paises y de los años existentes en los campos de País y Fecha.
Y para el cálculo cruzado insertamos en I3
=LET(
rngUds;TblDatos[Unidades];
rngAño;AÑO(TblDatos[Fecha]);
año;I$2;
rngPais;TblDatos[País];
pais;$H3;
SUMAPRODUCTO(rngUds*(rngAño=año)*(rngPais=pais))
)

Que en este caso copiaremos y pegaremos, NO arrastraremos, hacía el resto de celdas...
Fíjate que en este caso no es posible usar la forma desbordada y damos valor a las variables año y pais como I$2 y $H3 respectivamente.
Finalmente aplicamos el cálculo con una función SUMAPRODUCTO que condiciona por año y país.


Te dejo aquí el fichero empleado...

No hay comentarios:

Publicar un comentario

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