JMP腳本中重複連接/更新的最佳實踐大家好,
I’m running a JSL script that performs Update/Join operations between calculation tables and filtered data tables. I noticed the following behavior:
-
當腳本執行多次時,JMP 會自動重新命名重複的列以避免名稱衝突,例如:
<SPAN><SPAN class="hljs-title class_">批號</SPAN><SPAN class="hljs-title class_">-</SPAN><SPAN class="hljs-number">表</SPAN>1 的<SPAN class="hljs-title class_">批號</SPAN><SPAN class="hljs-number">,</SPAN><SPAN class="hljs-keyword">表</SPAN><SPAN class="hljs-title class_">2</SPAN><SPAN class="hljs-title class_">的</SPAN><SPAN class="hljs-title class_">批號</SPAN></SPAN>
-
即使我從面板中關閉表格,變數(列物件)仍然存在於記憶體中,因此重新運行腳本會建立額外的重複列。
-
我目前的解決方法是在運行腳本之前退出 JMP 並重新啟動,以防止重複列。
向社區提出的問題:
-
Are there best practices for repeated Update or Join operations that avoid generating duplicate columns?
-
是否有建議的方法在腳本運行後“清理”表/變量,以防止後續運行創建重複項?
-
是否有函數或 JSL 模式可以安全地重新命名或覆寫列,而不會產生額外的副本?
任何建議或策略都將不勝感激!
我也嘗試過用這段程式碼動態處理它們,但是沒有成功。
RenameColumn = Function({dt, oldNamePattern, newName},
colList = dt << Get Column Names; // returns a column list object
n = N Items(colList); // number of columns
For(i = 1, i <= n, i++,
c = colList[i]; // get the column name as string
If(Contains(c, oldNamePattern),
Column(dt, c) << Set Name(newName);
Break(); // optional: stop after first match
);
);
);
自動化和腳本編寫回覆:JMP腳本中重複連接/更新的最佳實踐您希望如何處理這些列?如果它們已經存在,請不要更新/重新添加它們。您能否提供一些範例腳本和資料供社群成員參考?
回覆:JMP腳本中重複連接/更新的最佳實踐我很想了解所描述的問題的具體細節。
特別是,變數(列物件)仍然存在於記憶體中,因此重新運行腳本會建立額外的重複列。
此外,請注意:
對於 Tables/Update 操作,此類問題是由 JMP19 中的一項新功能引起的:
允許更新平台在待更新的表中已存在新列的情況下建立新列。
新增功能固然很酷,但人們卻沒有考慮到其附帶影響!
附帶效應:
在 JMP19 中,已無法再在下列模式下使用此功能:
「請新增目標表中尚不存在的欄位」。
更多詳情:表格/更新已更改!
腳本的行為有所不同,使用者會得到類似這樣的表格:
(這些額外的列毫無用處,只會污染表格)

我希望開發人員能夠理解這個問題,並在下一個版本中修復它。
可能的解決方案:2 種模式
自動表格/更新
- 使用新方法,並新增一個(帶有後綴的)列,如果(!!!!)使用者選擇了該列。

- 不要在“全部”模式下使用此技巧:

-> 將再次允許
“新增目標表中尚不存在的欄位”
(就像以前的 JMP 版本一樣)。
另一個選擇:增加一個設定來啟用/停用新模式。
為確保向後相容性:預設情況下停用此設定。
回覆:JMP腳本中重複連接/更新的最佳實踐聽起來你需要使用 Join 函數中的「輸出列」功能,這樣就不會引入重複資料。除非你引入了同名列,否則使用「輸出列」功能不會在列名後面加上「... 來自表 2」的後綴。
在更新過程中,您可以選擇要新增的列,這樣就不會引入重複的列名。
回覆:JMP腳本中重複連接/更新的最佳實踐代碼:
// Filtering Table A using RequiredBatches
FilteredA = TableA << Join(
With(RequiredBatches),
By Matching Columns(:Batch Number = :Batch Number),
Drop Multiples(0,0),
Include Matches(0,0),
Output Table("FilteredA"),
Invisible(0)
);
// Filtering Table B using RequiredBatches
FilteredB = TableB << Join(
With(RequiredBatches),
By Matching Columns(:Batch Number = :Batch Number),
Drop Multiples(0,0),
Include Nonmatches(0,0),
Output Table("FilteredB"),
Prevent Name Collision(1),
Invisible(0)
);
// Rename joined key columns
Column(FilteredA, "Batch Number of TableA") << Set Name("Batch Number");
Column(FilteredB, "Batch Number of TableB") << Set Name("Batch Number");
如果我不重新啟動 JMP 就再次執行此腳本,則會發生以下情況:
FilteredA → FilteredA 2
FilteredB → FilteredB 2
我也嘗試過在腳本開頭使用 for all tables,這在 Mac 上似乎可以正常工作,因為我沒有遇到任何問題,但在 Windows 上,我認為它不起作用,或者我對它的行為感到非常困惑。
Try(TableA << Close(No Save));
即使我使用腳本中的“關閉除此以外的所有窗口”選項從 JMP 主頁窗口列表中關閉了表格所在的窗口,表格雖然關閉了,但變數可能仍然保留在內存中。所以,我不知道該如何處理這個問題?
這樣會有幫助嗎?或者有其他不需要重新利用程式碼的方法嗎?

回覆:JMP腳本中重複連接/更新的最佳實踐在哪裡?
Prevent Name Collision(1)
來自哪裡?
在 JMP Join 平台中以互動方式執行連線操作,確保預覽效果符合預期,執行該操作並從增強日誌複製腳本。
回覆:JMP腳本中重複連接/更新的最佳實踐您是否嘗試啟用「使用第二個表中的資料更新主表」功能?

[不新增列 - 更新任何符合的行]
或「匹配同名列」?

[與第一個類似,但增加了新的列。 ]
回覆:JMP腳本中重複連接/更新的最佳實踐yes, but this would be impractical for large list of columns</CODE></P>
</LINGO-BODY>
<LINGO-SUB id="lingo-sub-914649" slang="en-US" mode="CREATE" translate="no">回覆:JMP腳本中重複連接/更新的最佳實踐</LINGO-SUB>
<LINGO-BODY id="lingo-body-914649" slang="en-US" mode="CREATE">
<BLOCKQUOTE>
<HR />
<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/63230" target="_blank">@zetaVagabond1</A> wrote:
<BR />
<P>yes, but this would be impractical for large list of columns<CODE class=" language-jsl">
這是對……的回覆?