Creación de una nueva columna basada en la agrupación de otras columnas.Hola a todos,
Estoy tratando de crear una nueva columna "Estado" que devolverá "Activo" o "Reemplazado" según la siguiente especificación (parte adjunta de la tabla con la columna "Estado" como ilustración del resultado esperado).
Cada HERRAMIENTA y Sitio pueden reemplazar diferentes Sub_Herramientas durante el tiempo y ejecuta varias unidades con su marca de tiempo. La Sub_Herramienta más reciente para la Herramienta y el Sitio específicos debería recibir Activo en la columna de estado y todas las Sub_Herramientas anteriores que se utilizaron en esa herramienta y sitio deberían recibir Reemplazado.
Como en el ejemplo adjunto, la misma Sub_Herramienta puede repetirse con el tiempo, pero solo en las últimas ejecuciones debe marcarse como Activo.
El archivo real tiene muchas herramientas y cada herramienta tiene muchos sitios, por lo que necesita una codificación sólida.
Su ayuda es muy apreciada.
Re: Creación de una nueva columna basada en la agrupación de otras columnas.A partir de mi lectura de su definición, puedo pensar que la fila 36 se considera como Activa, pero aparte de ver que la fila 28 a la 35 tiene el valor Guardar SubTool, no entiendo por qué esas filas deben marcarse como Activas.
O, es lo que quiere hacer, una simple cuestión de averiguar cuál fue la última SubTool utilizada para la Herramienta y el Sitio, y luego marcar como activas todas las filas de nuevo cuando la SubTool cambie ?????
estoy confundidoRe: Creación de una nueva columna basada en la agrupación de otras columnas.Hola,
La tabla original tendrá muchas otras columnas en las que calcularé estadísticas con Sub_Tool, por lo tanto, no solo la última fila debe marcarse como Acitve, sino todo el lote en el que se ejecutó la última Sub_Tool. Que sí, necesito descubra para qué se utilizó la última SubTool para la Herramienta y el Sitio, y luego marque como activas todas las filas nuevamente cuando cambie la SubTool.
Re: Creación de una nueva columna basada en la agrupación de otras columnas.Aquí hay una de varias maneras que probablemente pueden calcular la nueva columna. Simplemente cree una nueva columna de caracteres, pegue la fórmula a continuación en la nueva columna y cambie las referencias a "Active2" a cualquiera que sea el nombre de la nueva columna que creó.
If( Row() > 1,
If( :TOOL != Lag( :TOOL ) | :Site != Lag( :Site ) | Row() == N Rows( Current Data Table() ),
TargetValue = :Sub_Tool[Row() - 1];
:Active2[Row() - 1] = "Active";
For( i = Row() - 2, i >= 1, i--,
If( :Sub_Tool[i] == TargetValue,
:Active2[i] = "Active",
:Active2[i] = "Replaced";
Break();
)
);
)
);
If( Row() == N Rows( Current Data Table() ),
"Active",
"Replaced"
);
Re: Creación de una nueva columna basada en la agrupación de otras columnas.Gracias por su tiempo dedicado a resolver este problema, el script sugerido produce las siguientes intenciones erróneas en la columna creada Sub_Tool_Status:
1) Rendimiento del valor de fila más reciente Reemplazado (fila de archivo adjunto 91 marcada en amarillo)
2) La fila más reciente está vacía (archivo adjunto última fila)
2) Cuando hay varios reemplazos, solo la última fila antes de los rendimientos de reemplazo se reemplaza y no actualiza las filas anteriores (archivo adjunto marcado con dos tonos verdes)
Re: Creación de una nueva columna basada en la agrupación de otras columnas.Gracias por el archivo de prueba más completo y por su prueba de mi código inicial.
Aquí hay una nueva versión del formato.
If( Row() > 1,
If( :TOOL != Lag( :TOOL ) | :SITE != Lag( :SITE ) | Row() == N Rows( Current Data Table() ),
TargetValue = :SUB_TOOL[Row() - 1];
:Active2[Row() - 1] = "Active";
For( i = Row() - 1, i >= 1, i--,
If( :SUB_TOOL[i] == TargetValue,
:Active2[i] = "Active",
Break()
)
);
)
);
If( Row() == N Rows( Current Data Table() ),
"Active",
"Replaced"
);
Deberá cambiar las referencias de columna en el código de "Active2" al nombre de columna que le está dando a la columna.
Ahora mi pregunta para ti es:
¿Entiendes cómo funciona la fórmula?
De lo contrario, debe estudiar el código y hacer una pregunta sobre el código, de modo que lo entienda y pueda hacer los cambios necesarios en el futuro.