JMP 스크립트에서 반복 조인/업데이트를 위한 모범 사례안녕하세요 여러분,
I’m running a JSL script that performs Update/Join operations between calculation tables and filtered data tables. I noticed the following behavior:
-
스크립트가 여러 번 실행되면 JMP는 이름 충돌을 방지하기 위해 중복된 열의 이름을 자동으로 바꿉니다. 예:
<SPAN><SPAN class="hljs-title class_">배치</SPAN> <SPAN class="hljs-title class_">번호</SPAN> - 테이블 <SPAN class="hljs-number">1</SPAN> 의 <SPAN class="hljs-title class_">배치</SPAN> <SPAN class="hljs-title class_">번호</SPAN> , 테이블 <SPAN class="hljs-number">2</SPAN> <SPAN class="hljs-keyword">의</SPAN> <SPAN class="hljs-title class_">배치</SPAN> <SPAN class="hljs-title class_">번호</SPAN></SPAN>
-
패널에서 테이블을 닫더라도 변수(열 객체)는 여전히 메모리에 존재하므로 스크립트를 다시 실행하면 중복 열이 추가로 생성됩니다.
-
현재 제가 사용하는 해결 방법은 중복된 열을 방지하기 위해 스크립트를 실행하기 전에 JMP를 종료하고 다시 시작하는 것 입니다.
커뮤니티에 대한 질문:
-
Are there best practices for repeated Update or Join operations that avoid generating duplicate columns?
-
스크립트 실행 후 테이블/변수를 "정리"하여 후속 실행 시 중복이 생성되지 않도록 하는 권장 방법이 있습니까?
-
추가 사본을 생성하지 않고 안전하게 열의 이름을 바꾸거나 덮어쓸 수 있는 함수나 JSL 패턴이 있나요?
어떤 제안이나 전략이라도 감사히 받겠습니다!
또한 동적으로 처리하기 위해 이 코드를 시도했지만 작동하지 않았습니다.
RenameColumn = Function({dt, oldNamePattern, newName},
colList = dt << Get Column Names; // returns a column list object
n = N Items(colList); // number of columns
For(i = 1, i <= n, i++,
c = colList[i]; // get the column name as string
If(Contains(c, oldNamePattern),
Column(dt, c) << Set Name(newName);
Break(); // optional: stop after first match
);
);
);
자동화 및 스크립팅Re: JMP 스크립트에서 반복 조인/업데이트를 위한 모범 사례해당 열은 어떻게 처리하시겠습니까? 이미 존재하는 열이라면 업데이트하거나 다시 추가하지 마세요. 커뮤니티에서 참고할 수 있는 데이터 예시 스크립트를 제공해 주시겠습니까?
Re: JMP 스크립트에서 반복 조인/업데이트를 위한 모범 사례저는 설명된 문제의 세부 사항을 보고 싶습니다.
특히 변수(열 객체)는 여전히 메모리에 존재하므로 스크립트를 다시 실행하면 중복 열이 추가로 생성됩니다.
이 외에도 다음 사항을 참고하시기 바랍니다.
Tables/Update의 경우 이러한 문제는 JMP19의 새로운 기능으로 인해 발생합니다.
업데이트할 테이블에 이미 열이 있는 경우 업데이트 플랫폼에서 새 열을 만들 수 있도록 허용합니다.
추가 기능은 멋지지만, 사람들은 부수적 효과를 고려하지 않았습니다!
부수적 효과:
JMP19에서는 더 이상 다음 모드에서 해당 기능을 사용할 수 없습니다.
"대상 테이블에 아직 없는 열을 추가해 주세요".
추가 세부 정보: 표/업데이트가 변경되었습니다!
스크립트는 다르게 동작하며 사용자는 다음과 같은 테이블을 얻게 됩니다.
(추가 열은 쓸모가 없습니다. 표를 오염시킵니다.)

개발자들이 이 문제를 이해하고 다음 릴리스에서 수정하기를 바랍니다.
가능한 해결책 : 2가지 모드
자동 테이블/업데이트
- 새로운 접근 방식을 사용하고 사용자가 열을 선택하는 경우(!!!!) 열 (접미사 포함)을 추가합니다.

- "전체" 모드에서는 이 트릭을 사용하지 마세요:

