Wie erhalte ich Grenzwerte aus einer Spalte und verwende sie über JSL für andere Spalten?Die beigefügte Datentabelle enthält Grenzwerte (LSL/USL) für jeden gemessenen Parameter (Strom, Widerstand) in den entsprechenden Spalten.
Wie kann ich die Grenzwerte für jeden Parameter als Referenzlinien anzeigen lassen, ohne das Format der Datentabelle zu ändern, wenn beispielsweise der Median gegen die PartID aufgetragen wird (wie im Skript in der beigefügten Datentabelle)?
Eine Möglichkeit, dies zu tun, besteht darin, die LSL/USL in den Spalteneigenschaften für jeden Parameter zu speichern, aber ich benötige dafür etwas JSL-Hilfe.
WindowsBetreff: Wie erhalte ich Grenzwerte aus einer Spalte und verwende sie über JSL für andere Spalten?Am einfachsten (und meiner Meinung nach auch am besten) wäre es, das Tabellenformat zu ändern, aber da das nicht möglich ist, wären die anderen Optionen die Verwendung von Spalteneigenschaften (das wäre etwas seltsam, da es Grenzen für Grenzen gäbe) oder ein grafisches Skript . Zuerst müssten Sie alle möglichen Grenzwerte für jede Spalte sammeln (kann es für dieselben Spalten unterschiedliche Grenzwerte geben?), die Zusammenfassung sollte dafür recht gut funktionieren, und dann je nach Ihrer Wahl entweder diese als Spalteneigenschaften hinzufügen oder sie verwenden mit grafischer Schrift.
Betreff: Wie erhalte ich Grenzwerte aus einer Spalte und verwende sie über JSL für andere Spalten?So würde ich mit Ihrem Tisch umgehen.Es verschiebt alle USL- und LSL-Werte in die Spalteneigenschaft für jede der Spalten, und dann werden die Grenzwerte automatisch angezeigt, wenn Sie die Spalten grafisch darstellen

Names Default To Here( 1 );
dt = Current Data Table();
colNamesList = dt << get column names( string, numeric );
For Each( {col}, colNamesList,
LSL = Column( col )[(dt << get rows where( :Label == "LSL" ))[1]];
USL = Column( col )[(dt << get rows where( :Label == "USL" ))[1]];
Eval(
Substitute(
Expr(
Column( col ) << set property(
"spec limits",
{LSL( _LSL_ ), USL( _USL_ ), Show Limits( 1 )}
)
),
Expr( _USL_ ), USL,
Expr( _LSL_ ), LSL
)
);
);
// Uncomment the below 2 lines to delete the LSL and USL rows in the table
//dt << select where(:Label == "LSL" | :Label=="LSL");
//dt << delete rows;
Graph Builder(
Size( 570, 578 ),
Variables( X( :partID ), Y( :Current ), Y( :Resistance ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 8 ), Jitter( "None" ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 6 ), Jitter( "None" ) ) ),
Local Data Filter( Add Filter( columns( :Label ), Where( :Label == {"Median"} ) ) )
);
Betreff: Wie erhalte ich Grenzwerte aus einer Spalte und verwende sie über JSL für andere Spalten?@txnelson @jthi
Danke, ich werde deine Lösung jetzt ausprobieren. Ich wollte etwas Ähnliches tun, kann die folgende Funktion jedoch nicht zum Laufen bringen. Die Idee besteht darin, dies auf eine Spaltengruppe anzuwenden, nachdem alle getesteten Parameterspalten gruppiert wurden. Ich habe es für eine getestete Parameterspalte (Aktuell) versucht, aber es hat nicht funktioniert. Funktioniert gut, wenn Zahlen als Grenzwerte übergeben werden, aber nicht, wenn Variablen übergeben werden. Wo habe ich einen Fehler gemacht (ich habe es mit und ohne Eval() und Expr() versucht).
Names Default To Here( 1 );
setSpecLimits = Function( {dt_ref, colName, _LSL, _USL},
{specLimits},
tmp = Eval( Expr( dt_ref:colName << Set Property( "Spec Limits", {LSL( _LSL ), USL( _USL ), Show Limits( 1 )} ) ) );
Return( specLimits ); //optional
);
////Check
Clear Log();
//test before
specLims = Data Table( "exampleData" ):Current << Get Property( "Spec Limits" ); Show( specLims );
//New values
_LSL = Data Table( "exampleData" ):Current[2]; Show( _LSL );
_USL = Data Table( "exampleData" ):Current[3]; Show( _USL );
dt_ref = Data Table( "exampleData" ); show (dt_ref);
colName = "Current"; Show( colName );
//call function
setSpecLimits( dt_ref, colName, _LSL, _USL );
//test after
specLims = Data Table( "exampleData" ):Current << Get Property( "Spec Limits" ); Show( specLims );
Betreff: Wie erhalte ich Grenzwerte aus einer Spalte und verwende sie über JSL für andere Spalten?Dies sollte das Problem beheben
setSpecLimits = Function( {dt_ref, colName, _LSL, _USL},
{specLimits},
tmp = Eval(
eval Expr(
dt_ref:colName << Set Property( "Spec Limits", {LSL( expr(_LSL) ), USL( expr(_USL ) ), Show Limits( 1 )} )
)
);
Return( specLimits ); //optional
);Betreff: Wie erhalte ich Grenzwerte aus einer Spalte und verwende sie über JSL für andere Spalten?Anstatt Ersatz , können Sie auch verwenden Eval (Eval Expr( ...Exp())) :
Eval(EvalExpr(dt_ref:colName << Set Property( "Spec Limits", {LSL(Expr(_LSL )), USL(Expr( _USL) ), Show Limits( 1 )} )))Zur Vorabbewertung der Spezifikationsgrenzen _LSL & _USL sie müssen drinnen sein Ausdruck () und erhalten Sie eine Vorabbewertung über Eval Expr() .
Anschließend kann man den gesamten Ausdruck über auswerten Eval()
Betreff: Wie erhalte ich Grenzwerte aus einer Spalte und verwende sie über JSL für andere Spalten?@txnelson Danke. Eval Expr() macht den Trick.
Wie ändere ich die Spezifikationsreferenzlinien in gestrichelt und die Farbe der gestrichelten Linien in Rot?
Betreff: Wie erhalte ich Grenzwerte aus einer Spalte und verwende sie über JSL für andere Spalten?Sie könnten die GUI verwenden:

