JSL을 통한 가상 참여가 작동하지 않습니다.친애하는 JMP 커뮤니티 여러분,
가상 조인을 위해 JSL을 통해 두 개의 데이터 테이블을 연결합니다.
dt1:Link_Column<< Set Property( "Link ID", 1 );
dt2:Link_Column << Set Property( "Link Reference", Reference table(dt1 ));
테이블과 열 정보 모두에 키 기호가 표시되어 연결이 작동하는 것처럼 보이지만 가상으로 조인된 열이 조인된 데이터 테이블에 표시되지 않습니다.
JMP에서 동일한 작업을 직접 클릭하면 작동하고 결합된 열이 나타납니다.
가상으로 가입한 후 강제로 업데이트하는 방법이 있나요?
데이터 혼합 및 정리대량 맞춤화품질 및 프로세스 엔지니어링Re: JSL을 통한 가상 참여가 작동하지 않습니다.Jmp 17로 수정된 것 같습니다.
Re: JSL을 통한 가상 참여가 작동하지 않습니다.감사합니다 @펠리 그리고 @호기 이에 대한 조사를 위해.
여기서 핵심 질문은 다음과 같습니다.
단일 스크립트를 통해 저장되지 않은 두 데이터 테이블 간의 작업 링크를 만드는 방법은 무엇입니까?
실제로 두 개의 서로 다른 스크립트를 사용하면 가능하지만 단일 스크립트로는 가능하지 않습니다. https://community.jmp.com/t5/Discussions/Setting-link-ID-in-jsl-seems-not-to-work-what-is-wrong/mp/598505
이 스레드의 주요 내용은 "그들은 저장되어야 합니다"입니다.
후속 질문:
단일 스크립트를 통하지 않고 클릭을 통해 저장되지 않은 테이블에 연결할 수 있는 이유는 무엇입니까?
이 문제(내 생각에는 버그인 것 같습니다)가 해결되었으며 테이블 어딘가에 있습니까? 나에게 있어서 초기 질문은 @펠리 해결되지 않았습니다.
Re: JSL을 통한 가상 참여가 작동하지 않습니다.흥미로운 질문입니다.
링크에 대한 고유한 파일 이름을 얻으려면 "그냥" 테이블을 저장해야 합니까?
대신 (전체 경로 없이) 데이터 테이블 이름을 사용할 수 있습니까?
이 예에서는 참조 테이블(dt2)을 dt1에 올바르게 연결하려면 먼저 저장해야 합니다.
- dt3의 경우 저장하지 않아도 괜찮습니다.
테이블을 저장하지 않고 참조 테이블에서 링크 ID(JSL 스크립트에 의해 생성됨)를 제거하고 수동으로 다시 추가하는 것이 도움이 될 때도 있었습니다.
jmp 동작이 이대로 유지된다면 "저장되지 않은 데이터 테이블에 대한 링크가 작동하지 않습니다"와 같은 경고 메시지를 표시하는 것이 가능합니까?
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Data table summary
// → Data Table( "Big Class By (sex)" )
dt 2 = Data Table( "Big Class" ) << Summary(
Group( :sex ),
Median( :height ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 )
);
// Change column link ID: sex
dt2:sex << Set Property( "Link ID", 1 );
// uncomment this line to make the virtual link work table d1
//dt2 << save( "$desktop/summaryTable.jmp" );
// Change column link reference: sex
dt1:sex << Set Property(
"Link Reference",
Reference Table( dt2 )
);
dt3 = Eval(dt1 << getScript);
dt3:sex << Set Property(
"Link Reference",
Reference Table( dt2 )
);
Re: JSL을 통한 가상 참여가 작동하지 않습니다.이제 약간 혼란스럽습니다. JSL에서 가상 조인이 작동하지 않는 가장 큰 문제는 가상 조인이 저장되지 않는다는 것입니다.
이에 대한 기술적인 이유가 있나요? - 직접 연결하면 저장되지 않은 데이터 테이블에 대해 가상 연결이 작동하지만 JSL에서는 작동하지 않습니까? 둘 다 다른 일을 하고 있나요?
내 dt1은 데이터를 가져오고 조작하여 생성되었습니다. 예를 들어 json 가져오기 마법사를 사용하여 변수 dt1을 생성하는 경우와 둘 다 열려 있는 데이터 테이블을 가리킬 때 기존 데이터 테이블에서 Open()을 사용하는 경우 변수 dt1이 다른 이유는 무엇입니까? JMP에서는?
Re: JSL을 통한 가상 참여가 작동하지 않습니다.dt1 = Open( "$SAMPLE_DATA\Pizza Profiles.jmp" );
dt2 = Open( "$SAMPLE_DATA\Pizza Responses.jmp" );
dt1:ID << Set Property( "Link ID", 1 );
dt2:Choice << Set Property( "Link Reference", Reference Table( dt1 ) );
dt2:Choice1 << Set Property( "Link Reference", Reference Table( dt1 ) );
dt2:Choice2 << Set Property( "Link Reference", Reference Table( dt1 ) );
dist1 = dt2 << Distribution(
Nominal Distribution( Column( Referenced Column( "Cheese[Choice]", Reference( Column( :Choice ), Reference( Column( :Cheese ) ) ) ) ) ),
Nominal Distribution( Column( Referenced Column( "Cheese[Choice1]", Reference( Column( :Choice1 ), Reference( Column( :Cheese ) ) ) ) ) ),
Nominal Distribution( Column( Referenced Column( "Cheese[Choice2]", Reference( Column( :Choice2 ), Reference( Column( :Cheese ) ) ) ) ) )
);
다음은 작동하는 예입니다. 이는 dt1, dt2 스크립팅 개념을 사용한 샘플 데이터 테이블입니다. 항상 작동하는지 확인하는 좋은 방법은 위에 제안된 작업을 수행하고 링크를 만들기 전에 항상 테이블을 저장하는 것입니다. 이 예에서는 샘플이므로 여기에 저장이 없습니다.
Re: JSL을 통한 가상 참여가 작동하지 않습니다.엄청난!
~에 역지오코드 위도-경도를 우편번호로 역방향 파일도 저장해야 했습니다. 디스크 파일 이름 대신 핸들을 사용할 수 있지만 디스크 파일이 존재해야 합니다.
1 blobdbf = za << read( "cb_2019_us_zcta510_500k.dbf", Format( blob ) );
2 tempfile = Save Text File( "$temp/cb_2019_us_zcta510_500k.dbf", blobdbf );
3 zipcodeNS:dtdbf = Open( tempfile, Add to Recent Files( 0 ), invisible );
4 zipcodeNS:dtdbf << save( "$desktop/cb_2019_us_zcta510_500kdbf.jmp" );
5 , //
6 zipcodeNS:dtshp = Open( "$desktop/cb_2019_us_zcta510_500kshp.jmp", Add to Recent Files( 0 ), invisible );
7 zipcodeNS:dtdbf = Open( "$desktop/cb_2019_us_zcta510_500kdbf.jmp", Add to Recent Files( 0 ), invisible );
8 );
9 zipcodeNS:dtdbf:shape << Set Property( "Link ID", 1 );
10 zipcodeNS:dtshp:shape << Set Property( "Link Reference", Reference Table( zipcodeNS:dtdbf ) );
3행에서는 JMP가 아닌 파일을 테이블로 엽니다.
4행은 테이블을 JMP 파일로 저장하거나 7행은 디스크에서 다시 열립니다.
10행에서는 $desktop 이름을 명시적으로 사용하지 않고 dtdbf 핸들에서 링크 참조를 생성합니다.
링크가 있는 상태에서 dtshp 파일을 다시 저장할 수 있지만 저는 그렇게 하지 않았습니다. 파일이 이 스크립트 외부에서 사용된 경우 도움이 될 것입니다.
Re: JSL을 통한 가상 참여가 작동하지 않습니다.비밀은 a) 데이터 테이블을 모두 저장하고 b) 속성 설정("링크 참조", 참조 테이블()은 응답에서 언급한 대로 파일 이름 참조여야 한다는 것입니다.
이유는 모르겠지만 받아보겠습니다...
Re: JSL을 통한 가상 참여가 작동하지 않습니다.다음은 작동하는 예입니다.
JMP 샘플 테이블에서 두 테이블을 쿼리하고 나중에 조인합니다.
다른 사람들이 언급했듯이 문제 해결에 몇 가지 문제가 있을 수 있습니다. 아마도 로그에서 내용을 찾을 수 있을 것입니다.
- 참조된 테이블을 저장해야 합니다.
- 참조된 테이블에는 중복이 없어야 합니다.
- 참조(테이블 이름, 열 이름)가 정확합니까?
- ...
양쪽의 키는 옅은 색상이 아닌 색상으로 포화되어야 합니다. Pale은 작동하지 않음을 의미합니다.
나도 약간의 문제가 있었지만 작동합니다.
// User Dialog for query from datatable (database)
/***************************************************************************/
// Initialization
/***************************************************************************/
Names Default To Here( 1 );
Clear Log();
// Query 1st table with filter conditions
dt_filter = New SQL Query(
Version( 130 ),
Connection( "JMP" ),
JMP Tables( ["Big Class" => "\C:\Program Files\SAS\JMPPRO\15\Samples\Data\Big Class.jmp"] ),
QueryName( "filter" ),
CustomSQL( "SELECT distinct t1.name, t1.age, t1.sex, t1.weight, t1.height FROM \!"Big Class\!" t1 where t1.sex = 'M' and t1.age<=13;" )
) << Run;
Summarize( name_lst = by( dt_filter:name ) );
dt_filter:name << set property("Link ID", 1);
dt_filter << save("$TEMP\dt_filter.jmp");
// (2) assign custom SQL,
Assign(
custom_sql,
"\[
SELECT t1.picture, t1.name, t1."sibling ages",
t1.sports, t1."countries visited", t1."family cars", t1."reported illnesses",
t1."age vector"
FROM "Big Class Families" t1
where t1.name in __NAMELIST__
;
]\"
);
// (3) Put namelist into custom_sql
Substitute Into( custom_sql, "__NAMELIST__", Substitute( Char( name_lst ), "{", "(", "}", ")" ) );
// (4) execute Query
dt_result = New SQL Query( Version( 130 ), Connection( "JMP" ),
, JMP Tables( ["Big Class Families" => "\C:\Program Files\SAS\JMPPRO\15\Samples\Data\Big Class Families.jmp"] ),
QueryName( "dt_result" ), CustomSQL( custom_sql ) )
<< Run;
dt_result << save("$TEMP\dt_result.jmp");
// (5) Connect both tables by symbolic link
dt_result:name << set property("Link Reference", Reference Table("$TEMP\dt_filter.jmp"));
Re: JSL을 통한 가상 참여가 작동하지 않습니다.또한 조인하기 전에 테이블을 저장하는 것이 도움이 될 수 있습니다.
Re: JSL을 통한 가상 참여가 작동하지 않습니다.빠른 응답을 위해 추측만 하고 있지만 dt2:LinkColumn에 대한 열 속성의 결과 정의를 성공적으로 대화형으로 정의했을 때와 스크립팅에 실패했을 때를 비교해 보셨나요?
참조 테이블 인수에 변수가 아닌 리터럴 인수가 필요하다는 점이 걱정됩니다. 다음 도움말 항목을 참조하세요. 가상 조인 스크립팅 .