以下場景:我有一個海外同事,我為他寫了一個腳本。它是一個從資料庫載入資料、將資料組織到表中並將用於控制圖表的表腳本放入表中的腳本。該表包含一些不同的產品/流程,而這個表腳本僅針對其中一個(即所有行的一小部分)。當我在電腦上運行主腳本和表腳本時,它們運行得非常好。當我在海外的同事運行它們時(我在電信公司期間在他的屏幕上看到了這一點),他從數據庫中獲取了表,並且表腳本執行,但在它應該在表中表示的行選擇方面確實嚴重失敗。它使用了來自錯誤子集的數百甚至數千個不相關的行。
在表腳本中,我沒有使用「Names Default To Here (1);」。我的同事安裝了不同的 JMP 版本(17.0 與 17.2),我認為這不會有影響。作為第一個回應,我發送了使用首選項管理器(帶有導入/導出)導出的首選項副本,這對解決問題沒有幫助。
然後,他向我發送了他的表格的副本,當我檢查其中的表格腳本時,我發現當我在計算機上從頂部執行腳本時,表格腳本的外觀略有不同:
在我的電腦上:

在我同事的電腦上:

然而,當我在他產生並透過電子郵件在我的電腦上發送給我的表格副本中執行表格腳本(即底部版本)時,表格腳本按預期執行。唉,我完全不知道這裡發生了什麼事。
這到底是什麼原因,我們該如何解決這個問題並避免將來出現這個問題?有什麼最佳實踐嗎?謝謝你!
JMP 維護版本之間肯定存在差異,這可能會導致各種差異/問題。
如果您的同事將腳本與表格腳本分開,將「Names Default To Here(1)」新增至腳本的開頭並從單獨的腳本視窗執行它,那麼該腳本是否可以正常運作?
- 本地資料格式差異確實會擾亂查詢。 (這可能由本地作業系統決定)
- 自 v14 以來版本差異很少引起問題。
-如果您有更新更快的電腦和資料庫連接,而您的大學有一台非常慢的電腦並且到資料庫的網路連接很差,這可能是一個問題。 (可能需要增加一些 wait(); 或 dt<

是由顏色未知的物件訊息引起:

一般來說,該設定非常有用 - 如果您接受某些「已知」的也會被著色。
「未知」訊息的缺點:無法透過以下方式開啟腳本索引

@jthi ,當我要求我的海外同事遵循您提出的診斷程序時,問題是一樣的。
@Byron_JMP ,正如我在視訊會議期間看到的那樣,初始腳本的執行速度大約與我所在位置的執行速度一樣快。我還猜測我們公司的筆記型電腦的規格都相對相似。令人困惑的是,當我的同事透過電子郵件向我發送他從第一個或「主」腳本獲得的初始表並且我在其中執行表腳本時,它所做的正是我期望的。所以也許線速度不是問題
@hogi我沒有激活此設置,所以在我的情況下(我已經從我的JMP安裝中獲取了計算機上的屏幕截圖),看起來好像腳本編輯器本身只是對消息(如變量)進行顏色編碼(如果有一行)在「<<」和「message」之間換行,而在「<<」和「message」之間有或沒有換行符的情況下執行效果相同,完全獨立於顏色編碼。
不過,我想我可能已經把問題範圍縮小了一些。我在下面複製了我想要表腳本執行的操作、它在我的 JMP 安裝上的外觀以及它在同事電腦上的外觀。
// what i want the table script to do
Data Table( "table_1" ) << Clear Selection;
Data Table( "table_1" ) << Clear Column Selection;
Table_2 = Data Table( "table_1" ) << Subset(
Filtered Rows(
Contains( :Category_1, "some_category" ) & Contains( :Category_2, "some_other_category" )
)
);
Table_3 = Table_2 << Split(
Split By( :Col_1, :Col_2 ),
Split( :Col_3 ),
Group( :Col_4, :Category_1, :Category_2 ),
Output Table( "table_3" ),
Remaining Columns( Drop All ),
Sort by Column Property
);
// what the table script looks like on my computer
// it does exactly the same as the above version, despite the line break before 'Subset'
Data Table( "table_1" ) << Clear Selection;
Data Table( "table_1" ) << Clear Column Selection;
Table_2 = Data Table( "table_1" ) <<
Subset(
Filtered Rows(
Contains( :Category_1, "some_category" ) & Contains( :Category_2, "some_other_category" )
)
);
Table_3 = Table_2 << Split(
Split By( :Col_1, :Col_2 ),
Split( :Col_3 ),
Group( :Col_4, :Category_1, :Category_2 ),
Output Table( "table_3" ),
Remaining Columns( Drop All ),
Sort by Column Property
);
// what it appears to be doing on my colleagues computer
Data Table( "table_1" ) << Clear Selection;
Data Table( "table_1" ) << Clear Column Selection;
Data Table( "table_1" ) << Split(
Split By( :Col_1, :Col_2 ),
Split( :Col_3 ),
Group( :Col_4, :Category_1, :Category_2 ),
Output Table( "table_3" ),
Remaining Columns( Drop All ),
Sort by Column Property
);
也許解決方案是像這樣修改表格腳本?
// a solution to be tested?
Data Table( "table_1" ) << Clear Selection;
Data Table( "table_1" ) << Clear Column Selection;
Wait(); // this would be the new part per Byron's suggestion
Table_2 = Data Table( "table_1" ) << Subset(
Filtered Rows(
Contains( :Category_1, "some_category" ) & Contains( :Category_2, "some_other_category" )
)
);
Table_3 = Table_2 << Split(
Split By( :Col_1, :Col_2 ),
Split( :Col_3 ),
Group( :Col_4, :Category_1, :Category_2 ),
Output Table( "table_3" ),
Remaining Columns( Drop All ),
Sort by Column Property
);
你怎麼認為?非常感謝您迄今為止的幫助以及您可能提出的任何其他意見。如果我弄清楚問題是什麼,我一定會把它發佈在這裡。
我建議加 Wait(0);而不是 Wait(),因為 Wait() 預設為 3 秒。

您還可以更改過濾的行以獲取行(至少可以使調試更容易)
rows_of_interest = Data Table("table_1") << Get Rows Where(Contains(:Category_1, "some_category") & Contains(:Category_2, "some_other_category"));
Table_2 = Data Table("table_1") << Subset(
Rows(rows_of_interest)
);感謝一百萬@jthi !單獨加入“wait(0)”不起作用。使用“感興趣的行”方法取得了成功。我還是覺得很奇怪。
@Byron_JMP 、 @hogi - 僅供參考,感謝您提出建議。