Aktualisierung der Kontrollgrenzen für KontrollkartenIch bin ein absoluter Anfänger in JMP Pro, JMP Live und JSL. Mein Problem ist folgendes: Ich habe ein Aktualisierungsskript, das erfolgreich Spezifikationsgrenzen aus einer Datenbank in SSMS abruft und auf die Spalteneigenschaften anwendet. Nun möchte ich Daten aus einer anderen Tabelle abrufen, um individuelle Kontrollgrenzen für alle Prozessvariablen im Datensatz anzuwenden. Wenn ich die – meiner Meinung nach – korrekten Blöcke hinzufüge, werden zwar die Spezifikationsgrenzen gesetzt, die Kontrollgrenzen jedoch nicht. Es gibt keine Fehlermeldungen im Log, daher weiß ich, dass die neuen Blöcke stillschweigend ignoriert werden. Ich verstehe aber nicht, was das bedeutet.
Ich wäre sehr dankbar, wenn mir jemand einen hilfreichen Hinweis geben könnte!
sql_query_main = " SELECT * FROM jmpTop30WideView WHERE Product LIKE '1/2 RS' AND TestType IN ('Retest', 'Hot')";
sql_query_limits = "SELECT Property AS Variable, LSL, Target, USL FROM ProductSpecsLongView WHERE [Product] LIKE '1/2 RS' ";
sql_query_Control = "SELECT Property AS Variable, Avg, LCL, UCL FROM ControlLimitsTable WHERE [Product] LIKE '1/2 RS' ";
main = Open Database(
"DATABASE=XXXXXXXXXXXXXX;
DRIVER={SQL Server};
PWD=%_PWD_%;
SERVER=XXX-XXXXX;
TRUSTSERVERCERTIFICATE=Yes;
UID=%_UID_%;",
sql_query_main
);
limits = Open Database(
"DATABASE=XXXXXXXXXXXXXX;
DRIVER={SQL Server};
PWD=%_PWD_%;
SERVER=XXX-XXX-XXXXX;;
TRUSTSERVERCERTIFICATE=Yes;
UID=%_UID_%;",
sql_query_limits
);
Control = Open Database(
"DATABASE=XXXXXXXXXXXXXX;
DRIVER={SQL Server};
PWD=%_PWD_%;
SERVER=XXX-XXXXXX;;
TRUSTSERVERCERTIFICATE=Yes;
UID=%_UID_%;",
sql_query_Control
);
Column(main, "DateTimeStampUnique") << Set Property("Label", 1);
main << Set Label Columns(:DateTimeStampUnique);
// References
dtMain = main;
dtLimits = limits;
dtControl = Control;
For Each Row(
dtLimits,
variable = dtLimits:Variable[];
lsl = dtLimits:LSL[];
target = dtLimits:Target[];
usl = dtLimits:USL[];
Eval(Eval Expr(Column(dtMain, variable) << Set Property("Spec Limits", {LSL(Expr(lsl)), Target(Expr(target)), USL(Expr(usl)), Show Limits(1)})));
If(Contains(dtMain << Get Column Names, variable),
Column(dtMain, variable) << Set Property("Spec Limits", {LSL(lsl), Target(target), USL(usl)})
);
);
For Each Row(
dtControl,
variable = dtControl:Variable[];
Avg = dtControl:Avg[];
LCL = dtControl:LCL[];
UCL = dtControl:UCL[];
Eval(Eval Expr(Column(dtMain, variable) << Set Property("Control Limits", {Avg(Expr(Avg)), LCL(Expr(LCL)), UCL(Expr(UCL)), Show Limits(1)})));
If(Contains(dtMain << Get Column Names, variable),
Column(dtMain, variable) << Set Property(
"Control Limits",
{AVG(), LCL(), UCL()}
)
);
);
dtMain;
Edit (jthi): JSL-Formatierung hinzugefügt (Ich habe das Originalskript im Spoiler-Block belassen, da viele Klammern fehlten, die ich korrigieren musste)
Mehr anzeigen...
sql_query_main = " SELECT * FROM jmpTop30WideView WHERE Product LIKE '1/2 RS' AND TestType IN ('Retest', 'Hot')";
sql_query_limits = "SELECT Property AS Variable, LSL, Target, USL FROM ProductSpecsLongView WHERE [Product] LIKE '1/2 RS' ";
sql_query_Control = "SELECT Property AS Variable, Avg, LCL, UCL FROM ControlLimitsTable WHERE [Product] LIKE '1/2 RS' ";
main = Open Database(
"DATABASE=XXXXXXXXXXXXXX;
TREIBER={SQL Server};
PWD=%_PWD_%;
SERVER=XXX-XXXXX;
TRUSTSERVERCERTIFICATE=Ja;
UID=%_UID_%;",
sql_query_main
);
Limits = Open Database(
"DATABASE=XXXXXXXXXXXXXX;
TREIBER={SQL Server};
PWD=%_PWD_%;
SERVER=XXX-XXX-XXXXX;;
TRUSTSERVERCERTIFICATE=Ja;
UID=%_UID_%;",
sql_query_limits
);
Steuerung = Datenbank öffnen(
"DATABASE=XXXXXXXXXXXXXX;
TREIBER={SQL Server};
PWD=%_PWD_%;
SERVER=XXX-XXXXXX;;
TRUSTSERVERCERTIFICATE=Ja;
UID=%_UID_%;",
sql_query_Control
);
Column( main, "DateTimeStampUnique" ) << Set Property( "Label", 1 );
main << Set Label Columns( :DateTimeStampUnique );
// Referenzen
dtMain = main;
dtLimits = Grenzen;
dtControl = Control;
Für jede Zeile( dtLimits,
Variable = dtLimits:Variable[];
lsl = dtLimits:LSL[];
Ziel = dtLimits:Ziel[];
usl = dtLimits:USL[];
Eval( Eval Expr(
Column( dtMain, variable ) <<
Eigenschaft festlegen (
"Spezifikationsgrenzen",
{LSL(Expr(lsl)), Target(Expr(target)), USL(Expr(usl)), Show Limits(1)}
)
));
Wenn(
Enthält( dtMain << Spaltennamen abrufen, Variable ),
Column( dtMain, variable ) << Set Property(
"Spezifikationsgrenzen",
{LSL( lsl ), Target( target ), USL( usl )}
)
Für jede Zeile( dtControl,
Variable = dtControl:Variable[];
Avg = dtControl:Avg[];
LCL = dtControl:LCL[];
UCL = dtControl:UCL[];
Eval( Eval Expr(
Column( dtMain, variable ) <<
Eigenschaft festlegen (
"Kontrollgrenzen",
{Avg(Expr(Avg)), LCL(Expr(LCL)), UCL(Expr(UCL)), Show Limits(1)}
)
));
Wenn(
Enthält( dtMain << Spaltennamen abrufen, Variable ),
Column( dtMain, variable ) << Set Property(
"Kontrollgrenzen",
{AVG(), LCL(), UCL()}
)
);
);
dtMain;
Automatisierung und Skripterstellung
Betreff: Aktualisierung der Kontrollgrenzen für KontrollkartenIch wette, das würde funktionieren, wenn Sie den Regeldiagrammtyp angeben, also anstatt
<< Set Property( "Control Limits", {Avg( Expr( Avg ) ), LCL( Expr( LCL ) ), UCL( Expr( UCL ) ), Show Limits( 1 )} )t
versuchen
<< Set Property( "Control Limits", {XBar( Avg( Expr( Avg ) ), LCL( Expr( LCL ) ), UCL( Expr( UCL ) ), Show Limits( 1 ) )} )
(Ersetzen Sie "XBar" durch den von Ihnen gewünschten Regeldiagrammtyp)
Außerdem sollten Sie versuchen, die überflüssigen If()-Anweisungen auszukommentieren, die versuchen, die Spezifikations- und Kontrollgrenzen zuzuweisen, nachdem Sie dies bereits getan haben. Prüfen Sie, ob es dann wie gewünscht funktioniert.
Betreff: Aktualisierung der Kontrollgrenzen für KontrollkartenDer von Ihnen bereitgestellte JSL-Code enthält Syntaxfehler. Beim Versuch, ihn neu zu formatieren, trat in Zeile 67 ein Fehler auf, da am Ende der vorherigen Zeile ein Semikolon (;) fehlte. Nach der Korrektur dieses Fehlers tritt ein weiterer Fehler auf, da die schließenden Klammern ()) der verschiedenen For-Each-Row-Blöcke fehlten. Dies behindert meine Fehlersuche erheblich, da es ohne korrekt geschlossene For-Blöcke sehr schwierig ist, den Programmablauf zu ermitteln.
Bitte korrigieren Sie diese Fehler und senden Sie die Datei anschließend erneut ab.
Bitte verwenden Sie außerdem das JSL-Symbol oben im Eingabefenster, um Ihren JSL-Code in die Diskussion einzufügen. Dies ermöglicht es dem Leser, Ihren Code besser zu bewerten.
Betreff: Aktualisierung der Kontrollgrenzen für KontrollkartenDas hat zusammen mit einer anderen Antwort geholfen. Die Warnmeldung in JMP Live meldet zwar immer noch, dass die Grenzwerte statisch sein müssen, obwohl sie benutzerdefiniert eingestellt sind.