我正在尝试创建一个对我的客户来说更加用户友好的对话框模型框。 我没有使用单选框或复选框,而是使用 col 列表框来使用户界面更像拟合模型中的对话框。 该脚本应该自定义图形和输出,以在从数据表 JSL 脚本为给定产品的 PQA 生成输出时节省用户时间。
附件是一个 JMP 文件,其中包含一个带有基本列名称的玩具数据集,以及我在本文中引用的附加 JSL 脚本。
我有一个变量,用户可以将 col 输入到名为 set_resultcol 的变量中。 set_resultcol 的这个值可以与任何数据集列标题一起使用(即数据集可以将“结果”或“结果”或“结果(N)”或“值”作为将在其上建模的连续数值变量的标题y 轴作为因变量。
但是,我遇到了一些问题,即 set_resultcol 值的表达式未在我一直使用的 col 列表框选项中的 y 轴脚本的重命名中表达,以使用户界面更加用户友好,即使我有尝试从 col 列表框结果列表中获取值,例如 {“Result”}[1]。 我对模态窗口中的 col 列表框的概念还很陌生,所以我希望我能在我的 JSL 代码上得到一些更有经验的人的帮助,以帮助我确定可以做什么。
当我使用单选框时,set_resultcol 的结果值是一个字符串,可以在下面的 JSL 中引用该字符串,以将 y 轴重命名为 PQA(质量属性):

Names Default To Here( 1 );
dt = Current Data Table();
//part 1. ask user for column names in a new window nw1
//possible Group column name (should be character)
character_col_names = dt << Get Column names(character, String);
//possible result column name (should be numeric)
numeric_col_names = dt << Get Column names(Numeric, String);
nw1 = New Window("Set group by variable an",
<<MODAL></MODAL>结果图的 y 轴标签“Result”(例如)将重命名为“A”(为了简单起见,PQA 称为“A”)。

我使用 col 列表框创建了以下模式对话框,通过拖放功能使模式对话框更加用户友好和美观,而不是一次显示所有列。 在该窗口下方,我有相应的 JSL 代码,但我在处理这些 col 列表框时遇到了问题。

Names Default To Here( 1 );
dt = Current Data Table();
nw1 = New Window("Set variables for stability model",
<<MODAL></MODAL>然而,结果图如下,y 轴名称,在此数据表“结果”中,y 轴为 PQA“A”的“A”:

我知道 col 列表框正在生成变量列表,因为 JSL 脚本中的选项告诉我:
//is this set_resultcol a list? if so, show the contents.
Show(is list(set_resultcol)); // which gives 1 or “true” as shown in the log
Show(set_resultcol[1]); //which gives “Result” as shown in the log

这个 JSL 脚本有什么问题不允许在数据集中引用它? 我可以做什么来解决这个问题?
我能找到的与此问题相关的唯一文档是“JMP 15 脚本指南”pdf 第 524、527-529 页中的 col 列表框以及该手册中的列表部分。 我已经尝试过这些例子,但它们没有告诉我任何我不知道的事情。
如果可以避免的话,我不会使用 Dispatch 来修改报告。 我宁愿获取参考文献,然后根据这些参考文献修改报告。 下面的脚本可能会给您一些想法:
Names Default To Here(1);
dt = Open("$DOWNLOADS/Col List Box Y-axis labeling issue 7_11_2022.jmp");
nw1 = New Window("Set variables for stability model",
<<MODAL>
["LSL" => 0.3, "USL" => 0.9],
"B" =>
["LSL" => 0.5, "USL" => 2],
"C" =>
["LSL" => 4, "USL" => 6]
];
//Response Result outline box references
response_ob_refs = fm << XPath("//OutlineBox[contains(text(), 'Response Result PQA')]");
For Each({ror_list}, response_ob_refs,
ror = ror_list[1];
cur_group = Word(2, ror << get title, "=");
cur_lsl = aa_settings[cur_group]["LSL"];
cur_usl = aa_settings[cur_group]["USL"];
rp_ref = (ror << XPath("//OutlineBox[contains(text(), 'Regression Plot')]"))[1];
// Y-axis
y_axis = rp_ref[Axis Box(1)];
Eval(EvalExpr(
y_axis << Add Ref Line(Expr(cur_lsl), "Solid", Dark Red, Expr(EvalInsert("LSL (^cur_lsl^)")), 1);
y_axis << Add Ref Line(Expr(cur_usl), "Solid", Dark Red, Expr(EvalInsert("USL (^cur_usl^)")), 1);
));
y_axis << RemoveAxisLabel("Result");
y_axis << AddAxisLabel(cur_group);
y_axis << Min(cur_lsl);
y_axis << Max(cur_usl);
f_box = rp_ref[FrameBox(1)];
f_box << Frame Size(600, 400);
// Legend
f_box << Row Legend(
Eval(set_groupby),
Color(1),
Color Theme("JMP Default"),
Marker(0),
Marker Theme(""),
Continuous Scale(0),
Reverse Scale(0),
Excluded Rows(0)
);
);
</MODAL>

如果您出于某种原因确实想使用 Dispatch 那么我建议您查看一下使用 Eval Insert、Eval Expr、Parse 和 Substitute 将一个表达式插入另一个表达式