Effiziente ZeilenstatuscodierungHallo, ich versuche herauszufinden, wie ich den Zeilenstatus in JSL am schnellsten ändern kann. Normalerweise versuche ich, die Auswahl von Zeilen zu vermeiden, da dies langsamer ist als „Zeilen abrufen where()“, aber ich verstehe nicht, wie ich eine Matrix oder eine Liste von Zeilen verwenden kann, um den Zeilenstatus zu ändern. Müssen Zeilen ausgewählt werden, um den Status zu ändern?
Leicht verwandte Frage: Ist die Farbpalette skriptfähig? Ich sehe das Anzeigefeld „colorbox()“, aber der Skriptindex besagt, dass es nur für die Plattform zugänglich ist. Ich brauche es nicht unbedingt, da ich ein paar Workarounds finden konnte. Ein Beispiel dafür, was ich damit meine, finden Sie hier unter dem Code.
Danke,
Mike
//Clear Log();
Names Default To Here( 1 );
dt = open( "$SAMPLE_DATA\Big Class.jmp");
//get rows where; not sure what to do with this
myRows = dt << get rows where(:height == 63);
// use select where works but could be slower
dt << select where(:height == 63);
dt << exclude(1);
dt << colors("Red");Farbpalette, Beispiel aus Benutzereinstellungen:

Betreff: Effiziente ZeilenstatuscodierungJa, ich neige dazu, das zu vergessen und werde von Zeit zu Zeit daran erinnert, wenn ich die Online-Hilfe von JMP durchschaue.Ich habe wahrscheinlich nur „select where()“ und später „rows where()“ verwendet, um die Handhabung ausgeschlossener Zeilen zu erleichtern und schnell (in Bezug auf die Codierung, nicht in Bezug auf die Ausführung) diejenigen zu erfassen, die über/unter den Spezifikationsgrenzen liegen Ich nehme an, ich könnte eine separate Spaltenmatrix von „excluded()“ erhalten, die Einsen und Nullen enthält, und einfach multiplizieren. Solange es fehlende Werte korrekt verarbeitet, würde es wahrscheinlich gut funktionieren und schnell laufen.
Betreff: Effiziente ZeilenstatuscodierungIch habe auch in der Halbleiterindustrie gearbeitet und festgestellt, dass es bei vielen großen Anwendungen eine viel schnellere Methode ist, die parametrischen Daten in Matrizen zu verschieben und die verschiedenen Matrixfunktionen zu verwenden, anstatt sich mit Datentabellenfunktionen zu befassen.
Betreff: Effiziente ZeilenstatuscodierungDanke Jim. Die Gewohnheit, sich für „Abrufen“ statt „Auswählen“ zu entscheiden, ist nach Jahren langsamer Skriptergebnisse sowohl in VBA als auch in JSL irgendwie tief verwurzelt, aber ich denke, ich denke hauptsächlich an Fälle, in denen ich nicht nur durch Zeilen, sondern durch jede Spalte iterieren muss .
Hier sind einige Szenarien für Halbleitertestdaten, bei denen jede Zeile ein in der Produktion getestetes Gerät und jede Spalte (nach den Indexspalten) ein parametrischer Test der Geräte ist. In jeder Spalte sind Spezifikationsgrenzen als Eigenschaft gespeichert.Ein Skript durchläuft eine Schleife und bestimmt spaltenweise den Ertrag, den High-Side- und Low-Side-Fallout usw. (viele andere Dinge, aber das ist irrelevant).Im Allgemeinen wird bei Halbleiterdaten mit Stopp beim ersten Fehler getestet, sodass die Spalten rechts von einem Fehler möglicherweise fehlen. Wenn die Daten stattdessen getestet werden und bei Fehler fortgesetzt werden, kann die Umstellung auf „Bei Fehler stoppen“ hilfreich sein. Daher muss ich auch ein Skript in Stop-on-First-Fail-Daten umwandeln.In beiden Fällen hat die Umstellung auf „get rows where()“ statt „select where()“ die Ausführungszeit des Skripts erheblich verbessert. Es ist möglich, dass die Verwendung von select where() schneller geht, wenn die Tabelle unsichtbar ist. Ich habe das nicht überprüft.
Bei den Zeilenzuständen wird jedoch nur einmal eine Schleife durchlaufen, sodass ich jetzt einen Schritt zurücktrete und darüber nachdenke, dass es wahrscheinlich nicht so schlimm ist.
Hier ist ein Screenshot von zwei Skriptversionen für mein Stop-on-Fail-Skript. Diese Änderung führte zu einem großen Unterschied in der Ausführungszeit.
Und ein ganz anderes Thema könnte sein, warum ich es als String analysiere. Ich müsste zurückgehen und mir das noch einmal ansehen, aber vor Jahren habe ich herausgefunden, dass das Parsen als String viel schneller war, aber das könnte gewesen sein, als ich noch die select where()-Anweisungen hatte.

Betreff: Effiziente ZeilenstatuscodierungIch habe keine Antwort auf Ihre Frage zur Farbpalette, aber ich habe kurz „Auswählen wo“ vs. „Zeilen wo abrufen“ ausgeführt und kaum einen Unterschied festgestellt
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
start = HP Time();
For( i = 1, i <= N Rows( dt ), i++,
dt << select where( :NPN1 > :npn1[i] )
);
Show( "select where", Format( (HP Time() - start) / 100, "Hr:m:s" ) );
start = HP Time();
For( i = 1, i <= N Rows( dt ), i++,
dt << select where( :NPN1 > :npn1[i] )
);
Show( "get rows", Format( (HP Time() - start) / 100, "Hr:m:s" ) );
und ich habe die Ergebnisse erhalten:
"wählen Sie wo";= "2:51:55";
„Zeilen abrufen“; = „2:50:40“;