테이블이 정렬되면 행 상태 처리기가 작동을 중지하도록 합니다.행 상태 핸들러를 데이터 테이블에 적용하고 데이터 테이블이 변경된 경우 해당 핸들러가 계속 작동하도록 할 수 있습니까? 예를 들어 열이 스크립트에 의해 정렬되거나 사용자에 의해 대화식으로 정렬되는 경우?
현재 두 개의 데이터 테이블이 있습니다. 하나는 요약 통계가 있는 테이블이고 다른 하나는 원시 데이터가 있는 테이블입니다. 사용자가 요약 테이블에서 행을 선택하면 행 상태 처리기가 선택된 행을 감지하고 매개변수 이름을 추출하고 선택된 매개변수를 사용하여 원시 데이터 테이블에서 차트를 생성합니다.
정상적으로 작동하지만(처음에 선택 해제된 행을 선택한 다음 새로 선택한 행을 찾기는 하지만) 사용자가 요약 테이블을 정렬하면 중단됩니다(예: 사용자가 가장 낮은 Cpk를 보려는 경우 또는 일부 다른 측정항목) ).
스크립팅 도움말을 기반으로 한 다음의 간단한 예에서 동일한 문제가 나타납니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {a}, Print( a ) );
rs = dt << make row state handler( f );
dt << Select Rows( 1 );
dt << sort( by( :weight ), replace table, order( ascending ) );
dt << Select Rows( 9 );출력은 다음과 같습니다.
Scriptable[]
[1]
이것이 이 위시리스트 항목과 관련이 있을 수 있다고 생각합니다. https://community.jmp.com/t5/JMP-Wish-List/Improve-JMP-s-state-handlers-hover-label-row-state-handler/idi-p/527992 . 해결 방법이 있습니까?
MacOS에서 JMP17.0을 사용하고 있습니다.
감사합니다!
자동화 및 스크립팅Re: 테이블이 정렬되면 Row State Handler가 작동을 멈추도록 합니다.그건 그렇고, 내가 준 스크립트 예제는 다음을 추가하여 쉽게 해결할 수 있음을 알고 있습니다
rs = dt << make row state handler( f );
내 Sort() 명령 직후. 대화형 사례(사용자가 수동으로 열을 기준으로 테이블을 정렬한 다음 행을 선택하는 경우)가 문제입니다.
행 상태 처리기를 재설정하는 스크립트를 테이블에 추가하여 해결 방법을 시도했습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {a}, Print( a ) );
rs = dt << make row state handler( f );
dt << new script("Fix Row State Handler",
rs = dt << make row state handler( f );
); // errors when the script is run!
dt << Select Rows( 1 );
wait(0);
dt << sort( by( :weight ), replace table, order( ascending ) );
rs = dt << make row state handler( f ); // fixes issue when scripting
dt << Select Rows( 9 );하지만 스크립트를 실행하기 위해 녹색 삼각형을 클릭하면 오류가 발생합니다.
Send Expects Scriptable Object in access or evaluation of 'Send' , dt << /*###*/make row state handler( f ) /*###*/ at line 6 in ...
그러나 이것이 작동하더라도 사용자가 테이블을 정렬한 후에 이 작업을 기억해야 하므로 이상적이지 않습니다.
감사해요,
매튜.
Re: 테이블이 정렬되면 Row State Handler가 작동을 멈추도록 합니다.안녕하세요,
보고서를 사용하여 스크립트를 구동할 수 있습니다. 테이블 상자는 행이 선택될 때 스크립트를 실행할 수 있으며 요약 테이블이 정렬될 때 중단되지 않는 것 같습니다. 아이디어를 얻으려면 아래를 시도하십시오.
Names Default To Here(1);
dt = open ("$Sample_Data\Car Physical Data.jmp");
dtSum = dt << summary( group(:Country), mean(:weight) );
nw = new window("ex",
dtb = Data Table Box( dtSum,
<< Set Selectable rows,
<< Set Click Sort )
);
//do something when a row is selected. Here, we just print the country.
dtb << Set Row Change Function ( function( { this },
selCountry = this[1][this << get selected rows];
print(evalinsert("Selected country is: ^selCountry[1]^."))
) );
건배,
브래디
Re: 테이블이 정렬되면 Row State Handler가 작동을 멈추도록 합니다.안녕 브래디, 정말 멋지네요, 감사합니다! 이것은 내가 이전에 가지고 있던 훨씬 더 강력하고 사용 가능한 솔루션을 제공했습니다.
한 가지 질문: JSL에서 데이터 테이블 상자를 쿼리하여 사용자가 테이블을 정렬한 열(있는 경우)을 찾을 수 있습니까?
문안 인사,
매튜.
Re: 테이블이 정렬되면 Row State Handler가 작동을 멈추도록 합니다.안녕 매튜,
테이블을 정렬하는 데 사용된 열(있는 경우)을 확인하기 위해 쿼리하는 방법을 모르겠습니다. 열을 확인하여 무차별 대입할 수 있지만 테이블 크기에 따라 비용이 많이 들 수 있습니다.
Re: 테이블이 정렬되면 Row State Handler가 작동을 멈추도록 합니다.안녕 브래디,
팁 고마워.
테이블을 정렬하는 데 사용된 열(있는 경우)을 확인하기 위해 쿼리하는 방법을 모르겠습니다. 열을 확인하여 무차별 대입할 수 있지만 테이블 크기에 따라 비용이 많이 들 수 있습니다.
무차별 대입 방법으로 저를 도와 주시겠습니까? DataTableColBox의 속성과 창 자체를 살펴보았지만 정렬되어 있는지 확인하는 데 도움이 되는 항목을 찾지 못했습니다.
감사해요,
매튜.