我在创建工作流时,可能会使用 tabulate 创建一些汇总表,并自动将其命名为“Untitle 1”。结果,当我再次执行工作流时,新创建的汇总表被命名为“Untitle 2”,因此工作流找不到 Untilte1,我需要手动为其提供引用,如果有很多新表,则经常会发生错误。
有没有什么办法可以让 Workflow 自动识别新表?或者,我们可以在 Tabulate 中“将其设为表”之前直接将表命名为“Untitle”吗?
谢谢!
您可以在使用 Tabulate 时决定名称,但我认为您必须通过修改 JSL 来完成(将 Output Table("tablename") 添加到 << Make Into Data Table)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Car Poll.jmp");
obj = dt << Tabulate(
Add Table(
Column Table(Grouping Columns(:sex, :marital status)),
Row Table(Grouping Columns(:country, :size))
)
);
dt = obj << Make Into Data Table(Output Table("My Table"));工作流生成器非常棒——用户不需要了解任何 JSL 脚本。
...直到他面临陷阱:表名冲突。
在 50% 的情况下,没有具有匹配名称的表 - JMP 会询问。
如果存在一个名称匹配的表,并且它是错误的,则问题就开始了。
该主题在本次演讲的问答环节中进行了讨论:
工作流生成器或脚本编写的“小步骤”
有几种“解决方法”:
最简单的一个(#4b)-遵循@jthi示例:
使用一点 JSL 并将表引用存储为“ dt ”。然后在所有其他工作流步骤中也使用dt 。
注意:指定“输出表”只有在发生冲突时才有效,此时“无标题”将变为“无标题 2”。
其他方法:
#1 使用倒带图标

...关闭所有数据表,则新生成的表将再次为“无标题”。
-> 没有可靠的解决方案
一旦打开数据表“无标题” ,并且用户尝试运行工作流,该方法就会失败。
#2:保存
创建数据表后,以特定名称保存。使用保存的数据表记录附加步骤。
很酷:使用保存,即使存在表名冲突 - JMP 也不会添加“2”。
每次只需使用相同的临时文件并覆盖它。
不太好——但非常有效!!
@Zoe_Betteridge 使用 JMP 工作流生成器进行自动化分析
#3:JMP18 以来的新功能:使用for each 循环
它将嵌套工作流步骤中的所有表名替换为导入步骤中的表名(也适用于 N=1):
https://community.jmp.com/t5/Benelux-JMP-Users-Group/Workflow-Builder-or-the-quot-baby-steps-quot-into-Scripting/mp/739486/highlight/true#M7
#4:使用一点 JSL:在所有工作流步骤中,删除表名引用
// for workflow steps like
// Data Table("mytable") << command (...);
// just remove the data table and get:
command( ... )[不幸的是,有几个例外情况,这种方法将会失败]。
#4b:更改代码并使用变量作为数据表的引用
导入步骤:
// add "dt ="
dt = open( ...);
后续工作流程:
// replace:
// Data Table("mytable") << command (...)
// with
dt << command( ...)
我希望在 JMP 的未来版本中会有一个工作流生成器,可以自动防止用户陷入此陷阱,例如
- 一旦创建了数据表,Worklow Builder 就会要求一个合适的变量名来引用数据表。
- 工作流生成器中的一个按钮:
用表名替换数据表引用 -> 用变量替换数据表引用
根据选项 4b,愿望清单中有一篇帖子可以自动修复该问题:
允许 Action Recorder 使用简单变量名作为引用