테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?모두들 안녕,
현재 데이터 테이블이 기본 테이블에 연결되어 있는지 여부(JSL 사용)를 확인하고 싶습니다.
"<< 테이블 변수 이름 가져오기"를 시도했지만 작동하지 않았습니다.
이 정보를 어떻게 얻을 수 있는지 아십니까?
도움을 주셔서 미리 감사드립니다!
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?Ian님의 매우 빠른 답변에 다시 한 번 감사드립니다!
나는 두 부분을 결합하고 몇 가지 테스트를 할 것이지만 그것이 일을 할 것이라고 믿습니다! 
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?테스트되지 않음(평소와 같이 . . . 
NamesDefaultToHere(1);
ClearLog();
// See if a table is a summary of another table
isSummary =
Function({dt}, {Default Local},
ts = dt << Get Table Script Names;
if (Contains(ts, "Source"),
ss = dt << getProperty("Source");
if (Head(Arg(ss, 2)) == Expr(Summary), 1, 0),
0
);
);
// Make a summary table
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = dt1 << Summary(Mean( :height ));
Print(isSummary(dt1));
Print(isSummary(dt2));Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?안녕 이안,
코드 주셔서 감사합니다! 내 문제를 해결하기 위해 그런 것을 사용할 수 있다고 생각합니다. 요약 테이블에 대한 컨트롤을 추가하기만 하면 됩니다. 아마도 그런 식으로 작동할 수 있습니다. 테이블의 "소스" 스크립트를 가져오고 "요약"이라는 단어가 포함되어 있는지 확인하려고 합니다.
몇 가지 테스트를 수행해야합니다 ...
도움을 주셔서 다시 한 번 감사드립니다.
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?이것을 테스트할 수 있습니다(앞서 언급한 줄을 따라).
NamesDefaultToHere(1);
// Function to determine if two tables are linked
rLinked = Function({dt1, dt2}, {Default Local},
dt1 << selectAllRows;
if(NRow(dt2 << getSelectedRows) > 0, linked = 1, linked = 0);
dt1 << clearSelect;
dt2 << clearSelect;
linked;
);
// Look at the open tables in the session and see which pairs are linked
linkedTables = Function({}, {Default Local},
nt = NTable();
linkMat = J(nt, nt, .);
tblNames = {};
for(t1=1, t1<=nt, t1++,
InsertInto(tblNames, DataTable(t1) << getName);
for(t2=t1+1, t2<=nt, t2++,
if(rLinked(DataTable(t1), DataTable(t2)), linkMat[t1, t2] = 1, linkMat[t1, t2] = 0);
);
);
EvalList({linkMat, tblNames});
);
// Make some active tables
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Unlinked subset
dt << selectRandomly(0.1);
dt2 = dt << Subset(LinkToOriginalDataTable( 0 ) );
dt2 << setName("Unlinked");
// Linked subset
dt << selectRandomly(0.1);
dt3 = dt << Subset(LinkToOriginalDataTable( 1 ) );
dt3 << setName("Linked");
// Get the 'link matrix'
linkedOrNot = linkedTables();
dt4 = AsTable(linkedOrNot[1], << setName("Linked Tables"), << columnNames(linkedOrNot[2]));
dt4 << NewColumn("Column", Character, Values(linkedOrNot[2]));
dt4 << moveSelectedColumns({"Column"}, ToFirst);
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?Ian님 추가 정보 감사합니다.
귀하의 말이 완전히 옳습니다. "올바른" 행동은 상황에 따라 다릅니다. 나는 하나가 다른 것보다 낫다고 말하는 것이 아니라 때때로 내 대본에 문제가 발생하는 이유를 설명하려고 했습니다.
또한 연결된 하위 집합을 만드는 것이 특정 행에 집중하는 가장 좋은 방법이 아닐 수도 있다는 데 동의합니다. 그러나 내 스크립트는 다른 사람이 사용할 수 있기 때문에 그들이 이전에 수행한 작업과 작업 중인 테이블의 종류를 제어할 수 없습니다. 따라서 아이디어는 테이블이 연결된 테이블인지 감지하는 방법을 찾는 것입니다(예: 내 스크립트와 호환되지 않음). 이 경우 경고를 표시하고 스크립트를 중지할 수 있습니다.
가능하지 않다면 이 특정 사례를 처리할 다른 방법을 찾을 수 있을 것입니다.
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?이 경우 '올바른' 동작은 해석의 여지가 있지만 바람직하지 않은 것으로 간주되는 것을 발견하면 support@jmp.com으로 이메일을 보내주십시오.
그러나 이 경우 연결된 하위 집합 테이블을 사용하여 분석을 위해 특정 행을 '격리'하려는 경우 보다 일반적인 접근 방식은 다음을 사용하는 것일 수 있습니다. 데이터 필터, 또는 로컬 버전. 데이터의 일부만 사용하여 생성된 수식을 저장하는 경우 이러한 수식을 관리하기 위해 몇 가지 추가 코드가 필요할 수 있습니다.
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?실제로 테이블에 연결된 하위 집합으로 작업하고 Fit Model 잔차를 저장하면 첫 번째 기본 테이블에 저장됩니다. 그러나 방금 예측 공식이 두 테이블 모두에 저장되어 있음을 언급했습니다! 그건 꽤 이상해...
NamesDefaultToHere(1);
// Open a table
dt1 = Open("$SAMPLE_DATA/Big Class.jmp");
// Create a subset
dt2=dt1 << Subset(
Selected Rows( 0 ),
Rows( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ),
Selected columns only( 0 ),
link to original data table(1)
);
// Direct the analysis to the subset table
fml = dt2 << Fit Model(
Y( :height ),
Effects( :weight )
);
fm = fml << Run;
// Prediction formula are saved in both dt1 and dt2 and residulas are saved only in dt1
fm << prediction formula;
fm << residuals;이 예에서는 dt2에서만 잔차와 예측 공식을 갖고 싶습니다.
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?에 관하여 " 특히 Fit Model 플랫폼의 잔차 및 기타 열을 현재 데이터 테이블에 저장합니다. "그렇다면 제가 잘못 이해한 것 같습니다. 그러나 올바른 테이블로 이동하려면 항상 '모델 적합' 예측을 얻을 수 있어야 합니다.
NamesDefaultToHere(1);
// Open a table
dt1 = Open("$SAMPLE_DATA/Big Class.jmp");
// Open another table
dt2 = Open("$SAMPLE_DATA/Bands Data.jmp");
// Direct the analysis to the first table
fml = dt1 << Fit Model(
Y( :height ),
Effects( :weight )
);
fm = fml << Run;
// Prediction formula goes to the first, not the current table
Print(CurrentDataTable());
fm << predictionFormula;
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?사실 저는 여러 분석을 실행하는 스크립트를 사용하고 있습니다. 특히 Fit Model 플랫폼의 잔차 및 기타 열을 현재 데이터 테이블에 저장합니다. 이 테이블이 다른 테이블에 연결되어 있으면 열이 현재 테이블이 아닌 원래 테이블에 저장되어 내 스크립트가 실패합니다.
따라서 사용자가 스크립트를 실행할 때 현재 테이블이 다른 테이블에 연결되어 있지 않은지 먼저 확인하고 싶습니다. 그리고 사용자가 이전에 무엇을 했는지 알지 못하기 때문에 무엇이 무엇에 연결될 수 있는지 알 수 없습니다.
설명이 더 필요하거나 명확하지 않은 것이 있으면 알려주세요!
Ian의 마지막 게시물에 대한 답변 외에도 이 연결 매트릭스를 구축하는 방법을 알지만 요약 테이블이 있는 경우 이전 스크립트가 작동할지 확신할 수 없습니다. 원본 테이블에서 행을 선택할 때 내가 틀리지 않았다면 요약 테이블에서 아무 것도 선택되지 않습니다.
그래서 불행하게도 이 사건은 여전히 문제가 있습니다.
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?그럼 Ian의 대답으로 가겠습니다.
연결된 테이블 정보가 필요한 이유는 무엇입니까? 다른 접근 방식이 있을 수 있습니다.
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?예, '요약 테이블' 시나리오는 제가 시도한 것입니다. 따라서 위의 답글입니다. 그러나 JMP 세션이 무엇이 무엇에 연결되어 있는지 알 수 없는 상태가 될 수 있는 방법에 대해 여전히 고민하고 있습니다. 하지만 괜찮습니다.
위에서 제공한 'NTable()'을 사용하여 '연결 행렬'을 쉽게 만들 수 있습니다.
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?Craige 제안에 감사드립니다!
"테이블 변수 이름 가져오기"를 시도했지만 "테이블 변수 가져오기"를 시도하지 않았습니다!
몇 가지 테스트를 해봤는데 꽤 잘 작동하는 것 같습니다!
지금까지 작동하지 않는 특정 사례가 하나 있습니다. 원본 테이블에 연결된 요약 테이블을 만들면 테이블 변수가 생성되지 않습니다.
이 마지막 요점에 대한 아이디어가 있습니까?
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?테이블 변수를 사용할 수 있습니다. 항상 설정되어 있는지 확실하지 않기 때문에 몇 가지 테스트가 필요합니다(업데이트: 하위 집합을 만들기 위해 여러 가지 방법을 시도했으며 테이블 변수가 항상 생성되는 것 같습니다).
dt<<GETTABLEVARIABLE></GETTABLEVARIABLE>
This linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variableThis linked subset has a table variable이 연결된 하위 집합에는 테이블 변수가 있습니다.
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?감사합니다 Ian, 그것은 실제로 문제를 해결하는 매우 편리한 방법입니다!
한 걸음 더 나아가면 됩니다. 잠재적인 기본 테이블(코드의 dt)이 무엇인지 모른다면 어떻게 할 수 있습니까?
모든 시작 테이블을 테스트해야 합니까, 아니면 더 빠른 솔루션이 있습니까?
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?아니, 이해는 했지만 '문제'를 피할 수 있다는 뜻이었다. 그러나 회고적으로 말하고 싶다면 다음과 같이 할 수 있습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Unlinked subset
dt << selectRandomly(0.1);
dt2 = dt << Subset(LinkToOriginalDataTable( 0 ) );
dt2 << setName("Unlinked");
// Linked subset
dt << selectRandomly(0.1);
dt3 = dt << Subset(LinkToOriginalDataTable( 1 ) );
dt3 << setName("Linked");
// Function to determine if two tables are linked
rLinked = Function({dt1, dt2}, {Default Local},
dt1 << selectAllRows;
if(NRow(dt2 << getSelectedRows) > 0,
linked = 1,
linked = 0
);
dt1 << clearSelect;
linked;
);
Print(rLinked(dt, dt2), rLinked(dt, dt3));Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?이안님 답변 감사합니다.
그러나 내 목표는 연결된 하위 집합을 만드는 것이 아니라 기존 테이블이 다른 테이블에 연결되어 있는지 확인하는 것입니다.
내가 충분히 명확하지 않다면 죄송합니다!
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?FWIW, 코드가 테이블을 만든다고 가정하면 필요에 따라 연결되거나 연결되지 않은 하위 집합을 만들 수 있습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Unlinked subset
dt << selectRandomly(0.1);
dt2 = dt << Subset(LinkToOriginalDataTable( 0 ) );
dt2 << setName("Unlinked");
// Linked subset
dt << selectRandomly(0.1);
dt3 = dt << Subset(LinkToOriginalDataTable( 1 ) );
dt3 << setName("Linked");Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있나요?사용자가 표가 연결되었는지 아닌지 알아내기 위해 의사결정 트리를 설정해야 한다는 건 이상하네요.
저는 Jmp가 어떤 테이블이 연결되어 있는지 알고 있다고 가정합니다.
그렇다면 왜 JSL을 통해 이런 정보에 접근할 수 없는 것일까요?
그런가요?
편집: JMP18에 기능을 제공해 주셔서 감사합니다 
(아래 참조)
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?연결된 하위 집합인지 여부에 대해 테이블을 쿼리하는 JSL 쿼리는 이전에 존재하지 않았습니다. 그러나 이 대화는 JMP Development의 관심을 끌었으며 이제 JMP의 차기 주요 릴리스(JMP 18)에 JSL 메시지가 추가되었습니다.
dt << 연결된 부분 집합임; // 1 또는 0을 반환합니다.
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?@호기 - 이제 다른 요청입니다.
내가 이해한 바에 따르면 링크는 테이블 생성 시 생성되거나 생성되지 않습니다. 그 사람은 아직 조사 중입니다.
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?링크 절단은 기본 테이블에서 서브세트 테이블이 공유하는 행을 복제하는 것을 의미합니다. dtA 연결 해제 요청은
- 테이블->하위 집합을 사용하여 dtA의 전체 사본을 dtB로 만들기
- 가까운 dtA
- dtB를 dtA의 이름으로 변경
이는 dtA에서 열려 있는 모든 플랫폼이 데이터에 대한 연결을 잃기 때문에 불완전합니다. 상당히 작은 사용 사례 집합에 대해 꽤 많은 C++ 코드로 판명될 수 있습니다.@anne_sa 도움이 될 수 있는 사용 사례를 설명합니다. 그러나 그것은 다른 웜을 여는 것 같습니다. 갑자기 add-in_1의 연결된 테이블이 add-in_2가 연결을 해제했기 때문에 더 이상 연결되지 않습니다. 클론이 필요한지 결정하기 위해 링크 상태에 대해 물어볼 수 있는 것이 여기에서 최적의 위치일 수 있다고 생각합니다.
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?아주 멋진 
링크를 자르는 기능을 추가하시겠습니까?
연결된 테이블과 기본 테이블 간의 연결을 끊는 기능
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있습니까?옵션으로 테이블을 연결하려고 하면 첫 번째 테이블에 추가,
다음 메시지와 함께 스크립트가 중지됩니다.
Cannot append to table: Big Class. Possible reasons for this include: the table is locked, the table is in a platform with a by group, or there is a linked subset of the table. in access or evaluation of 'Concatenate' , Concatenate(/*###*/Data Table( "Subset of Big Class" ), Append to first table)
오류 메시지는 문제를 식별하는 데 매우 유용했습니다.
그러나 연결된 하위 집합에 대해 스크립트를 강력하게 만드는 방법은 무엇입니까?
추가 기능:
dt << 연결된 하위 집합 목록 가져오기()
도움이 될 것입니다. 그런 다음 JSL을 통해 하위 집합을 닫을 수 있습니다.
대안:
- Jmp는 연결된 데이터 테이블을 업데이트합니다.
- Jmp는 링크를 자동으로 잘라냅니다.
- 연결하여 새로운 옵션 가져오기: Jmp_is_allowed_to_close_linked_data_tables_if_this_is_needed_to_run_this_concatenate(1)
Re: 테이블이 연결된 하위 집합인지 어떻게 알 수 있나요?데이터를 정렬하거나 추가할 때 모든 연결된 하위 집합과 보고서를 "활성" 상태로 유지하는 것은 쉽지 않습니다.
가장 간단한 해결책: 연결된 하위 집합이나 보고서가 열려 있을 때 사용자가 표를 정렬하거나, 행을 추가하거나, 표를 연결하지 못하도록 하는 것입니다.*)
사용자의 관점에서:
JMP의 향후 버전에서는 최적화되기를 바랍니다.
스크립트가 충돌했거나 다음과 같은 오류 메시지로 인해 멈췄습니까?

... 그럼 투표해주세요:
데이터 테이블 정렬 + 행 추가 + 연결 -> 가능하게 만들기
*)
잉크로 쓴 하위 집합 포함:
정렬 → 아니요
행 추가 → 아니요
연결하다 → 아니오
공개 보고서 포함:
행운 → 아니
행 추가 → 예 (!)
연결하다 → 예 (!)
연결된 요약 표 포함:
정렬 → 아니요 [SORT가 "링크를 잘라내지" 않는 이유는 무엇인가요?!?]
행 추가 → yes²
연결하다 → 예²
² JMP는 자동으로 링크를 끊습니다:
