Ich verstehe nicht, warum dies als Spam markiert ist, da es kein Spam und ein legitimes Problem ist, das ich zu lösen versuche?
Link zum Beitrag: (Problem mit Skript zum Löschen redundanter Messungen unter bestimmten Bedingungen)
durch FreshUser
https://community.jmp.com/t5/Discussions/Problem-with-script-to-delete-redundant-measurements-specific-to/mp/554948#M76947
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. Hintergrundinformationen: Jede Zeile ist das Ergebnis einer individuellen automatisierten Messung an einem Materialstück, 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 zugeordnet ist Rohmaterial, das zum Erstellen des einzelnen Materialstücks verwendet wurde [ Los-ID ] Der tatsächliche Messwert für die durchgeführte Messung [ Wert ] Messergebnis, das basierend auf dem Messwert zugewiesen wurde (Pass/Fail/Rework) [ Ergebnis ] Zeitstempel der Messung [ Date_Created ] Meine Ausrüstung erzeugt Dutzende von Messzeilen 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 die Datentabelle per Skript durchgehen und alle Messungen bis (einschließlich) des Nachbearbeitungsergebnisses eliminieren, da nach der Nachbearbeitung alle Messungen wiederholt werden und die Nachbearbeitung die Messwerte beeinflussen kann.Um dies zu tun, verwende ich derzeit ein JSL-Skript, um jede Zeile zu durchlaufen und Folgendes zu tun: Identifizieren Sie, ob das Ergebnis "Rework" ist; Wenn ja, gehen Sie wie folgt vor: Identifizieren Sie die PartID für das gegebene Materialstück als „xPartID“ Identifizieren Sie die LotID für das gegebene Materialstück als „xLot“ Identifizieren Sie das Date_Created für die angegebene Messung als „xDate“ (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: // Umcodieren der beiden potenziellen „Rework“-Ergebnisse in einen gemeinsamen Wert „aRework“; Setzen Sie den Buchstaben "a" davor. Wenn ich also nach der Spalte aufsteigend sortiere, stehen alle diese Werte am Anfang der Liste, damit sie hoffentlich einfacher und schneller verarbeitet werden können. dt << Recode Column( dt:result, {Map Value( _rcOrig, {"FailOnHighRework", "aRework", "FailOnLowRework", "aRework"}, Unmatched( _rcNow ) )}, Update Properties( 1 ), Target Column( :Ergebnis ) ); //Sortieren der Tabelle anhand der Ergebnisspalte nach der Umkodierung, sodass alle Nachbearbeitungszeilen am Anfang der Tabelle stehen SortColumn = "result"; dt << Sortieren( Nach( :Ergebnis ), Tabelle ersetzen, Sortieren( Aufsteigend ), Formelauswertung unterdrücken( 1 ) ); // Führen Sie jetzt das zeilenweise Skript aus dt << beginnen Sie mit der Datenaktualisierung; für jede Zeile( If( :result == "aRework", xRow = Row(); xPartID=:PartID[Row()]; xLot=:lot[Row()]; xDate=:date_created[Row()]; dt <
Diese Nachricht hat 0 Antworten