腳本編寫者俱樂部錄音:提示和技巧影片 1 @thickey1 :管理資料表。
- 修改列名稱。
- 引用列名稱的替代方法。
- 在表中新增/嵌入腳本。用戶可以隨時運行它。
(文件:提示和技巧以及探針)
影片 2 @Georg :有關如何編寫腳本和使用 JMP 腳本編輯器的一般提示
- 程式碼折疊
- 表達式處理
- 公式中的 JSL
- eval (eval expr(一些帶有 expr 的代號(先被評估)))
- 測試變數類型
- 關聯數組
(檔案:20241120_Scripters_Club_tipps_and_tricks-inspec)
影片 3 @Mauro_Gerber :開啟多個導入並取得目前腳本的路徑
(檔案:SC-2024_ini 和 SC-2024_multi-import)
影片 4 @Daniel_Valente :JMP Marketplace 概述
https://marketplace.jmp.com/
我不敢把Ndoubled設定為10:)
我的夢想:快速、動態且易於使用:folded_hands: 符合規格(價值)
沿著“烘烤我們的代碼”的想法 - 有什麼提高速度的想法嗎?
以及如何讓其他 JSL 經驗較少的使用者也可以使用這種方法?


回覆:腳本編寫者俱樂部錄音:提示和技巧這個速度更快 - 但在規格調整時不會觸發更新。
所以目前:與
對於每個 (... dt[0,colname] = ...)
或新列(設定值())
Names Default To Here( 1 );
Ndoubled = 10;
dynamic = 1;
Try( Close( cdt, NoSave ) );
cdt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
Wait( 0 );
bigger = Expr(
cdt = cdt << concatenate( cdt, append to first table( 1 ) )
);
For( I = 1, i <= Ndoubled, i++, bigger );
col_lst = cdt << get column group( "Processes" );
Wait( 0 );
cdt << New Table Variable( "trigger update", 1 ); // can this be used to force an update?
cdt << begin data update();
t0 = HP Time();
If( dynamic,
col_lst = cdt << get column group( "Processes" );
For Each( {col}, col_lst,
col_Name = col << get name() || "_inSpecDynamic";
colnew = New Column( col_Name, Nominal );
col_Name = colnew << get name();
Eval(
Substitute(
Expr(
Column( col_Name ) << set Formula(
Local(
{t0 = As Constant(
dt = Current Data Table();
limits = _col_ << get property( "Spec Limits" );
nr = nrows(dt);
usl = limits["USL"];
lsl = limits["LSL"];
myRows = Where( _col_ > lsl & _col_ < usl );
NmyRows = N Items( myRows );
dt[0, _col_Name_] = J( nr, 1, 0 );
If( NmyRows,
dt[myRows, _col_Name_] = J( NmyRows, 1, 1 )
);
1
)},
Stop();
)
)
),
Expr( _col_ ), Name Expr( col ), Expr(_col_name_), col_name
)
);
cdt << move selected columns( {Column( col_name )}, after( col ) );
);
);
cdt << run formulas() << end data update();
Show( (HP Time() - t0) / 1000000 );
Wait( 0 );
Caption( "Process screening - don't dare ..." );
Stop();
// TEST THE RESULT
// check result in table visually
ps = cdt << Process Screening( Process Variables( Eval( col_lst ) ), Spec Limits Dialog( "No (skip columns with no spec limits)" ) );
ps << Color Out Of Spec Values( 1 );
ps << Close Window;
cdt << Clear Select << Clear Column Selection;
回覆:腳本編寫者俱樂部錄音:提示和技巧Der @hogi ,感謝您研究程式碼和附加實作。對於演示,我沒有過多關注速度等,我的重點是展示不同的方式和方法。在現實生活中,最佳實施取決於您的邊界條件,因此我認為這是特定情況的。
如果您查看程式流程,您會發現使用公式方法提取每行中的規格限制可能並不理想,但在某些情況下它可能很有用。然而,JMP 可以在運行時內部改進程序,避免不必要的計算。我不可能知道所有這些細節,但這就是為什麼我們需要嘗試不同的方法。
一般來說,當速度到位時,我會使用平台選項,例如透過流程篩選中的顏色,因為我認為它們針對大數據進行了最佳化。
也許我們可以在烘焙系列中再次研究它。是的,我認為 in_spec 將是一個非常好的內建函數。只是當關心所有細節時,實施可能會變得困難 - 希望開發人員找到一個好的方法。
回覆:腳本編寫者俱樂部錄音:提示和技巧為了與官方平台進行效能比較,請刪除或註解掉stop()。
回覆:腳本編寫者俱樂部錄音:提示和技巧關於規格限制要記住的一件事是單方面的規格。它們可能會引起各種有趣的問題
回覆:腳本編寫者俱樂部錄音:提示和技巧是的,對。
為了簡單起見,我認為使用雙面規格就可以了。
考慮側面規格(或沒有任何規格的列)是非常簡單的 - 但實際上,人們不應該忘記。
您有什麼技巧可以加快計算速度並使其動態化嗎?
回覆:腳本編寫者俱樂部錄音:提示和技巧最有可能的是,它在很大程度上取決於正在解決的問題(因此解決方案在很大程度上取決於用例)。
回覆:腳本編寫者俱樂部錄音:提示和技巧用例:
一個新列,其中包含一個公式,用於為不符合規格/符合規格的值產生 0/1 值。
如果規範中存在拼字錯誤,或使用者想要調整規範,則該列的值應自動更新(不應保留舊設定)。
可能有 10-30 列。
100k - 10Mio 行。
此解決方案可以輕鬆地與想要使用 JMP 分析通過/失敗資訊的新同事共用。
回覆:腳本編寫者俱樂部錄音:提示和技巧這可能有點偏離主題:
您缺少一些規範(?)(我認為自己是專業的XY 問題解決者,我真的不認為您想成為其中之一):
- 輸入:只是一個數據表
- 使用設定了規格限制的所有欄位?
- 但請記住,這些可能設定不正確(我認為這是一個更大的問題)
- 怎麼錯了?兩者都可以有缺失值嗎?即使我們進行連續測量,兩者的值也相同嗎?或只是「有問題的」值(您過去可以將「未評估」值作為 JMP 中的規格限制,但仍然顯示為正確的數值。不確定 JMP18 是否仍然如此)。
- 單獨的情況是用戶可能想要調整這些(我認為這種用例與具有 0/1 的單列不同)
- 使用案例是什麼?我很確定用戶不會從表格中直觀地分析 30 列和 1000 萬個單元格
- 他們如何使用結果?可以在那裡進行計算嗎? -> 有適合這類工作的客製化平台嗎?
如果我要在這種情況下「解決問題」 ,我會先解決不正確的規格限制,或者更確切地說,解決它們發生更改的情況。你真正想看到什麼?當你有 1000 萬行資料時,我真的懷疑是否有一個基於規範限制的 0/1 欄位。
您可以(或者我可以)創建一個功能來創建這樣的列(不確定您能做到多快),但這真的是問題的解決方案嗎?如果您只想根據所有列的當前規格限制擁有 0/1 列,我認為它不必是動態的(立即更新)。使用者可以按選單中的單一按鈕來更新結果(我正在考慮使用特定列名稱或表格變數的加載項)。如果目的是調整規格,那麼當你有 10 行時看到 0 變為 1 是沒有價值的(在我看來)(為該用例創建特殊平台,如果沒有其他事情並且你「只」關心速度,它很可能會更快)。
或者這只是一個理論問題如何使其更快?
回覆:腳本編寫者俱樂部錄音:提示和技巧嗨,Jarmo,謝謝您的評論。
您是對的,在“單擊此處更新”的幫助下,所有問題都消失了。
但說實話,我喜歡“圖形生成器 - 只需設置它,JMP 將處理細節”方法。
無需透過社群討論/實現細節(很清楚如何擴展公式以使其也適用於單邊規格)。在這裡,我甚至更喜歡一個簡短的程式碼來展示這個概念。
除此之外,無需懷疑快速、動態且用戶友好的:folded_hands: 是否符合規範(值)將用於有用的東西。
因此,直到:folded_hands: 符合規格(值)為止 -如果有人有更好的解決方案,如何手動設定它,我將非常高興並立即使用它。這不是一個理論問題:)