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 가져오기 마법사를 사용하여 생성하는 경우와 둘 다 열린 데이터 테이블을 가리킬 때 기존 데이터 테이블에서 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을 통한 가상 조인이 작동하지 않습니다.엄청난!
~에 Zip으로 역지오코딩 Lat-Lon 파일도 저장해야 했습니다. 디스크 파일 이름 대신 핸들을 사용할 수 있지만 디스크 파일이 있어야 합니다.
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) Set Property( "Link Reference", Reference table()은 회신에서 언급한 것처럼 파일 이름 참조여야 합니다.
이유는 모르겠지만 가져가겠습니다...
Re: JSL을 통한 가상 조인이 작동하지 않습니다.다음은 작동하는 예입니다.
JMP 샘플 테이블에서 두 테이블을 쿼리하고 나중에 조인합니다.
다른 사람들이 언급했듯이 문제 해결을 위한 몇 가지 문제가 있을 수 있습니다. 아마도 로그에서 무언가를 찾을 수 있을 것입니다.
- 참조 테이블을 저장해야 합니다.
- 참조된 테이블에 중복이 없어야 합니다.
- 참조(테이블 이름, 열 이름)가 정확합니까?
- ...
양쪽의 키는 창백하지 않고 색상으로 포화되어야 합니다. 창백함은 작동하지 않음을 의미합니다.
나도 그것에 약간의 문제가 있었지만 작동합니다.
// 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에 대한 열 속성의 결과 정의를 성공적으로 대화식으로 정의했을 때와 성공적으로 스크립팅했을 때를 비교했습니까?
참조 테이블 인수가 변수가 아닌 리터럴 인수를 기대하는 것이 우려됩니다. 에 대한 이 도움말 항목을 참조하십시오. 가상 조인 스크립팅 .