jueves, 7 de abril de 2022

LAMBDA: Repartiendo importes

En la entrada anterior distribuimos a lo largo de un periodo las distintas fechas de un proyecto, marcando los hitos determinados.

Hoy veremos una alternativa al clásico reparto proporcinal de una cantidad. Veremos cuatro escenarios posibles de reparto:
1-reparto directo del importe total según porcentajes indicados.
2-dejamos fuera del reparto las cantidades que asignaríamos a dos componentes.
3-no repartimos un 80% de un componente.
4-de la parte que asignaríamos a un componente, de los 100 primeros euros, solo asignamos el 20%. El resto lo repartimos normalmente.
LAMBDA: Repartiendo importes


Veamos el primer escenario planteado: reparto directo de la cantidad total
En la celda D4 añadimos:
=BYROW(C4:C8;LAMBDA(x;$D$3*x))
fórmula sencilla que recorre cada porcentaje de asignación para cada componente y se multiplica por la cantidad a repartir.
Obtenemos el vector de importes repartidos.

Segundo escenario: dejamos fuera del reparto las cantidades que asignaríamos a dos componentes
En la celda D14 haremos uso de un SI condicional con prueba lógica combinada con un O...
=BYROW(C14:C18;LAMBDA(x;SI(O(DESREF(x;0;-1)="A";DESREF(x;0;-1)="D");0;$D$13*x)))
Un truco es emplear la función DESREF para trabajar sobre las celdas a la izquierda de los porcentajes que recorre BYROW.
La fórmula final es por tanto simple... recorremos cada fila de componente y cuando sea A o D devolvemos cero, y el producto de porcentaje de reparto por cantidad a repartir en el resto de casos...

Tercer escenario: no repartimos un 80% de un componente.
Es decir, de la cantidad que se le asignaría normalmente a un componente, obviamos el 80%.
En la celda H4 escribimos:
=BYROW(G4:G8;LAMBDA(x;$H$3*x*SI(DESREF(x;0;-1)="A";(1-80%);1)))
Similar al escenario previo... empleamos un SI condicional y DESREF para detectar el componente clave (el A en el ejemplo).

Y el cuarto escenario asignamos un 20% de los 100 primeros euros que repartiríamos al componente A.
Esto es, de los 350 euros que le tocarían normalmente a A, corregimos sobre los 100 primeros y solo aplicamos un 20%, i.e., 20 euros.
De los 250 restantes repartimos la totalidad. Por tanto al componente A le tocaría: 20+250 = 270
Así en la celda H14:
=BYROW(G14:G18;LAMBDA(x;SI(DESREF(x;0;-1)="A";($H$13*x-$J$11*0,8);$H$13*x)))
Con igual criterio que en los casos previos, es decir, empleando un SI condicional junto a DESREF con el cálculo necesario para llegar a la cantidad repartida deseada.

No hay comentarios:

Publicar un comentario

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