-> 다시 허용합니다
"대상 테이블에 아직 없는 열을 추가합니다"
(이전 버전의 JMP와 같음).
... 대안: 새로운 모드를 활성화/비활성화하기 위한 추가 설정.
이전 버전과의 호환성을 보장하려면 기본적으로 설정을 비활성화하세요.
Re: JMP 스크립트에서 반복 조인/업데이트를 위한 모범 사례중복된 데이터를 가져오지 않으려면 Join 함수에서 "Output Columns" 함수를 사용해야 할 것 같습니다. 같은 이름의 열을 가져오지 않는 한, "Output Columns"를 사용해도 열 이름에 "... of table 2" 접미사가 붙지 않습니다.
업데이트에서는 추가할 열을 선택하여 중복된 열 이름을 가져오지 않도록 합니다.
Re: JMP 스크립트에서 반복 조인/업데이트를 위한 모범 사례암호:
// Filtering Table A using RequiredBatches
FilteredA = TableA << Join(
With(RequiredBatches),
By Matching Columns(:Batch Number = :Batch Number),
Drop Multiples(0,0),
Include Matches(0,0),
Output Table("FilteredA"),
Invisible(0)
);
// Filtering Table B using RequiredBatches
FilteredB = TableB << Join(
With(RequiredBatches),
By Matching Columns(:Batch Number = :Batch Number),
Drop Multiples(0,0),
Include Nonmatches(0,0),
Output Table("FilteredB"),
Prevent Name Collision(1),
Invisible(0)
);
// Rename joined key columns
Column(FilteredA, "Batch Number of TableA") << Set Name("Batch Number");
Column(FilteredB, "Batch Number of TableB") << Set Name("Batch Number");
JMP를 다시 시작하지 않고 이 스크립트를 두 번째로 실행하면 다음과 같은 일이 발생합니다.
- JMP는 자동으로 테이블 이름에 접미사를 추가합니다.
FilteredA → FilteredA 2
FilteredB → FilteredB 2
스크립트 시작 부분에서 모든 테이블에 대해 사용해 보았는데, Mac에서는 아무 문제가 없어서 작동하는 듯하지만 Windows에서는 작동하지 않거나 동작 방식이 정말 혼란스럽습니다.
Try(TableA << Close(No Save));
스크립트(테이블이 표시되는 곳)에서 '이 항목을 제외하고 모두 닫기'를 사용하여 JMP 홈 창 목록을 닫았는데도 테이블은 닫히지 않고 변수는 메모리에 남아 있는 것 같습니다. 어떻게 처리해야 할지 모르겠습니다.
이것이 도움이 될까요? 아니면 코드를 재활용하지 않고도 할 수 있는 다른 방법이 있을까요?

Re: JMP 스크립트에서 반복 조인/업데이트를 위한 모범 사례어디에 있나요
Prevent Name Collision(1)
어디서 왔어?
JMP Join 플랫폼에서 대화형으로 조인을 수행하고, 미리 보기에서 원하는 대로 보이는지 확인한 후 실행하고 향상된 로그에서 스크립트를 복사합니다.
Re: JMP 스크립트에서 반복 조인/업데이트를 위한 모범 사례" 두 번째 테이블의 데이터로 기본 테이블 업데이트 "를 활성화해 보셨나요?

[새로운 열 없음 - 일치하는 행을 업데이트]
아니면 " 같은 이름의 열과 일치 "?

[첫 번째와 유사하지만 새로운 열이 추가되었습니다.]
Re: JMP 스크립트에서 반복 조인/업데이트를 위한 모범 사례yes, but this would be impractical for large list of columns</CODE></P>
</LINGO-BODY>
<LINGO-SUB id="lingo-sub-914649" slang="en-US" mode="CREATE" translate="no">Re: JMP 스크립트에서 반복 조인/업데이트를 위한 모범 사례</LINGO-SUB>
<LINGO-BODY id="lingo-body-914649" slang="en-US" mode="CREATE">
<BLOCKQUOTE>
<HR />
<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/63230" target="_blank">@zetaVagabond1</A> wrote:
<BR />
<P>yes, but this would be impractical for large list of columns<CODE class=" language-jsl">
이것은 .... 에 대한 답변인가요?