Problema con una fórmula de columna para asignar fases de producción.Hola a todos,
Estoy tratando de escribir una fórmula de columna que observe la diferencia de fecha entre dos filas y si >= que un cierto valor (en este caso 4 días), entonces la columna debería disminuir el valor de la fase. Si la diferencia de fechas es <4, entonces debería mantener el valor de la fase anterior. He definido dos variables locales en la fórmula: fase y MinDaysbreak, que son los días mínimos entre fases (4). La columna :"Fecha/Hora:"n es la columna de fecha por la que itera el bucle For().

Mi fórmula se parece a la siguiente:

Y el código JSL de la fórmula es el siguiente:
For( i = N Rows(), i >= 1, i--,
If( i == N Rows(),
phase,
If( Abs( Date Difference( :"Date/Time:"n[i + 1], :"Date/Time:"n, "Day" ) ) >= MinDaysbreak,
phase--,
phase
)
)
)
No recibo ningún error para la fórmula, la fórmula no está suprimida, pero la columna aún está vacía. Todavía no obtengo nada para la última fila, incluso si elimino la primera instrucción else en el primer If(), y la última entrada de la columna debe ser 9, ya que esa es la fase de la variable local. Sé que hay 9 fases.
No estoy seguro de qué estoy haciendo mal, pero no me sorprendería que se trate de un simple error que estoy pasando por alto.
¡Gracias por cualquier ayuda!,
DS
Modelado estadístico avanzadoAutomatización y secuencias de comandosExploración y visualización de datosCompartir y comunicar resultadosRe: Problema con una fórmula de columna para asignar fases de producciónLa columna está vacía porque la función For() no devuelve un valor. Intente pegar este código en el editor de fórmulas:
Local({i = N Rows(), phase = 9, MinDaysbreak = 4},
For(i, i >= Row(), i--,
If(i == N Rows(),
phase,
If(Abs(Date Difference(:"Date/Time:"n[i + 1], :"Date/Time:"n[i], "Day")) >= MinDaysbreak,
phase--,
phase
)
)
);
phase;
)Creo que funcionará según lo previsto. Tenga en cuenta estos cambios:
– La fase adicional que establece el valor de la fila actual (después de haber sido calculado dentro del bucle For). Sin esto, obtendrás una columna vacía.
– Para funcionar correctamente, no debe iterar sobre todas las filas, solo hasta la fila actual usando Row() . De lo contrario, obtendrá el mismo valor para cada fila.
– Necesita un índice para ambas fechas para asegurarse de comparar siempre con la siguiente fila. Sin él, es difícil predecir el resultado (depende de los datos).
También definí la i inicial como un parámetro local, pero creo que no es necesario.
Sin embargo, es bastante inusual utilizar un bucle for en fórmulas de columna. Si tiene un conjunto de datos grande, puede resultar muy ineficaz recorrer la tabla para establecer el valor de cada fila. Hay otras formas de solucionar este problema, con fórmula de columna o JSL.
/EM