JMP Pro、JMP Live、JSLに関しては全くの初心者です。問題は、SSMSのデータベースから仕様制限を正常に取得し、列のプロパティに適用する更新スクリプトがあることです。データセット内のすべてのプロセス変数に対して個別の管理制限を適用するために、別のテーブルから取得を開始したいと考えています。これを実現するために正しいと思われるブロックを追加しても、仕様制限は設定されますが、管理制限が適用されません。ログにはエラーなどは一切表示されないため、新しいブロックが黙って無視されていることはわかりますが、それ自体が何を意味するのか全くわかりません。
どなたか適切な方向へ導いていただけると大変ありがたいです!
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;
編集(jthi):JSLフォーマットを追加しました(元のスクリプトには括弧が多数欠落していたため、修正する必要があり、ネタバレブロック内に残しました)。
もっと見る...
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 = データベースを開く(
「データベース=XXXXXXXXXXXXXX;
ドライバー={SQL Server}
PWD=%_PWD_%;
サーバー=XXX-XXXXX;
TRUSTSERVERCERTIFICATE=はい;
UID=%_UID_%;",
sql_query_main
);
制限 = データベースを開く(
「データベース=XXXXXXXXXXXXXX;
ドライバー={SQL Server}
PWD=%_PWD_%;
サーバー=XXX-XXX-XXXXX;;
TRUSTSERVERCERTIFICATE=はい;
UID=%_UID_%;",
sql_query_limits
);
コントロール = データベースを開く(
「データベース=XXXXXXXXXXXXXX;
ドライバー={SQL Server}
PWD=%_PWD_%;
サーバー=XXX-XXXXXX;;
TRUSTSERVERCERTIFICATE=はい;
UID=%_UID_%;",
sql_query_Control
);
列( main, "DateTimeStampUnique" ) << プロパティ( "Label", 1 ) を設定します。
main << ラベル列を設定します( :DateTimeStampUnique );
// 参考文献
dtMain = main;
dtLimits = 制限値;
dtControl = コントロール;
各行について(dtLimits、
変数 = dtLimits:Variable[];
lsl = dtLimits:LSL[];
target = dtLimits:Target[];
usl = dtLimits:USL[];
Eval( Eval Expr(
列(dtMain、変数) <<
プロパティを設定する(
「仕様制限」
{LSL( Expr( lsl ) ), Target( Expr( target ) ), USL( Expr( usl ) ), Show Limits( 1 )}
)
));
もし(
含まれる( dtMain << 列名を取得、変数 )
列(dtMain、変数) << プロパティを設定(
「仕様制限」
{LSL( lsl ), Target( target ), USL( usl )}
)
各行について(dtControl、
変数 = dtControl:Variable[];
Avg = dtControl:Avg[];
LCL = dtControl:LCL[];
UCL = dtControl:UCL[];
Eval( Eval Expr(
列(dtMain、変数) <<
プロパティを設定する(
「管理限界」
{Avg( Expr( Avg ) ), LCL( Expr( LCL ) ), UCL( Expr( UCL ) ), Show Limits( 1 )}
)
));
もし(
含まれる( dtMain << 列名を取得、変数 )
列(dtMain、変数) << プロパティを設定(
「管理限界」
{AVG()、LCL()、UCL()}
)
);
);
dtMain;
自動化とスクリプト作成
コントロールチャートの種類を指定すればうまくいくと思います。
<< Set Property( "Control Limits", {Avg( Expr( Avg ) ), LCL( Expr( LCL ) ), UCL( Expr( UCL ) ), Show Limits( 1 )} )t
試す
<< Set Property( "Control Limits", {XBar( Avg( Expr( Avg ) ), LCL( Expr( LCL ) ), UCL( Expr( UCL ) ), Show Limits( 1 ) )} )
(「XBar」を、使用したい管理図の種類に置き換えてください)
また、既に仕様限界と管理限界を設定済みであるにもかかわらず、それらを再度設定しようとする冗長なIf()文をコメントアウトしてみることをお勧めします。そうすることで、意図したとおりに動作するかどうか確認してください。
ご提供いただいたJSLには構文エラーがあります。リフォーマットを試みたところ、67行目で前の行の末尾にセミコロン(;)がないというエラーが発生し、修正後も今度は各For Each Rowブロックの閉じ括弧()がないというエラーが発生します。Forブロックが正しく閉じられていないと、プログラムの流れを推測するのが非常に困難なため、デバッグ作業が滞ってしまいます。
これらの誤りを修正してから再送信してください。
また、入力ウィンドウ上部のJSLアイコンを使用して、JSLコードをディスカッションに投稿してください。そうすることで、読者があなたのコードをより適切に評価できるようになります。
これに加えて別の回答も役立ちました。しかし、JMP Liveの警告トリアージでは、制限値を静的にする必要があるのに、ユーザー定義で設定されているというエラーが依然として発生しています。