Wie funktioniert die Bestehen/Nichtbestehen-Formel?Ich habe ein Problem, bei dem die Formeln Nullwerte zurückgeben.
Die Rohtabelle enthält die Rohdaten. Es gibt eine Spezifikationstabelle, anhand derer bestimmt wird, ob die Rohdaten gemäß der Spezifikationstabelle bestehen oder nicht. Ich habe eine JSL-Datei geschrieben. Bitte helfen Sie mir, das Problem zu erkennen. Danke.
Names Default To Here( 1 );
//raw data
dt = Data Table( "raw data001" );
dt1 = dt << subset( all rows, all columns );
//spec table
dtbz = Data Table( "Spec" );
LSL = dtbz[0, 3];
USL = dtbz[0, 4];
dtbz << New Column( "combine", formula( :Project || :Item ) );
// Create separate judgment columns for the columns to be judged
items = Design( dtbz:Item << get values(), <
<LEVELS>
0, dtbz:LSL[Loc( dtbz:combine << get as matrix(), "A" || it )[1]] <= Column( dt1, items[i] ) <= dtbz:USL[ Loc( dtbz:combine << get as matrix(), "A" || it )[1]], :Project == "B" & N Items( Loc( dtbz:combine << get as matrix(), "B" || it ) ) > 0, dtbz:LSL[Loc( dtbz:combine << get as matrix(), "B" || it )[1]] <= Column( dt1, items[i] ) <= dtbz:USL[ Loc( dtbz:combine << get as matrix(), "B" || it )[1]], :Project == "C" & N Items( Loc( dtbz:combine << get as matrix(), "C" || it ) ) > 0, dtbz:LSL[Loc( dtbz:combine << get as matrix(), "C" || it )[1]] <= Column( dt1, items[i] ) <= dtbz:USL[ Loc( dtbz:combine << get as matrix(), "C" || it )[1]], :Project == "D" & N Items( Loc( dtbz:combine << get as matrix(), "D" || it ) ) > 0, dtbz:LSL[Loc( dtbz:combine << get as matrix(), "D" || it )[1]] <= Column( dt1, items[i] ) <= dtbz:USL[ Loc( dtbz:combine << get as matrix(), "D" || it )[1]], ) ) ) );
</LEVELS>
Automatisierung und SkriptingBetreff: Wie funktioniert die Pass/Fail-Formel?Hier ist eine Überarbeitung Ihres Skripts, die es meiner Meinung nach vereinfacht und Ihnen dennoch Ihre Erträge liefert

