排序後如何更新表?大家好,
我有一個關於表格排序的問題。 我想按日期(位於 Date1 列中)對錶進行排序,並且在滿足特定條件後執行此操作。 但是,它不會對錶進行排序和替換EL_summary排序後。 有必要提神嗎? 我也延遲了一些,我認為需要等待一段時間。 當我不使用時替換錶(1),創建並打開不同名稱下的新表(我不想要的),並且該表中的數據再次未排序。 然而,在那之後,數據EL_summary似乎已更新和排序。 我將不勝感激指出我所缺少的東西。 此致
當前數據表( EL_summary );
if( N 行(EL_summary) > 0, EL_summary << 排序(by(:name("Date1")), 順序( 升序 ), 替換錶(1)));
等待(1);
回复:排序後如何更新表格?您好,通過 JSL 使用選項對數據表進行排序的官方方法是什麼替換錶()?
如前所述,如果有打開的報告,腳本將崩潰並顯示錯誤消息:

...即使圖表不依賴於數據表中的順序:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
dt<< Sort( By( :height ), Replace Table, Order( Ascending ));
將文本替換為以下內容怎麼樣:
不幸的是,在當前版本的 Jmp 中,無法對包含打開報告的表進行排序。
Jmp 無法替換現有表,因為有一些機會...嗯,您知道,報告窗口可能取決於以前的排序。 不幸的是,沒有選項可以檢查它 - 也沒有選項可以忽略它。 所以腳本將在這裡停止。

回复:排序後如何更新表格?好的,我設法隱藏新的數據表。 該數據表是當前數據表,因此我通過使用禁用了其可見性
Current Data Table() << ShowWindow( 0 );
謝謝大家的支持。 此致。
回复:排序後如何更新表?您可以通過幾種不同的方式來處理這個問題。
使數據表無法排序的輸出可以移動到日誌中進行顯示,然後可以刪除原始顯示,這將允許進行排序。
您還可以創建一個不可見或私有的新數據表,這將阻止顯示新數據表。在腳本索引中對數據表進行子集化時查找“不可見”或“私有”選項。
回复:排序後如何更新表格?您好,謝謝您的建議!
我創建了一個 GUI,在從列錶框中選擇一項後需要進行排序。 之後,某些圖片需要按照基於排序值的順序顯示在該 GUI 中。 實際上,JMP 沒有提供任何有用的日誌信息來指示問題的根源。 有沒有辦法隱藏或使排序後創建的新(和不需要的)數據表不可見? 這將是一些解決方法。
回复:排序後如何更新表格?你好,
當沒有打開圖表時,此代碼按預期執行:
Untitled = data table("Untitled.jmp");
if( N rows(Untitled) > 0, Untitled << sort(by(:name("Column 1")), Order( Ascending ), replace table(1)));
但是如果您打開任何圖表,排序將無法工作,
Untitled <<DISTRIBUTION> 0, Untitled << sort(by(:name("Column 1")), Order( Descending ), replace table(1)));
</DISTRIBUTION>
查看日誌文件,我們看到:
JMP cannot replace the existing table because there are report windows that depend on the previous ordering.
但是,如果我們刪除替換錶,它將執行而不會出錯,但它將啟動一個新的數據表,其中包含不需要的已排序行。
Untitled <<DISTRIBUTION> 0, Untitled << sort(by(:name("Column 1")), Order( Descending )));</DISTRIBUTION>
因此,您可以檢查日誌文件以查看它是否提供信息。 如果您打開了任何依賴的圖形或表格,也許您需要重新考慮腳本的邏輯。 例如,是否可以在製作相關表格和圖表之前重新排序。
回复:排序後如何更新表格?您的數據表是否已記錄到以前的表中,因此無法更改?回复:排序後如何更新表?使用 Try 捕獲錯誤,然後相應地處理錯誤。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(437, 413),
Graph Spacing(4),
Variables(X(:height), Y(:weight), Overlay(:sex)),
Elements(Points(X, Y, Legend(1)), Smoother(X, Y, Legend(2)))
);
Try(
dt << Sort(By(:height), Replace Table, Order(Ascending));
,
If(Starts With(exception_msg[1], "JMP cannot replace the existing table because there are report windows"),
dt1 = dt << Sort(By(:age), Order(Ascending)); // will create new table
/*
// if you wish to just keep one, order to create new, close old and rename new
old_name = dt << get name;
Close(dt, no save)
dt1 << set name(old_name);
dt = dt1;
*/
);
);
使用 JMP > 重塑數據 > 對數據表排序
替換錶
用排序後的表替換原始數據表,而不是使用排序後的值創建新表。 如果有任何從原始表生成的打開的報告窗口,則此選項不可用。
回复:排序後如何更新表?嗯,有了這個解決方案,腳本就不會崩潰......
另一方面:數據不會被排序,但會生成一個新表:(
目前,我更喜歡這樣的東西:
Try (sort,
Caption("Sorry, not possible to sorting the table, please close all reports and sort manually");stop());
對於未來,我希望能有類似的事情
數據表:獲取報告(和其他選項)
Try(
sort,
If( New Window( "ask User", ... ),
myAffectedReports = dt << get reports with ordering issues();
myAffectedReports << close window;
sort;
)
)
或者
sort(..., ignoreEffectOnReports())
或者
sort(..., closeReportsWithOrderingIssue());
回复:排序後如何更新表?我想編寫一個對數據表進行排序的插件。
我想在開始時通知用戶必須在啟動插件之前關閉所有報告,而不是在插件執行過程中的某個地方嘗試(排序,錯誤消息)。
我怎樣才能用 Jmp17 做到這一點?
回复:排序後如何更新表?一種選擇:
- 使用 << Get Window List 獲取對所有打開的窗口的引用(如果需要,您可以將其限制為 Type("Reports"))
- 循環該列表並檢查是否有任何依賴於正在排序的數據表的列表(您應該能夠使用報告窗口的名稱或<<獲取數據表。 如果報表屬於數據表,則將其添加到列表中
- 如果列表中有任何項目,則向用戶顯示消息
回复:排序後如何更新表?效果很好,謝謝:)
closeMyReports = Function( {dt},
{default local},
AllmyReports = {};
myReports = Get Window List( Type( "Reports" ) );
For Each( {rep}, myReports,
Try(
myList = (rep << Xpath( "//OutlineBox" )) << get scriptable Object();
myDTs = Transform Each( {scriptableObject}, myList, If( Is Empty( scriptableObject ), ., scriptableObject << Get Data Table() ) );
If( Contains( myDTs, dt ),
Insert Into( AllmyReports, rep )
);
)
);
If( N Items( AllmyReports ) > 0,
If(
ex = New Window( "",
<<TYPE></TYPE>
編輯:現在,該腳本還檢查包含許多數據表的更複雜的報告。
回复:排序後如何更新表?下一步:是否有命令:
dt << get linked subsets()
