스크립트에서 함수를 "업데이트"하는 해결 방법JMP 커뮤니티 여러분, 안녕하세요.
다른 데이터 테이블에 종속된 데이터 테이블이 있습니다. 업데이트 기능으로 업데이트도 해봤는데 아무 것도 안되는 것 같습니다. 대신, 이 스크립트가 수행하는 작업은 현재 테이블을 업데이트하는 대신 선택한 하위 집합으로 새 데이터 테이블 창을 여는 것입니다. 현재 열려 있는 데이터 테이블 "dt"를 "dtU"의 하위 집합으로 업데이트하려면 어떻게 해야 합니까? 감사해요!
// Open Sample Data
dt = Open("KrF CDU Data table.jmp");
dtU = Open( "Exposure_Summary_Data.jmp" );
// Making subset of data
dtU << Clear Column Selection();
dtU << Select Where(contains("KrF", :Type));
Column(dtU,"F23")<< Set Selected(1);
dtU << Invert Column Selection;
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1,:Wafer Code));
// Updating with subset
dt << Update(With(dt1),By Matching Columns(name==name),);Re: 스크립트에서 함수를 "업데이트"하는 해결 방법Match에서는 이를 고유하게 만드는 많은 열을 지정해야 합니다. 따라서 여러 열을 기준으로 일치해야 할 수도 있습니다. 예: 실험 이름 == :실험 이름, :Stack==:Stack, :Wafer Code==:Wafer Code, :Metrology Recipe==:Metrology.
이것은 단지 제안일 뿐입니다.
각 행을 고유하게 만드는 열을 선택한 다음 그에 따라 일치시켜야 합니다.
Re: 스크립트에서 함수를 "업데이트"하는 해결 방법그래서 나는 당신이 말한 대로 하고 테이블을 수동으로 업데이트했습니다. 이것이 관련 코드입니다.
Data Table( "KrF CDU data table 1" ) << Update(
With( Data Table( "Subset of Exposure_Summary_Data" ) ),
Match Columns( :Wafer Code = :Wafer Code )
)
그래서 이것을 내 코드에 직접 적용했습니다.
dt << Update( With( dt1 ), Match Columns( dt:Wafer Code= dt1:Wafer code ) );
그러나 모든 행을 업데이트하는 대신 아래 그림과 같이 첫 번째 행만 업데이트하고 모든 행에 대해 해당 행을 복사합니다. 모든 행에 대해 반복해야 합니까?
Re: 스크립트에서 함수를 "업데이트"하는 해결 방법이 코드 줄에서 "name"은 열 이름을 나타냅니다. 모든 열 이름을 표시하지는 않지만 둘 다에 "name"이라는 열이 확실히 있습니까?
gdt <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Update</SPAN><SPAN class="token punctuation">(</SPAN> With<SPAN class="token punctuation">(</SPAN> dt1 <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> Match Columns<SPAN class="token punctuation">(</SPAN> dt<SPAN class="token punctuation">:</SPAN>name <SPAN class="token operator">==</SPAN> dt1<SPAN class="token punctuation">:</SPAN>name <SPAN class="token punctuation">)</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN> <SPAN class="token comment">//This is still not runnin</SPAN>
테이블->업데이트 메뉴에서 이 작업을 수동으로 수행해 보십시오.원하는 출력을 얻었으면 왼쪽 상단에 있는 소스 스크립트를 살펴보고(소스를 마우스 오른쪽 버튼으로 클릭하고 스크립트를 보려면 클릭) 해당 코드를 검사하여 JSL에 원하는 것을 정확하게 가져오는 데 도움을 받으세요.
Re: 스크립트에서 함수를 "업데이트"하는 해결 방법그래서 일치하는 열에 대한 모든 데이터 유형을 검사했는데, 순서와 데이터 유형이 동일했습니다. 어떤 열에도 기능이 없습니다. 데이터 세트를 이미지와 현재 코드로 첨부했습니다. 나는 완전히 길을 잃었으므로 어떤 도움이라도 대단히 감사하겠습니다. 다들 감사 해요!
//Clean up
Clear Log(); Clear Globals(); //Close All(DataTables,"No Save");
// Open Sample Data
dtU = Open( "Exposure_Summary_Data.jmp" );
// Making subset of data
dtU << Clear Column Selection();
dtU << Select Where(contains(:Type,"KrF"));
Column(dtU,"F23")<< Set Selected(1);
dtU << Invert Column Selection;
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1));
// Opening other data table and updating
dt = Open("KrF CDU Data table 1.jmp");
dt << Update( With( dt1 ), Match Columns( dt:name == dt1:name ) ); //This is still not running
dt << Save( "KrF CDU Data table 1.jmp" );
Re: 스크립트에서 함수를 "업데이트"하는 해결 방법우리는 테이블을 볼 수 없기 때문에 이것은 단지 시도할 사항에 대한 추측일 뿐입니다.
- 열 이름이 둘 다에 있는지 확인하십시오. 둘 다 동일한 데이터 유형(예: 문자)과 모델링 유형(예: 명목)을 가지고 있습니다.
- :name==:name 또는 dt:name == dt1:name을 사용하세요.
- dt의 열에 기능이 있는지 확인하십시오. 특히 업데이트할 열에 기능이 있는 경우 더욱 그렇습니다. 업데이트하기 전에 해당 기능을 제거해야 할 것 같습니다.
그것은 약간의 문제 해결 아이디어입니다.
Re: 스크립트에서 함수를 "업데이트"하는 해결 방법여기서 수행하려는 작업을 내가 올바르게 해석하고 있는지 확실하지 않지만 여기에 몇 가지 샘플 데이터를 사용한 해석이 있습니다.stop() 명령 뒤에 name이라는 열을 추가해야 합니다.이것은 나에게 효과적이었습니다.
수정: 제가 뭔가 잘못 이해한 것 같습니다. ... 요약과 같이 종속적이기 때문에 잠긴 테이블을 업데이트하려고 한다는 뜻입니다. JMP는 새 테이블을 강제로 생성할 수 있습니다. 나는 그것에 대해 확실하지 않다.
Clear Log();
Clear Globals();
//Close All( DataTables, "No Save" );
dt = Open( "$SAMPLE_DATA/Students.jmp" );
dtU = Open( "$SAMPLE_DATA/Big Class.jmp" );
dtU << Clear Column Selection();
dtU << Select Where( :age == 12 );
Column( dtU, "age" ) << Set Selected( 1 );
dtU << Invert Column Selection;
dt1 = dtU << Subset( Selected Rows( 1 ), Selected Columns( 1 ) );
stop();
// run up to here, create an extra column called name in the dt (students.jmp) with some names from dtU (big class), then run next line
dt << Update( With( dt1 ), By Matching Columns( name == name ) );
Re: 스크립트에서 함수를 "업데이트"하는 해결 방법변경을 시도했지만 KrF 데이터 테이블(dt)을 업데이트하는 대신 새 하위 집합만 열 뿐이고 테이블 dt는 업데이트하지 않습니다. 둘 다 odbc 서버에 연결해야 합니까? 두 테이블 모두 아직 열려 있으므로 JMP에서는 확실히 두 테이블을 모두 볼 수 있습니다.Re: 스크립트에서 함수를 "업데이트"하는 해결 방법바꿔보세요
dt << Update( With( dt1 ), By Matching Columns( name == name ) );
에게
dt << Update( With( dt1 ), Match Columns( name== name ) );
내 스크립트의 주석 처리된 줄에 따르면 이전에 참여하려는 시도는 이전 형식을 사용했으며 업데이트로 변경했을 때 작동하지 않았습니다. 구문이 다릅니다.
Re: 스크립트에서 함수를 "업데이트"하는 해결 방법앗, 그 줄은 다음과 같이 쓰려고 했어요
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1));
그러나 여전히 dt("KrF CDU Data table.jmp")는 업데이트되지 않습니다. 노출 테이블(dtU)의 데이터로 KrF 데이터 테이블을 업데이트하려고 합니다.
로그는 다음과 같습니다.
Name Unresolved: name in access or evaluation of 'name' , name/*###*/
In the following script, error marked by /*###*/
Clear Log();
Clear Globals();
Close All( DataTables, "No Save" );
dt = Open( "KrF CDU Data table.jmp" );
dtU = Open( "Exposure_Summary_Data.jmp" );
dtU << Clear Column Selection();
dtU << Select Where( Contains( :Type, "KrF" ) );
Column( dtU, "F23" ) << Set Selected( 1 );
dtU << Invert Column Selection;
dt1 = dtU << Subset( Selected Rows( 1 ), Selected Columns( 1 ) );
dt << Update( With( dt1 ), By Matching Columns( name/*###*/ == name ) );
그렇다면 업데이트 라인에 일종의 오류가 있는 걸까요? 확실하지는 않지만 로그에 보고된 내용은 다음과 같습니다.
Re: 스크립트에서 함수를 "업데이트"하는 해결 방법JSL 중 일부가 잘못되었거나 이상해 보입니다.
dtU << Select Where(contains("KrF", :Type)); 그래야지
dtU << Select Where(contains( :Type, "KrF:));
또한 이 두 번째 줄은 이상하게 보입니다. Selected Columns(1,:Wafer Code) 및
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1,:Wafer Code));
어떤 테이블이 종속되어 있는지 언급하지 않았습니다. 기본적으로 하위 집합 테이블은 종속되지 않습니다.
로그 파일은 무엇을 보고합니까?