Names Default To Here( 1 );
//raw data
dt = Data Table( "raw data001" );
dt1 = dt << subset( all rows, all columns );
//spec table
dtbz = Data Table( "Spec" );
LSL = dtbz[0, 4];
USL = dtbz[0, 5];
//dtbz << New Column( "combine", formula( :Project || :Item ) );
dtbz << New Column( "combine", character, formula( :Project || :Item ) );
// Create separate judgment columns for the columns to be judged
// items = Design( dtbz:Item << get values(), <<LEVELS> 0,
dtbz:USL[Loc( dtbz:combine << get as matrix(), "A" || it )[1]] <= Column( dt1, items[i] )
<= dtbz:USL[Loc( dtbz:combine << get as matrix(), "A" || it )[1]],
:Project == "B" & N Items( Loc( dtbz:combine << get as matrix(), "B" || it ) ) > 0,
dtbz:USL[Loc( dtbz:combine << get as matrix(), "B" || it )[1]] <= Column( dt1, items[i] )
<= dtbz:USL[Loc( dtbz:combine << get as matrix(), "B" || it )[1]],
:Project == "C" & N Items( Loc( dtbz:combine << get as matrix(), "C" || it ) ) > 0,
dtbz:USL[Loc( dtbz:combine << get as matrix(), "C" || it )[1]] <= Column( dt1, items[i] )
<= dtbz:USL[Loc( dtbz:combine << get as matrix(), "C" || it )[1]],
:Project == "D" & N Items( Loc( dtbz:combine << get as matrix(), "D" || it ) ) > 0,
dtbz:USL[Loc( dtbz:combine << get as matrix(), "D" || it )[1]] <= Column( dt1, items[i] )
<= dtbz:USL[Loc( dtbz:combine << get as matrix(), "D" || it )[1]],
)
)
);*/
Eval(
Substitute(
Expr(
dt1 << New Column( it || "—yield",
formula(
curProject = :Project;
Try( dtbzRow = (dtbz << get rows where( dtbz:Project == curProject & dtbz:item == __it__ ))[1], 0 );
If( dtbzRow > 0,
If( dtbz:LSL[dtbzRow] <= As Column( dt1, __it__ ) <= dtbz:USL[dtbzRow],
1,
0
)
);
)
)
),
Expr( __it__ ), it
)
);
);</LEVELS>
Betreff: Wie funktioniert die Pass/Fail-Formel?Vielen Dank für deine schnelle Antwort, es funktioniert.
Betreff: Wie funktioniert die Pass/Fail-Formel?Hallo Jim Ein weiteres kleines Problem besteht darin, dass der Nullwert zurückgegeben werden sollte, wenn die entsprechende USL und LSL nicht in der Spezifikationstabelle gefunden werden. Dieser Code wird jedoch ausgeführt und gibt 0 zurück. Ich weiß nicht, was los ist.
Betreff: Wie funktioniert die Pass/Fail-Formel?Die ursprüngliche Änderung, die ich bereitgestellt habe, ging davon aus, dass alle Spezifikationsgrenzen verfügbar wären.Um das Potenzial fehlender Grenzwerte zu berücksichtigen, müssen die Formeln geändert werden, um diese Fälle zu behandeln.Die folgende JSL passt sich an einige mögliche Fälle an, aber Sie müssen möglicherweise weitere hinzufügen, wie zum Beispiel:
Die USL ist kleiner als die LSL
Names Default To Here( 1 );
//raw data
dt = Data Table( "raw data001" );
dt1 = dt << subset( all rows, all columns );
//spec table
dtbz = Data Table( "Spec" );
// Create separate judgment columns for the columns to be judged
// items = Design( dtbz:Item << get values(), <<LEVELS> 0 & Is Missing( dtbz:LSL[dtbzRow] ) == 0 & Is Missing( dtbz:USL[dtbzRow] ) == 0,
If( dtbz:LSL[dtbzRow] <= As Column( dt1, __it__ ) <= dtbz:USL[dtbzRow],
1,
0
),
.
);
)
)
),
Expr( __it__ ), it
)
);
);</LEVELS>Betreff: Wie funktioniert die Pass/Fail-Formel?Vielen Dank, aber ich habe eine Frage: Warum hatte der vorherige Code dieses Problem? Ich sehe, dass die Logik des vorherigen Codes lautet: Wenn er in der SPEC-Tabelle gefunden wird, sollte das Urteil, wenn es nicht gefunden wird und kein Code vorhanden ist, ein leerer Wert sein. Ah, warum wird es immer noch beurteilt?
Betreff: Wie funktioniert die Pass/Fail-Formel?Berechnete Werte bleiben von Zeile zu Zeile bestehen. Wenn also eine Bedingung in Zeile 2 keine Änderung am berechneten Wert bewirkt, bleibt der für Zeile 1 berechnete Wert unverändert.
Betreff: Wie funktioniert die Pass/Fail-Formel?Danke! Ich habe es versucht und tatsächlich wird bei der vorherigen Codeausführung, wenn es nicht in der SPEC-Tabelle gefunden wird, nach der dtbzRow der vorherigen Zeile gesucht. Es wurde eindeutig nicht gefunden, aber es drückt immer noch den Wert der vorherigen Zeile. Ich finde das nicht in den Routineformeln. Passiert es nur, wenn ich eine Suche in einer anderen Tabelle verwende?
Betreff: Wie funktioniert die Pass/Fail-Formel?Speichervariablen in JMP bleiben bestehen, bis sie geändert werden.Hier ist ein Skript, das eine neue Spalte und Formel erstellt, die eine Variable „a“ in Zeile 1 festlegt und diese dann in Zeile 10 ändert. Sie können sehen, dass sich der Wert von „a“ erst in Zeile 10 ändert, sondern bei bleibt der bis dahin eingestellte Anfangswert.
Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
// New column: Column 6
Data Table( "Big Class" ) << New Column( "test",
Numeric,
"Continuous",
Format( "Best", 12 )
);
dt:test << set formula(
If( Row() == 1, a = 1 );
If( Row() == 10, a = a + 1 );
:test = a;
);
Betreff: Wie funktioniert die Pass/Fail-Formel?Ich verstehe, das liegt daran, dass es nicht zugewiesen wird, wenn es in der try-Anweisung nicht gefunden wird, was zum ursprünglichen Wert führt, aber nicht in der ersten Zeile am Anfang gefunden werden kann, also wie ist das? es zugewiesen?
Betreff: Wie funktioniert die Pass/Fail-Formel?Ich habe das Skript mit Anmerkungen versehen, um das Lesen zu erleichtern.Ich habe auch eine kleine Änderung an der Try()-Funktion vorgenommen und sie so verschoben, dass sie dtbzRow ein Ergebnis liefert.
Sehen Sie, ob dies zum Verständnis beiträgt
Names Default To Here( 1 );
//raw data
dt = Data Table( "raw data001" );
dt1 = dt << subset( all rows, all columns );
//spec table
dtbz = Data Table( "Spec" );
// Create separate judgment columns for the columns to be judged
// items = Design( dtbz:Item << get values(), <<LEVELS> 0 & Is Missing( dtbz:LSL[dtbzRow] ) == 0 &
Is Missing( dtbz:USL[dtbzRow] ) == 0,
// If the column's value is between the LSL and USL
// the value is set to 1, if outside one of the
// limits it is set to 0
If(
dtbz:LSL[dtbzRow] <= As Column( dt1, __it__ ) <= dtbz
:USL[dtbzRow],
1,
0
),
.
);
)
)
),
Expr( __it__ ), it
)
);
);</LEVELS>Betreff: Wie funktioniert die Pass/Fail-Formel?Ich verstehe, danke für deine Geduld!