排序后如何更新表?大家好,
我有一个关于表格排序的问题。 我想按日期(位于 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()
