En la mayoría de las fórmulas, es esencial gestionar las columnas vacías para evitar errores. Con la columna Fórmula, esto puede ser bastante complejo. Advanced Formula Booster ofrece opciones mucho más sencillas. Echemos un vistazo a un ejemplo práctico para ver la diferencia
Si no está familiarizado con la app Advanced Formula Booster que reinventa las formulas de monday.com, le recomiendo leer Las nociones básicas de Advanced Formula Booster. El artículo le guía a través de los pasos para crear su primera fórmula y luego automatizarla con la ayuda de capturas de pantalla y un video.
Un ejemplo práctico
Dedico unos minutos cada día para ayudar a los usuarios con la columna Fórmula en el foro de la comunidad de monday. A veces, la pregunta es compleja y responderla es un desafío. Como esta: Calculating hours between 2 date/time columns. Me llevó unos minutos encontrar una solución y algunos minutos más para redactar una explicación comprensible. Al final, la solución es la siguiente:
(WORKDAYS(FORMAT_DATE({Resolved On},“YYYY-MM-DD”),FORMAT_DATE({Reported On},“YYYY-MM-DD”)–1)*8 + (TIMEVALUE({Resolved On}) – TIMEVALUE({Reported On}))*24
Esta fórmula calcula el número de horas trabajadas entre la fecha {Reported On} y la fecha {Resolved On}. El único problema es que el infame icono rojo aparece en cada línea donde no se ha ingresado ninguna fecha.
¿Cómo eliminarlos? Sinceramente, no lo sé. Lo intenté sin éxito. Probablemente sea posible mediante la adición y repetición de varias instrucciones IF, pero la complejidad de la fórmula es tal que rápidamente se vuelve inmanejable.
Enfoque diligente vs perezoso en las instrucciones IF
El principal problema es que monday utiliza un enfoque diligente para las instrucciones IF. Una instrucción IF se estructura de la siguiente manera: IF(Condición, Resultado_Si_Condición_Cumplida, Resultado_Si_Condición_No_Cumplida). El enfoque diligente implica calcular ambos resultados, luego evaluar la condición y devolver el resultado que satisfaga la condición.
El enfoque perezoso consiste en evaluar primero la condición y luego calcular solo el resultado apropiado.
¿Por qué es esto importante? En la gestión de errores, generalmente se intenta agregar una instrucción IF para evitar calcular uno de los resultados porque este genera un error. Pero el enfoque diligente lo hace ineficiente, ya que, independientemente de la condición, se calculan ambos resultados (uno de ellos innecesariamente).
Gestionar los errores con la función STOP() en Advanced Formula Booster
Así es como abordaría la fórmula utilizando Advanced Formula Booster. Como de costumbre, detallo al máximo el código para que sea fácil de entender (soy plenamente consciente de que esto podría realizarse de manera más sucinta).
La primera línea verifica si las columnas {Reported On} y {Resolved On} están vacías y almacena la información (verdadero o falso) en la variable [Interrumpir].
- Si alguna de ellas está vacía, la instrucción de la línea 2 vacía la columna objetivo – una columna de tipo Número llamada {Tiempo Pasado} – y la de la línea 3 detiene la ejecución de la fórmula.
- Si no lo están, las líneas 2 y 3 se ignoran (note el uso de la instrucción IF con un solo parámetro, por lo que no pasa nada si [Interrumpir] es falso).
- El ‘cálculo real’ comienza en la línea 4.
1: [Interrumpir]=OR({Reported On}=””,{Resolved On}=””)
2: {Tiempo Pasado}=IF([Interrumpir],””)
3: [Stop]=IF([Interrumpir],STOP())
4: [DiasEnteros]=COUNTWORKINGDAYS({Resolved On},{Reported On})
5: [HorasDiasEnteros]=MULTIPLY([DiasEnteros],8)
6: [HoraResolucion]=TIME({Resolved On})
7: [HoraReporte]=TIME({Reported On})
8: [DiffEnMinutos]=MINUTES([HoraResolucion],[HoraReporte])
9: [DiffEnHoras]=DIVIDE([DiffEnMinutos],60)
10: {Tiempo Pasado}=SUM([HorasDiasEnteros],[DiffEnHoras])
NOTA: Si fueran necesarios cálculos adicionales más allá de la línea 10, el uso de las funciones SKIP() y RESUME() sería más apropiado que STOP(). Esto permitiría continuar con la ejecución de la fórmula después de la línea 10.
Probar en el editor de formula
Debido a que Advanced Formula Booster integra las pruebas dentro del Editor de Fórmulas, puede visualizar fácilmente el resultado de cada línea. Esto resulta particularmente interesante en este escenario.