Tengo una tabla de datos que se compone de varias filas de medidas individuales en serie que estoy recortando antes de hacer una función de división de tabla, sin embargo, tengo un problema con algunas medidas redundantes que me gustaría eliminar, pero el código actual no Estoy usando es extremadamente lento y probablemente ineficiente para lo que necesito.
Información de contexto:
- Cada fila es el resultado de una medición automatizada individual en una pieza de material realizada en serie y produce un informe con las siguientes columnas:
- Un ID de pieza único asignado a cada pieza individual de material [ ID de pieza ]
- El ID de lote asociado con la materia prima utilizada para crear la pieza individual de material [ID de lote]
- El valor de medición real para la medición realizada [Valor]
- Resultado de la medición asignado en función del valor de la medición (Pasa/Falla/Reelaboración) [Resultado]
- Marca de tiempo de la medición [Fecha_creada]
Mi equipo produce docenas de filas de mediciones por pieza de material y procesa miles de piezas de material por informe; esos informes luego se introducen en JMP como mi tabla de datos original.Cada informe también contiene varios lotes, por lo que la tabla de datos tiene varias referencias a "PartID = 1" porque a cada lote se le asigna un número secuencial que comienza en 1, por lo que necesito usar tanto PartID como LotID para referirme a una determinada pieza de material.En el caso de que el resultado sea "Retrabajo", el equipo de medición detiene cualquier medición adicional en esa pieza individual de material, reorienta la pieza de material y la devuelve al inicio de la línea volviendo a medir todas las pruebas anteriores en la misma. pero conservando el mismo ID de pieza único que estaba asociado con la pieza de material.
Resultado deseado:
Quiero usar un script para revisar la tabla de datos y eliminar todas las medidas hasta (e incluyendo) el resultado del retrabajo, ya que después del retrabajo todas las medidas se repiten y el retrabajo puede afectar los valores de medición.Para hacer esto, actualmente estoy usando el script JSL para recorrer cada fila y hacer lo siguiente:
- Identificar si el resultado es "Retrabajo"; si es así entonces haz lo siguiente:
- Identifique el PartID para la pieza dada de material como "xPartID"
- Identifique el LotID para la pieza dada de material como "xLot"
- Identifique Date_Created para la medida dada como "xDate"
- Seleccione y elimine todas las filas donde (PartID = xPartID) y (LotID = xLot) y (Date_Created <= xDate)
- Si el resultado no es "Reelaboración", entonces salga del ciclo, no es necesario continuar.
Sigo teniendo ralentizaciones extremas y, básicamente, el código hace que el programa se bloquee.Si lo ejecuto paso a paso, parece funcionar, pero si lo dejo correr, eventualmente muere. Aquí está el código real:
//Recoding the two potential "Rework" results into a shared value "aRework"; putting the letter "a" in front of it so if I sort by the column ascending then all of these values are at the start of the list, to hopefully make it easier and faster to process them.
dt << Recode Column(
dt:result,
{Map Value(
_rcOrig,
{"FailOnHighRework", "aRework",
"FailOnLowRework", "aRework"},
Unmatched( _rcNow )
)},
Update Properties( 1 ),
Target Column( :result )
);
//Sorting the table using the result column after the recode, so all of the rework rows are at the start of the table
SortColumn = "result";
dt << Sort( By( :result ), Replace Table, Order( Ascending ), Suppress formula evaluation( 1 ) );
//now run the row-by-row script
dt << begin data update;
for each row(
If( :result == "aRework",
xRow = Row();
xPartID=:PartID[Row()];
xLot=:lot[Row()];
xDate=:date_created[Row()];
dt <<SELECT where=""></SELECT>Estoy en JMP 16.2.0 (570548).