透過對話方塊選擇表格時 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”))
)
)
)
)<<運行;>