我對 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;
信任伺服器憑證=是;
UID=%_UID_%;",
sql_query_main
);
limits = 開啟資料庫(
資料庫=XXXXXXXXXXXXXX;
驅動程式={SQL Server};
PWD=%_PWD_%;
伺服器=XXX-XXX-XXXXX;;
信任伺服器憑證=是;
UID=%_UID_%;",
sql_query_limits
);
控制 = 開啟資料庫(
資料庫=XXXXXXXXXXXXXX;
驅動程式={SQL Server};
PWD=%_PWD_%;
伺服器=XXX-XXXXXX;;
信任伺服器憑證=是;
UID=%_UID_%;",
sql_query_Control
);
Column( main, "DateTimeStampUnique") << Set Property( "Label", 1 );
main << 設定標籤列( :DateTimeStampUnique );
// 參考
dtMain = main;
dtLimits = limits;
dtControl = Control;
對於每一行(dtLimits,
variable = dtLimits:Variable[];
lsl = dtLimits:LSL[];
target = dtLimits:Target[];
usl = dtLimits:USL[];
評估(評估表達式(
列( dtMain, 變數 ) <<
設定屬性(
“規格限制”,
{LSL(表達式(lsl)), Target(表達式(target)), USL(表達式(usl)), 顯示限制(1)}
)
));
如果(
包含(dtMain << 取得列名,變數),
列( dtMain,變數 ) << 設定屬性(
“規格限制”,
{LSL( lsl ), Target( target ), USL( usl )}
)
對於每一行(dtControl,
variable = dtControl:Variable[];
平均值 = dtControl:Avg[];
LCL = dtControl:LCL[];
UCL = dtControl:UCL[];
評估(評估表達式(
列( dtMain, 變數 ) <<
設定屬性(
“控制限值”,
{Avg(Expr(Avg)), LCL(Expr(LCL)), UCL(Expr(UCL)), 顯示限制(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 中的警告分類功能仍然報錯,提示限制值需要保持靜態,但這些限制值實際上是使用者自訂的。