通过对话框选择表时 JMP 查询生成器路径名问题我正在使用对话框来选择主表和辅助表,但是当 JMP 查询生成器运行时,它无法正确替换文件路径名,即使我下次在脚本需要引用表时手动解决此问题,它仍然会失败
错误:名称未解析:访问或评估“PRIMARYNAME”时出现 PRIMARYNAME,PRIMARYNAME/*******/
// Step 1: Get names of all open data tables
dtNames = {};
For(t = 1, t <= N Table(), t++,
Insert Into(dtNames, Data Table(t) << Get Name)
);
// Step 2: Dialog to select two tables
nw2 = New Window("Data Table Selector - Note both data tables must be open in this JMP session",
<
<MODAL>
"PRIMARYPATH", "SECONDARYNAME" => "SECONDARYPATH"]), QueryName(PRIMARYNAME || " join " || SECONDARYNAME), Select(__SELECTALLCOLUMNS__), From( Table(PRIMARYNAME, Alias("t1")), Table( SECONDARYNAME, Alias("t2"), Join( Type(Left Outer), LE(Column("TS", "t1"), Column("END TIME", "t2")) & GE(Column("TS", "t1"), Column("START TIME", "t2")) ) ) ) ) << Modify ); // Step 7: Substitute table names, paths, and all columns sqlExpr = Substitute(sqlExpr, "PRIMARYNAME", primaryTableName[1], "PRIMARYPATH", primaryPath, "SECONDARYNAME", secondaryTableName[1], "SECONDARYPATH", secondaryPath, Expr(__SELECTALLCOLUMNS__), Expr(selectExprList) ); // Debug: Show the final SQL Query code (optional, for troubleshooting) Write(Expr(sqlExpr)); // Step 8: Run the query Eval(sqlExpr);
</MODAL>
编辑(jthi):添加 JSL 格式
自动化和脚本回复:通过对话框选择表时 JMP 查询生成器路径名问题我将在新 SQL 查询之外构建表名 + 链接关联数组,并评估该
Names Default To Here(1);
t1name = "Big Class";
t1path = "$SAMPLE_DATA/Big Class.jmp";
t2path = "$SAMPLE_DATA/Big Class Families.jmp";
t2name = "Big Class Families";
aa = Associative Array();
aa[t1name] = t1path;
aa[t2name] = t2path;
sqlExpr = Expr(
New SQL Query(
Version(130),
Connection("JMP"),
JMP Tables(_aa_),
QueryName(_t1name_ || " join " || _t2name_),
Select,
From(
Table(_t1name_, Alias("t1")),
Table(
_t2name_,
Alias("t2"),
Join(Type(Left Outer), EQ(Column("name", "t1"), Column("name", "t2")))
)
)
) << Modify
);
q = Substitute(Name Expr(sqlExpr),
Expr(_aa_), aa,
Expr(_t1name_), t1name,
Expr(_t2name_), t2name,
Expr(_t1path_), t1path,
Expr(_t2path_), t2path,
);
Eval(q);
回复:通过对话框选择表时 JMP 查询生成器路径名问题谢谢,我使用了这个概念并解决了这个问题。
以下是最终代码,供其他人使用
<
// 步骤1:获取所有打开的数据表的名称
dt名称 = {};
对于(t = 1,t <= N表(),t ++,
插入(dtNames,数据表(t)<<获取名称)
(此处似有缺失,请提供更正后的文本)。
// 步骤 2:选择两个表的对话框
t1名称 = "";
t2名称 = "";
nw2 = New Window(“数据表选择器 - 注意,两个数据表都必须在此 JMP 会话中打开”,
< V 列表框(
文本框(“选择主表(带有 TS 列的 MES 提取表):”),
lb1 = 列表框(dtNames,width(600),nlines(8),MaxItems(1)),
间隔盒(尺寸(10, 10)),
文本框(“选择辅助表(列中包含开始/结束时间的数据表):”),
lb2 = 列表框(dtNames,width(600),nlines(8),MaxItems(1)),
间隔盒(尺寸(10, 10)),
H 列表框(
按钮框(“确定”,
t1sel = lb1 << 已选择;
t2sel = lb2 << 已选择;
如果(N 项(t1sel)== 0 | N 项(t2sel)== 0,
新窗口(“错误”,< 停止();
(此处似有缺失,请提供更正后的文本)。
t1name = t1sel[1];
t2name = t2sel[1];
如果(t1名称==t2名称,
新窗口(“错误”,< 停止();
(此处似有缺失,请提供更正后的文本)。
),
按钮框(“取消”,nw2 << 关闭窗口)
)
)
(此处似有缺失,请提供更正后的文本)。
// 现在 t1name 和 t2name 是带有所选表名的字符串
// 示例:在 SQL 查询中使用(假设两个表都打开)
dtJoin = 新的 SQL 查询(
版本(130),
连接(“JMP”),
JMP 表(关联数组({t1name,数据表(t1name),t2name,数据表(t2name)})),
查询名称( t1name || " join " || t2name ),
< 从(
表(t1名称,别名("t1")),
桌子(
t2名称,
别名( "t2" ),
加入(
类型(左外),
LE( 列( "TS", "t1" ), 列( "结束时间", "t2" ) ) &
GE(列( “TS”, “t1”),列( “开始时间”, “t2”))
)
)
)
)<<运行;>