대화 상자를 통해 테이블을 선택할 때 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 포맷 추가
자동화 및 스크립팅Re: 대화 상자를 통해 테이블을 선택할 때 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);
Re: 대화 상자를 통해 테이블을 선택할 때 JMP 쿼리 빌더 경로 이름 문제감사합니다. 그 개념을 사용해서 문제를 해결했습니다.
다른 사람이 사용할 경우를 대비해 아래에 최종 코드를 첨부합니다.
<
// 1단계: 모든 오픈 데이터 테이블의 이름 가져오기
dt이름 = {};
t = 1, t <= N Table(), t++,
dtNames, Data Table(t) << Get Name에 삽입
);
// 2단계: 두 개의 테이블을 선택하는 대화 상자
t1name = "";
t2name = "";
nw2 = 새 창( "데이터 테이블 선택기 - 이 JMP 세션에서는 두 데이터 테이블이 모두 열려 있어야 합니다",
< V 목록 상자(
텍스트 상자( "기본 테이블 선택(TS 열이 있는 MES 추출 테이블):")
lb1 = 목록 상자(dtNames, 너비(600), nlines(8), 최대 항목(1)),
스페이서 박스(크기( 10, 10 ) ),
텍스트 상자( "보조 테이블 선택(열로 시작/종료 시간이 있는 데이터 테이블):")
lb2 = 목록 상자(dtNames, 너비(600), nlines(8), 최대 항목(1)),
스페이서 박스(크기( 10, 10 ) ),
H 목록 상자(
버튼 상자( "확인",
t1sel = lb1 << 선택됨;
t2sel = lb2 << 선택됨;
N개의 항목(t1sel) == 0 | N개의 항목(t2sel) == 0인 경우,
새 창( "오류", < 멈추다();
);
t1name = t1sel[1];
t2name = t2sel[1];
만약(t1name == t2name,
새 창( "오류", < 멈추다();
);
),
버튼 상자( "취소", nw2 << 창 닫기)
)
)
);
// 이제 t1name과 t2name은 선택된 테이블 이름을 갖는 문자열입니다.
// 예: SQL 쿼리에서 사용(두 테이블이 모두 열려 있다고 가정)
dtJoin = 새로운 SQL 쿼리(
버전(130),
연결("JMP"),
JMP 테이블(연관 배열({t1name, 데이터 테이블(t1name), t2name, 데이터 테이블(t2name)})),
쿼리 이름( t1name || " join " || t2name ),
< 에서(
테이블(t1name, 별칭("t1")),
테이블(
t2name,
별칭( "t2" ),
가입하다(
유형(왼쪽 바깥쪽),
LE( Column( "TS", "t1" ), Column( "END TIME", "t2") ) &
GE(열( "TS", "t1" ), 열( "시작 시간", "t2") )
)
)
)
) << 실행;>