回复:加快表/更新速度首先,進度條可以幫助用戶
...略:明白了Jmp並沒有崩潰,而是在後台做了一些事情。
回复:加快表/更新速度試試這個 - 40 名學生,N x:
Names Default to Here(1);
// adjust the size and check// +1 means: data table size x 2// ... and update time x 4
mySize=12;
dt0 = Open( "$SAMPLE_DATA/Big Class.jmp" );
increaseSize= Function({dt,cycles},
for(i=1,i<=cycles,i++,
dt << Concatenate(dt, Append to first table))
);
increaseSize(dt0,mySize);
show(nrows (dt0));
dt2 = subset(dt0);
//if you are brave, enable this:
/*for (i=1,i<5,i++,
dt2 << new column("new", set each value (random uniform()))
);*/
//generate a list of columns which should be added
Cols = dt2 << get column names();
remove from (cols, {1,2,3} );
dt0 << Delete Columns( :height, :weight );
t1=hptime();
Eval(Eval Expr(dt0 << Update(
With( dt2 ),
Match Columns( :name = :name, :sex = :sex ),
Add Columns from Update Table(
Expr(Cols)
),
Replace Columns in Main Table( None )
)));
show((hptime()-t1)/1000000); // on my notebook: ~ 15s per column
close(dt0, noSave);
close(dt2, noSave);回复:加快表/更新速度有趣的是:禁用
remove from (cols, {1,2,3} );表/更新花費額外 10 秒。
似乎行匹配不僅針對添加的每一列進行。
在某種程度上,它也適用於已經存在的列。
回复:加快表/更新速度一個可以取代表格/更新具有用戶定義的平台。
- 它將添加/替換列設置為已選/無(代替全部/全部) --> 預覽時評估的列更少
- 用戶定義的按鈕好的(高速)轉換設置後可以觸發Tables/Join
通過 UpdateHS()

