행을 선택/선택 취소하면 열 수식이 다시 평가되는 이유는 무엇입니까?약 100,000개의 행과 2000개의 열이 있는 데이터 테이블이 있습니다.수십 개의 열에는 수식이 포함되어 있습니다.어딘가를 변경하면 상태 표시줄에 "##column_xyz 평가 중"이라고 표시되고 데이터 테이블의 모든 수식이 평가됩니다.이 테이블은 다소 큰 테이블이고 수식이 많기 때문에 모든 수식을 평가하는 데 최대 60초가 걸립니다.결과적으로 저는 수식 평가를 시작하는 작업을 수행하는 데 매우 민감합니다. 사용자 인터페이스는 작업이 완료될 때까지 응답하지 않고 예상치 못한 일이 발생하면 상당히 짜증날 수 있기 때문입니다.반면에, 때때로 나는 그것을 잊어버리고 데이터가 업데이트되어야 할 때 업데이트되지 않을 것이기 때문에 항상 "수식 평가 억제"를 원하지 않습니다.
따라서 이 대규모 데이터 테이블에는 Graph Builder 플랫폼을 사용하여 차트 세트를 생성하고, 일부 로컬 데이터 필터를 적용하고, 데이터를 선택적으로 강조 표시하는 JSL 스크립트가 있습니다.본질적으로 스크립트의 목적은 차트를 동적으로 생성하고 이메일이나 보고서에 잘라내어 붙여넣을 수 있도록 준비하는 것입니다.
이 스크립트를 실행하는 데 시간이 오래 걸리는 것 같습니다.예상보다 길어졌습니다.그래프가 최종적으로 표시되기 전 거의 60초 동안 UI가 응답하지 않습니다.나는 그 60초 동안 무슨 일이 일어나고 있는지 알아내려고 시간을 보냈습니다.그러다가 이 스크립트에 의해 수식 평가가 실행되고 있다는 생각이 들었습니다.데이터 테이블 상태 표시줄에 일반적인 "평가 중..." 메시지가 표시되지 않기 때문에 이는 즉시 명확하지 않습니다. 사용자 작업이 아닌 스크립트에 의해 평가가 트리거되기 때문에 공백으로 남아 있습니다.스크립트 로그 창이 열려 있는 동안 스크립트를 실행하면 로그 상태 표시줄에 "##column_with_formula 평가 중"이라고 표시되었습니다.지연 시간으로 인해 실제로는 테이블의 모든 수식 열을 평가하고 있었던 것으로 생각되지만 로그 상태 표시줄은 해당 메시지에서 고정되었습니다.그런 다음 전체 테이블에 대해 "수식 평가 억제"를 활성화하고 스크립트를 다시 실행하여 수식 평가가 원인임을 확인했습니다. 그래프가 거의 즉시 나타납니다.
시행착오를 거쳐 스크립트에서 한 줄로 범위를 좁혔습니다. 생성된 그래프에서 일부 데이터를 강조 표시하는 데 "Select Where"가 사용되었습니다.다음과 같이 보입니다.
myDT << Select Where( :Name("##column_with_formula") == "value" );나는 이것이 이상하다고 생각했다. 어쩌면 "어디" 부분과 관련이 있을 수도 있습니다.그래서 이 줄을 더 간단한 것으로 바꾸었습니다.
myDT << Select Rows( {1,3,5,7} );이 줄조차도 여전히 배후에서 수식 평가를 촉발하는 것 같습니다.그런 다음 몇 가지 실험을 더 수행했습니다.
- 작업 관리자를 연 상태에서 일반적인 방식으로 수식 평가를 실행했습니다(열의 값 변경).상태 표시줄에는 평가 중인 수식이 표시되었으며 즉시 CPU 사용량이 최대 30%까지 치솟았습니다(CPU 코어 1개 최대화).
- 활동이 중지되기를 기다렸다가 UI를 사용하여 데이터 테이블에서 행을 선택해 보았습니다.상태 표시줄은 변경되지 않았습니다. 여전히 "평가 완료"가 표시되었습니다.그러나 작업 관리자는 마치 수식 평가가 진행되는 것처럼 정확히 동일한 CPU 활동을 보여주었습니다.
- 데이터 테이블에 대해 "수식 평가 억제"를 활성화하고 데이터 테이블에서 다른 행을 선택했습니다.CPU 사용량이 급증하지 않았습니다.
요약하자면, 실험을 통해 다음을 입증했습니다.
- JMP는 열 수식 평가를 불필요하게 수행합니다. 사용자 인터페이스와의 기본 상호 작용으로 인해 실제로 수정된 입력 데이터가 없더라도 백그라운드에서 계산이 발생합니다.
- JMP는 이러한 공식 평가를 언제 수행하는지 투명하지 않습니다.상태 표시줄에 메시지가 표시되는 경우도 있지만 대부분의 경우 이러한 메시지가 발생하고 있다는 표시는 없습니다.이는 뚜렷한 이유 없이 사용자 인터페이스 지연/더듬거림/응답 없음으로 나타나는 경우가 많습니다.
- 평가를 위해 하나의 열이 트리거되면 필요 여부에 관계없이 모든 열이 평가되는 것처럼 보입니다.
더 작은 데이터 세트와 더 적고 덜 복잡한 수식을 사용하면 과도한 수식 평가는 문제가 되지 않는 것 같습니다.그러나 너무 복잡한 수식과 대규모 데이터 세트를 사용하면 이는 실제로 방해가 됩니다.내 경우에는 수식 평가를 항상 억제하고 수식만 수동으로 평가하는 데 적응해야 할 것 같습니다.그러나 통합 문서 재계산이 수동으로 설정된 경우 Excel에서와 마찬가지로 실수가 발생하기 쉽습니다.최소한 Excel에는 변경된 데이터에 대해 필요한 수식만 평가할 수 있는 종속성 트리가 있으며, 사용자가 수식을 적절하게 디자인하면 최소한의 오버헤드로 계산을 항상 자동 모드로 둘 수 있습니다.물론 저는 Excel만큼 JMP에 익숙하지 않기 때문에 아직 배우지 못한 JMP에서 이 문제를 처리하는 방법이 있을 수 있습니다.
평가를 항상 억제하지 않고 수많은 복잡한 수식을 관리하는 방법에 대한 제안 사항이 있는 사람이 있습니까?
또한 내 게시물 제목에 명시된 대로 행 선택 트리거 수식 평가가 변경된 이유를 알고 싶습니다.또한 JMP가 공식을 평가하고 있다고 알리기도 하고 숨기기도 하는 이유는 무엇입니까?
Re: 행을 선택/선택 취소하면 열 수식이 재평가되도록 트리거되는 이유는 무엇입니까?@Chris_Rodrigues 썼다:
또한 제가 가장 놀랐던 부분은 선택 행의 전체 테이블 재평가가 트리거되었습니다(CPU 사용량 및 UI 응답성으로 입증됨).행을 제외하여 수식이 영향을 받을 수 있다면 사용자가 실제로 평가를 실행할 때 평가를 트리거하는 것은 어떨까요? 행 제외 ?사용자가 현재 행 선택 상태에 따라 열 수식을 작성할 수 있다는 것이 이론적으로 가능하다고 생각합니다. 하지만 제 생각에는 그런 일이 드문 경우인 것 같습니다.
이것은 또한 나를 혼란스럽게 한다. Jmp가 행 상태를 구별하지 못하는 이유는 다음과 같습니다. 제외된 그리고 선택된 ?
경우에도 행상태 변경되었습니다. - 후속 확인이 있을 수 있습니다. 제외된() 상태가 변경되었습니다.
나는 동의한다 @Chris_Rodrigues - 대부분의 열 수식이 사용됩니다. 제외된() 그리고는 아니다 선택된() .
[그러나, 선택된() 정말 멋지네요
]
틈새 문제처럼 들리지 않습니다. 5~1000행의 데이터가 포함된 샘플 데이터의 경우 이는 큰 문제가 되지 않습니다.
그러나 더 큰 데이터 세트의 경우 다음을 사용하는 사용자는 제외된() 열 수식에서는 엄청난 페널티를 지불해야 합니다!
Names Default to Here(1);
dt = new table("test", add rows(5),
New Column( "again"),
New Column( "excluded",
Formula(
:again[1] = 1;
Excluded();
),
));
Re: 행을 선택/선택 취소하면 열 수식이 재평가되도록 트리거되는 이유는 무엇입니까?마침내 이 문제로 어려움을 겪은 사람이 나뿐만이 아니라는 소식을 듣게 되어 기쁩니다.거의 4년이 지난 지금도 상황은 나아지지 않았습니다.수식 평가가 테이블 전체에서 억제되는 경우에도 전체 데이터 테이블에 대한 수식 평가를 트리거하는 이상한 상황이 많이 있습니다.종속성을 처리할 방법이 없기 때문에 개별 열에서 수식 평가를 억제하는 것은 불가능합니다.JMP가 올바른 순서로 열을 평가하려면 모든 열을 억제 해제해야 합니다.또한 JMP16에서는 공식 평가 엔진이 더욱 느려진 것 같습니다.이제 전체 테이블을 평가하는 데 불합리한 시간이 걸립니다.
모든 공식을 삭제하고 고정된 값만 저장하라는 포럼의 끊임없는 제안과 더불어 저는 JMP가 단순히 동적 공식을 처리하는 것이 아니라 정적 데이터만 처리하기 위한 것이라는 결론에 도달했습니다.테이블이 작고 여전히 제대로 작동하면 처음에는 수식이 좋지만 수식 수, 수식 복잡성 또는 행 수가 특정 제한을 초과하면 벽돌 벽에 부딪히게 됩니다.다른 도구를 사용하여 이 프로젝트를 완전히 재작업해야 하며 그래프/프레젠테이션/통계에만 JMP를 사용해야 합니다.
이 문제를 해결된 것으로 표시하겠습니다.해결책은 해결책이 없다는 것입니다.이 문제가 발생한다면 JMP는 해당 작업에 적합한 도구가 아닙니다.동적 수식을 삭제하고 정적 데이터만 저장하세요.
Re: 행을 선택/선택 취소하면 열 수식이 재평가되도록 트리거되는 이유는 무엇입니까?대규모 데이터 테이블에서도 비슷한 문제가 발생했습니다.
수식 평가가 계속해서 실행되었습니다.
테이블을 저장하고 다시 열면 모든 것이 정상이었습니다.
따라서 변수 이름 충돌로 인해 재평가가 촉발되었을 수도 있습니다. U그리고 변수 이름을 재설정한 후 문제가 사라졌습니다.
다른 사용자에게도 비슷한 문제가 있는 경우 개별 수식을 신속하게 활성화 및 비활성화하고 싶습니다.
수식 계산을 활성화/비활성화하는 빠른 방법
또 다른 아이디어: 기본적으로 공식 평가를 비활성화하여 가짜 공식 재평가 없이 원활한 Jmp를 얻습니다.
데이터 테이블에 일부 데이터를 추가하는 경우 일회성 수식 평가를 트리거하면 됩니다. 소원은 이렇습니다.
특정 수식에 대한 일회성 수식 평가를 트리거하는 빠른 방법
Re: 행을 선택/선택 취소하면 열 수식이 재평가되도록 트리거되는 이유는 무엇입니까?이 테이블은 이전 버전의 JMP에서 생성되지 않았습니다.아마도 1년 정도 됐을 테니 JMP 13이나 14였을 겁니다.
빨간색 삼각형 메뉴를 사용하여 테이블의 평가 억제 상자를 확인한 다음 저장하고 닫았습니다.테이블을 다시 열면 평가 억제 상자가 더 이상 선택되지 않으므로 테이블을 저장해도 테이블 전체 설정이 유지되지 않은 것 같습니다.테이블이 열리면 상태 표시줄에 즉시 "xyz 평가 중..."이 표시됩니다.이런 일이 발생하는 원인이 무엇인지 잘 모르겠습니다.
일부 데이터 조회 기능에 사용되는 일부 연관 배열에 데이터를 채우는 데 사용되는 OnOpen 스크립트가 있었습니다.테이블을 열 때 실행되지 않도록 OnOpen의 이름을 다른 것으로 변경하여 비활성화했지만 평가는 계속 발생합니다.
나는 대부분의 수식 열에 대한 열 속성으로 이동하여 거기에서 평가를 억제하는 JSL 스크립트를 작성했습니다. 테이블이 저장될 때 이 옵션이 유지된다는 것을 알고 있기 때문입니다. 따라서 이제 전체 테이블 평가에 거의 시간이 걸리지 않습니다.이제부터 처리할 방법은 다음과 같습니다. 개별 열에서 평가를 억제하고, 수식을 실행해야 하는 새 데이터를 가져올 때 스크립트를 사용하여 일시적으로 억제를 해제합니다.
Re: 행을 선택/선택 취소하면 열 수식이 재평가되도록 트리거되는 이유는 무엇입니까?열 때 평가하는 수식이 포함된 테이블을 만들 수 없습니다.@충웨이
기본 설정은 JMP 5 정도에서 생성된 JMP 테이블에 영향을 미칠 수 있습니다.현재로서는 아무 것도 수행하지 않는 것으로 보입니다.
데이터 테이블의 빨간색 삼각형 옵션을 사용하여 수식 평가를 억제하고 해당 상태(부분적으로 평가된 열 포함)로 테이블을 저장할 수 있습니다. 동일한 빨간색 삼각형의 rerunFormulas를 사용하여 (또는 JSL에서) 강제로 업데이트할 수 있습니다. (이것이 당신이 요구하는 것일 수도 있습니다.)
프레이가 말하는 이유 권장하지 않음 테이블에 억제 비트가 설정되면 매우 혼란스러워지거나 한 번에 설정되었습니다.
기술 지원을 받으면 결함을 입력하고 추적합니다(또는 기본 설정이 존재하는 이유와 이전 형식 테이블에서 수행한 작업/기능을 파악합니다.)
디버깅/로깅 프레임워크가 없습니다.
Re: 행을 선택/선택 취소하면 열 수식이 재평가되도록 트리거되는 이유는 무엇입니까?크레이지, 수식이 평가될 때 로그에 기록하는 것이 좋은 생각이에요.이 기술을 사용하여 수식 평가와 관련된 프로젝트의 UI 지연 및 지연 문제를 추가로 해결하겠습니다.내 방법은 정확하지 않았습니다.하지만 질문이 있습니다. JMP에 '디버그' 모드나 '자세한 로깅' 기능을 켤 수 있나요?특정 순간에 JMP가 무엇을 하고 있는지 파악하기 위해 코드에 너무 많은 Write 문을 넣을 필요가 없다면 좋을 것입니다.
그러나 지금은 현재 작업에 이 프로젝트를 있는 그대로 사용해야 합니다.수식 평가를 완전히 억제하고 필요에 따라 수동으로 수식을 다시 실행하고 싶습니다.기본 설정 메뉴에서 "열 때 평가 억제"를 활성화했는데도 JMP는 테이블을 열 때 즉시 공식을 평가합니다.이 테이블의 모든 자동 수식 평가를 완전히 방지할 수 있는 방법이 있습니까?이 기본 설정이 이 작업을 수행해야 하지만 작동하지 않는 경우 버그 보고서를 제출할 수 있는 방법이 있습니까?
참고로 저는 Windows 10 x64에서 JMP PRO 14.1을 사용하고 있습니다.
Re: 행을 선택/선택 취소하면 열 수식이 재평가되도록 트리거되는 이유는 무엇입니까?어떤 버전의 JMP를 실행하고 있나요?
내가 알 수 있는 한, 14는 내가 기대하는 대로 작동하고 있습니다. 여기 내 테스트 JSL이 있습니다
New Table( "Untitled", add rows(3),
// EVERYTHINGCOL depends on everything. it evaluates last.
New Column( "EVERYTHINGCOL", Formula( Write( "\!nEVERYTHINGCOL,row" || Char( Row() ) ); :ROWSTATECOL + :INDEPCOL + :DEPONINDEP; ) ),
// DEPONINDEP depends on INDEPCOL, but not ROWSTATECOL.
New Column( "DEPONINDEP", Formula( Write( "\!nDEPONINDEP,row" || Char( Row() ) ); :INDEPCOL + 1; ) ),
// INDEPCOL is independent. It evaluates early, maybe first.
New Column( "INDEPCOL", Formula( Write( "\!nINDEPCOL,row" || Char( Row() ) ); 17; ) ),
// ROWSTATECOL is directly dependent on row state information. It evaluates early, maybe first.
New Column( "ROWSTATECOL", Formula( Write( "\!nROWSTATECOL,row" || Char( Row() ) ); Selected( Row State() ); ) ),
)
로그를 살펴보세요. 열은 평가하면서 보고합니다. 행을 선택하면 두 개의 열은 평가되지만 나머지 두 개는 평가되지 않습니다.
Re: 행을 선택/선택 취소하면 열 수식이 재평가되도록 트리거되는 이유는 무엇입니까?"테이블" 아래의 기본 설정 메뉴에는 "열 때 수식 평가 억제(권장하지 않음)" 옵션이 있습니다.이 옵션을 켰지만 작동하지 않는 것 같습니다.데이터 테이블을 열면 수식 평가가 억제되지 않은 상태로 시작되므로 수동으로 억제해야 합니다.이 옵션이 깨졌나요? 아니면 이 옵션이 무엇을 해야 하는지 제가 잘못 이해하고 있는 건가요?
Re: 행을 선택/선택 취소하면 열 수식이 재평가되도록 트리거되는 이유는 무엇입니까?Craige, 내 요점은 모든 공식이 다시 계산된다는 것입니다 행 상태에 종속되는지 여부 .대부분의 수식은 행 상태와 관련이 없지만 행 상태가 변경되면 어쨌든 다시 계산됩니다.JMP는 존재할 수 있는 모든 유형의 공식에 영향을 미칠 수 있는 일이 발생하면 항상 모든 것을 계산하는 것 같습니다.내 생각에는 그것은 불필요하고 비효율적입니다.메스로 충분할 때 전투용 도끼를 사용하는 것과 같습니다.나는 그런 식으로 프로그램을 코딩하는 것이 더 쉽다고 확신합니다. 그것은 단순해 보이는 접근 방식처럼 보이며 이것이 JMP가 수식 평가를 처리하는 방식이라는 것을 알았을 때 놀랐습니다.
이제 수식 계산 방법을 더 잘 이해했으므로 수식 평가를 억제하고 dt << runFormulas;를 삽입하여 문제를 해결할 수 있습니다. 대기(0); 내 스크립트 전반에 걸쳐 진술.예쁘지는 않겠지만 효과가 있을 것 같아요.
Re: 행을 선택/선택 취소하면 열 수식이 재평가되도록 트리거되는 이유는 무엇입니까?예, 수식이 행 상태 정보에 종속되는 경우 행 선택을 변경하면 해당 열과 그에 종속된 모든 열이 다시 평가됩니다.
행 상태가 변경된 후 dt<
Re: 행을 선택/선택 취소하면 열 수식이 재평가되도록 트리거되는 이유는 무엇입니까?짐, 답장을 보내주셔서 감사합니다.이 테이블에는 시계열 데이터가 포함되어 있으며 정기적으로 최신 데이터를 가져옵니다.테이블에 추가된 새 데이터에 대해 계산되도록 수식을 보존하고 싶습니다.
이러한 수식 대부분의 경우 값은 동일한 행의 다른 데이터에만 의존합니다.테이블 앞부분의 데이터를 제외해도 아래 값에는 아무런 영향이 없으므로 전체 열을 다시 계산할 필요는 없지만 어쨌든 발생합니다.수식에 Col Maximum() 또는 Lag() 또는 수식이 다른 행의 값에 의해 영향을 받도록 하는 기타 함수가 포함된 경우에만 이런 일이 발생하면 좋을 것입니다.
또한 제가 가장 놀랐던 부분은 선택 행의 전체 테이블 재평가가 트리거되었습니다(CPU 사용량 및 UI 응답성으로 입증됨).행을 제외하여 수식이 영향을 받을 수 있다면 사용자가 실제로 평가를 실행할 때 평가를 트리거하는 것은 어떨까요? 행 제외 ?사용자가 현재 행 선택 상태에 따라 열 수식을 작성할 수 있다는 것이 이론적으로 가능하다고 생각합니다. 하지만 제 생각에는 그런 일이 드문 경우인 것 같습니다.
Re: 행을 선택/선택 취소하면 열 수식이 재평가되도록 트리거되는 이유는 무엇입니까?지정된 열에 대한 셀 선택/제외 변경으로 수식이 영향을 받을 수 있으므로 재계산이 수행됩니다.데이터 테이블의 크기를 고려하여 수식 값이 변경되지 않는 열을 변경한 다음 "수식" 속성을 제거하여 일반적인 숫자 열로 전환합니다.