Ich habe eine Datentabelle, die aus mehreren Reihen von Einzelmessungen in Reihe besteht, die ich trimme, bevor ich eine Tabellenaufteilungsfunktion ausführe, aber ich habe ein Problem mit einigen redundanten Messungen, die ich entfernen möchte, aber den aktuellen Code I verwende ist extrem langsam und wahrscheinlich ineffizient für das, was ich brauche.
Hintergrundinformation:
- Jede Zeile ist das Ergebnis einer individuellen automatisierten Messung an einem Stück Material, die in Serie durchgeführt wird, und erzeugt einen Bericht mit den folgenden Spalten:
- Eine eindeutige Teile-ID, die jedem einzelnen Materialstück zugewiesen wird [ PartID ]
- Die Chargen-ID, die dem Rohmaterial zugeordnet ist, das zum Erstellen des einzelnen Materialstücks verwendet wurde [LotID]
- Der tatsächliche Messwert für die durchgeführte Messung [ Wert ]
- Das Messergebnis wird basierend auf dem Messwert zugewiesen (Pass/Fail/Rework) [Ergebnis]
- Zeitstempel der Messung [ Date_Created ]
Meine Ausrüstung erzeugt Dutzende von Messreihen pro Materialstück und verarbeitet Tausende von Materialstücken pro Bericht – diese Berichte werden dann als meine ursprüngliche Datentabelle in JMP eingespeist.Jeder Bericht enthält auch mehrere Chargen, sodass die Datentabelle mehrere Verweise auf „PartID = 1“ enthält, da jede Charge eine fortlaufende Nummer erhält, die bei 1 beginnt, sodass ich sowohl PartID als auch LotID verwenden muss, um auf ein bestimmtes Stück Material zu verweisen.In dem Fall, in dem das Ergebnis "Nacharbeit" ist, stoppt die Messausrüstung alle weiteren Messungen an diesem einzelnen Materialstück, richtet das Materialstück neu aus und bringt es zum Anfang der Linie zurück, wobei alle vorherigen Tests an dem erneut gemessen werden Material, behält aber immer noch dieselbe eindeutige Teile-ID bei, die dem Materialstück zugeordnet war.
Gewünschtes Ergebnis:
Ich möchte das Skript verwenden, um die Datentabelle durchzugehen und alle Messungen bis (einschließlich) des Nachbearbeitungsergebnisses zu eliminieren, da nach der Nachbearbeitung alle Messungen wiederholt werden und die Nachbearbeitung die Messwerte beeinflussen kann.Dazu verwende ich derzeit ein JSL-Skript, um jede Zeile zu durchlaufen und Folgendes zu tun:
- Identifizieren Sie, ob das Ergebnis "Nacharbeit" ist; wenn ja dann mach folgendes:
- Identifizieren Sie die PartID für das angegebene Materialstück als "xPartID".
- Identifizieren Sie die Los-ID für das angegebene Materialstück als „xLot“.
- Identifizieren Sie das Date_Created für die angegebene Messung als "xDate".
- Wählen und löschen Sie alle Zeilen, in denen (PartID = xPartID) und (LotID = xLot) und (Date_Created <= xDate)
- Wenn das Ergebnis nicht "Rework" ist, verlassen Sie die Schleife, ohne dass Sie fortfahren müssen.
Ich habe immer wieder extreme Verlangsamungen und im Grunde führt der Code zum Absturz des Programms.Wenn ich es Schritt für Schritt ausführe, scheint es zu funktionieren, aber wenn es ausgeführt wird, stirbt es schließlich. Hier ist der eigentliche Code:
//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>Ich verwende JMP 16.2.0 (570548).