Names Default to Here(1);
dt = Current Data Table();
If(isempty(dt) | N rows(dt )==0, stop());
Try( myDTUpdate << close window() );
myDTUpdate = New Window( "Update - high speed", dt << update() );
myDTUpdate[Lineup Box( 1 )] << Prepend( mb = MouseBox( Button Box( "OK (HS)", updateHS() ) ) );
mb << settooltip( "high speed via Tables/join" );
//DtUpdateHS:myDTUpdate["Preview", CheckboxBox( 1 )] << set( 1, 0 );
myDTUpdate["Add Columns from Update Table", Radio Box( 1 )] << set( 3 );
myDTUpdate["Replace Columns in Main Table", Radio Box( 1 )] << set( 2 );
回复:加快表/更新速度看來如果UPDATE不使用它自己的功能,可以實現巨大的改進
...但只是在後台觸發了 JOIN。
回复:加快表/更新速度關於 Tables/Join 和 Tables/Update 之間的速度差異,我從 Jmp 支持 (TS-00044631) 得到反饋:
根據設計,當存在多個匹配項時,更新和加入會執行不同的操作。[...]加入使用第一的匹配,所以一旦找到匹配就完成了。
[...]更新[看起來]所有這些匹配,應用每一個,並且僅最後一個棍子。 *)
這解釋了由於數據的許多副本而導致上述特殊情況的巨大時間差異。
因此,如果您的表具有非唯一值和許多列,則在使用 Update 時要小心。
另一方面,如果 Jmp 檢查是否存在,該問題將很容易解決非唯一值和許多列在決定計算預覽之前:)
*) Jmp 支持的這個示例很好地說明了 Tables/Join 和 Tables/Update 之間的區別:
請注意,已加入表有所有1位於 col2 中,而更新表有所有3位於第 2 列。
dt0 = New Table( "MyTable",
Add Rows( 3 ),
New Column( "col1",
Character, "Nominal",
Set Values({"a", "a", "a"})
),
New Column( "col2",
Numeric,
"Continuous",
Set Values([1, 2, 3])
)
);
dt2 = subset( dt0 );
Cols = dt2 << get column names();
Remove From( cols, {1} );
dt0 << Delete Columns( :col2 );
Eval(Eval Expr(dt0 << Join(
With( dt2 ),
Select( :col1 ),
SelectWith(Expr( Cols) ),
By Matching Columns( :col1 = :col1 ),
Drop multiples( 0, 1 ),
Preserve main table order( 1 ),
)));
Eval(
Eval Expr(
dt0 << Update(
With( dt2 ),
Match Columns( :col1 = :col1 ),
Add Columns from Update Table( Expr( Cols ) ),
Replace Columns in Main Table( None )
)
)
);回覆:加快表/更新速度
@hogi寫道:
但我擔心該函數只是檢查表的長度 - 而不是列數。
實際上,Tables/Update 似乎檢查了列數
- 如果列數 > 100,則自動更新已停用。
但 Jmp 似乎只是檢查主表的行數/列數
不是第二個表的。
因此,如果主表的 # of cols 太大,預覽將被禁用 - 儘管 # cols (主表) 對速度沒有任何影響
Names Default to Here(1);
// adjust the size and check// +1 means: data table size x 2//
mySize1=7;
dt0 = Open( "$SAMPLE_DATA/Big Class.jmp" );
new column ("one", set each value(1));
increaseSize= Function({dt,cycles},
for(i=1,i<=cycles,i++,
dt << Concatenate(dt, Append to first table))
);
increaseSize(dt0,mySize1);
numberRows0 = Nrows(dt0);
dt2 = dt0 << Subset( All rows, columns( :name, :age ) );
for (i=1,i<1000,i++,
dt2 << new column("new", set each value (random uniform()))
);
numberRows2 = Nrows(dt2);
dt2Name = dt2 << get name();
New Column( "Rank", Formula( Col Rank( Row(), :name ) ));
Try(updateWindow << close window());
updateWindow = New window("are you brave?",
dt 0 << update()
);
updateWindow[Text Box(1)] << background color (Orange) << text color (white )<< set font ("Arial Black", 10)
<< set text("The tables have <10k rows. \!nBut the second table has > 1000 columns. \!nSo I deactivated the preview for you.\!nIf you have some time, activate it again ...");
updateWindow["Preview", CheckboxBox( 1 )] << set( 1, 0 );
updateWindow[ListBoxBox( 1 )] << set selected (loc(updateWindow[ListBoxBox( 1 )] <<GET items=""></GET>
編輯:
有時值得努力添加額外的匹配條件(例如來源表中的排名)
這減少了匹配的數量並極大地加快了預覽和實際更新的速度。
加快表/更新速度是什麼激發了這個願望清單請求?
很酷的新功能
☑ 可以幫助很多使用者!
☑ 刪除“錯誤”
很高興擁有
無人需要它
#myTop10_2023
(這個或表格連接:更新主表的選項)
我們有一個解決方法 -> 我們不再需要它
Tables Update 是一個非常好的平台,可用於將列合併到資料表中或使用另一個資料表中的資料更新列。
但有時使用者必須等待很長時間才能完成 Jmp 的資料表更新 - 即使是中大型資料表。
有時,Jmp 在更新 GUI 中編輯設定時已經陷入困境。
然後看起來 Jmp 崩潰了 - ,但幾分鐘後(有時幾個小時),Jmp 完成了數據預覽的計算,並再次為用戶提供了編輯設定的機會。
很明顯,將一個表中的數十萬個值與另一個表中的值進行匹配需要一段時間。
但令我驚訝的是,合併兩列所需的時間是合併一列的兩倍
是否會為合併的每一列再次觸發匹配步驟 - 或者實際上是對值進行排序需要很長時間?
通常,我在來源表中沒有唯一識別碼:單一符合值在列中出現多次 - 在要合併的列中也有相同的值。在這種情況下,我想知道是否將第一個匹配的值輸入到目標數據表中,然後替換為第二個 - 依此類推...
透過搜尋來源表中的最後一個符合值並僅插入該值可以加速此過程。
更新平台的一大缺點:
它首先激活添加列和替換列。
例如,如果表有 1000 列,則需要一段時間才能將所有列新增至預覽視窗。
該問題與 rows_main x rows_2nd x columns_2nd 成比例。
儘管我很愚蠢,但我經常從定義匹配列開始......這讓我可以走很長一段路,直到我被允許選擇我實際上想要添加到的(1-2)列桌子。
如果表格太大,有一個功能會停用預覽。
但我擔心該函數只是檢查表的長度 - 而不是列數。
還是門檻太大?
請分享您的經驗 - 在更新預覽選項卡後,您需要多久才能填補 Jmp 會話再次返回的時間。
另一個問題是召回按鈕
(此處解決: 透過 Recall 填充 GUI 時停用預覽)
點擊“呼叫”後,“更新”選單中將填充已儲存的設定 - 每次更改 GUI 設定後,預覽標籤似乎都會更新。
因此,如果您想加入大型資料表 - 即使您只想新增單一列 - 在停用預覽之前也不敢按 Recall ...。
您希望看到什麼改進?
您能否提高表/更新的效能。
為什麼這個想法很重要?
Tables/Update 是一個很棒的功能。預覽選項卡非常有用,我不想在沒有它的情況下工作。
但我開始變得偏執 - 下次當我嘗試將列添加到資料表時需要多長時間。
資料混合與清理回覆:加快表/更新速度我們這邊的優先順序較低 - 我們按照https://community.jmp.com/t5/JMP-Wish-List/Speed-up-Tables-Update/idc-p/653334/highlight/true#的想法實施了一種解決方法M4531