Betreff: Wie erhalte ich Grenzwerte aus einer Spalte und verwende sie über JSL für andere Spalten?oder JSL:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt:height << Set Property("Spec Limits",{LSL( 57 ), USL( 67 )});<BR /><BR /><BR />
gb = dt << Graph Builder(
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
);
specs=dt:height << Get Property("Spec Limits");
LSL=specs["LSL"];
USL=specs["USL"];
report(gb)[ScaleBox(1)] <<{ Add Ref Line( LSL, "Dashed", "Red", "LSL", 1 ),
Add Ref Line( USL, "Dashed", "Red", "USL", 1 )}Betreff: Wie erhalte ich Grenzwerte aus einer Spalte und verwende sie über JSL für andere Spalten?@hogi Danke. Ich habe nach der JSL-Möglichkeit gesucht, eine durchgezogene Linie in eine gestrichelte Linie und eine Standardfarbe zu ändern, wenn die Spezifikationsgrenzen definiert und in den Spalteneigenschaften gespeichert und dann automatisch von JMP geplottet werden (wie in Beitrag 3 von @txnelson ).
Betreff: Wie erhalte ich Grenzwerte aus einer Spalte und verwende sie über JSL für andere Spalten?Wenn Sie die Funktion „Grenzwerte anzeigen“ der Spezifikationsgrenzwerte verwenden, wird nur eine blaue durchgezogene Linie angezeigt.Wenn Sie die Grenzwerte anzeigen und mithilfe von JSL Farbe, Beschriftung, Linientyp usw. angeben möchten, müssen Sie den Code schreiben, um die Nachricht zu verwenden
obj << add ref line(......);
Fähigkeiten.
Eine Beschreibung und ein Beispiel finden Sie im Skriptindex
Betreff: Wie erhalte ich Grenzwerte aus einer Spalte und verwende sie über JSL für andere Spalten?Zuerst ist es etwas „enttäuschend“ – warum ist es nicht möglich, die Farbe zu ändern, wenn ich diese coole Funktion „Grenzen anzeigen“ verwende?
Aber tatsächlich ist es möglich – mit der GUI. Benutz einfach Grenzen anzeigen(1) und gehen Sie zu den Achseneinstellungen.
Und andererseits:
Wenn Sie die Farbe über JSL ändern möchten, ist der zusätzliche kleine Code erforderlich hinzufügen Die Linien beim Ändern der Farbe stören nicht allzu sehr, oder?
Man könnte darüber nachdenken, die Standardfarbe/den Standardlinienstil in den Einstellungen festzulegen.
vollautomatisch – kein JSL – keine manuelle Änderung – nur Zeilen, wie Sie sie möchten.