martes, 5 de abril de 2022

LAMBDA: Calculando hitos de fecha

Mientras Microsoft lanza a producción sus catorce nuevas funciones, yo sigo explotando las que ya tenemos disponibles (al menos en versión 365) ;-)
Hoy he pensado en si podría, a partir de ciertos datos, obtener las fechas de ciertos hitos de algunos proyectos, de acuerdo a unos porcentajes de avance...
LAMBDA: Calculando hitos de fecha


Los datos que tenemos para cada proyecto son sus fechas de inicio y fin y en qué porcentajes, entre ambas fechas, se repartirán los distintos hitos.

En primer lugar calcularemos el número de hitos (cuántos porcentajes aparecen par trabajar)...
Podríamos recurrir al clásico y siempre operativo:
=LARGO(texto)-LARGO(SUSTITUIR(texto;"|";""))+1
pero para dar una nueva opción (seguro hay otras mejores), emplearé alguna función LAMBDA. Asi en F3 y sucesivas F3:F6 insertamos:
=REDUCE(0;EXTRAE(C3;SECUENCIA(LARGO(C3));1);LAMBDA(ac;x;ac+SI(x="|";1;0)))+1
función que identifica la aparición del caracter | asignándole un valor 1, que va incrementando si existiera más veces.
Finalmente REDUCE devuelve el último valor acumulado... es decir, el número de caracteres | en la celda ;-)

Conocido el número de hitos a descubrir, en las celdas G3:G6 añadimos:
=SCAN($D3;($E3-$D3)*INDICE(LET(cadena;$C3;XMLFILTRO("<i><d>"&SUSTITUIR($C3;"|";"</d><d>")&"</d></i>";"//d"));SECUENCIA(1;F3));LAMBDA(ac;itm;ac+itm))
Nuestra fórmula recupera cada valor porcentual en forma de vector (de momento con el habitual XMLFILTRO.. a la espera de la deseada TEXTSPLIT, entre las catorce nuevas funciones!!!).
Este porcentaje se aplica sobre la diferencia de días, con el fin de conocer el número de días asociado a cada tramo o hito...
Finalamente SCAN se encarga de ir agregando estas cantidades calculadas de días sobre la fecha de partida.
Con el resultado deseado... una caida de fechas sobre el intervalo temporal Fecha inicio - Fecha final, repartido de acuerdo a la proporción o grado de avance dado!!.

No hay comentarios:

Publicar un comentario

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