안녕하세요, 저는 특정 변수의 값에 따라 그래프 빌더에서 얻은 그래프가 변경되는 JSL 코드를 작성하려고 한동안 노력해 왔습니다.
지금 내 특별한 예는 매우 간단합니다. 확인란이 있고 사용자 선택(선택/선택 취소)에 따라 로컬 필터를 사용하여 그래프에 그룹을 추가하거나 제거하고 싶습니다. 다음은 매우 간단한 예입니다.
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value<BR /><BR />// Check box to Remove group A from the graph
usw = New Window("Ignore A?", << Modal,
//Check Box defaulted to checked ignore
checkIgnore = check box({"Ignore A?"},
<< Set(1,1),
cb = checkIgnore << Get())
);
// Answer to Cancel or close buttons
If( usw["button"] == -1, throw("User cancelled") );
show(cb); // I can see how the value of cb changes between 0 and 1
nw = New Window( "Example Report",
// Box plot with dots
dot_box_plot = dt << Graph Builder(
Show Control Panel( 0 ),
Show Legend( 0 ),
Show Title( 0 ),
Variables( X(:drug ), Y( :pain ), Color(:drug ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
Elements( Position( 2, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
SendToReport( Dispatch( {}, "X title", TextEditBox, {Set Text( "" )} ) ),
/* This is the part that I'd like to make interactive
to keep or remove A-group from the plot depending on
user selection */
if(cb == 1,
Local Data Filter(
Close Outline( 1 ),
Add Filter( columns( :drug ),
Where( :Drug != "A" )
)
)
)
)
);보시다시피, if 문에 문제가 있는 것 같습니다. 아무 것도 변경되지 않고 플롯이 모든 그룹을 유지하기 때문입니다. 물론 IF() 부분만 제거하면 내 플롯은 그룹 A를 무시합니다.
어떤 제안이라도 주시면 매우 감사하겠습니다.
안녕하세요 Jim, 저는 아직 가장 발전된 스크립트에 대한 도움이 필요합니다. 간단하게 말해서 스크립트는 사용자에게 1-5 사이의 레지스터 번호를 입력하라는 메시지를 표시합니다.
while 문이나 if 문을 추가하면 스크립트는 아무 작업도 수행하지 않습니다. while이나 if 문 없이 하나의 표현식만 추가하면 정상적으로 작동합니다.
하지만 저는 여러 레지스터에 대해 절반만 작업하려고 합니다. 일반적으로 개별 레지스터에 대한 파일을 얻고 5가지 다양성을 모두 처리하기 위해 단일 스크립트를 사용하고 싶었습니다.
미리 감사드립니다.
샘
아래 전체 스크립트
w = New Window( "분석할 레지스터 번호 입력", // 제목과 이 내용이 있는 창을 엽니다...
테두리 상자( 위쪽( 20 ), 아래쪽( 20 ), 왼쪽( 160 ), 오른쪽( 160 ), // 창 드레싱
V List Box( // 표시 상자를 구성하기 위해 V 및 H 목록이 중첩됩니다.
H Center Box( Text Box( "아래에 레지스터 번호를 입력하세요." ) ), // 두 번째 제목, 가운데 정렬
Spacer Box( size( 1, 10 ) ), // 약간의 수직 공간
// H List Box( Text Box( "value 1: " ), Number Edit Box( v1 ) ), // 데이터 입력
H 목록 상자( 텍스트 상자( "등록 번호 입력:" ), Register_Num_teb = 텍스트 편집 상자( "", << 너비 설정( 200 ) ), ),
Spacer Box( size( 1, 10 ) ), // 약간의 수직 공간
H Center Box( // 버튼을 중앙에 위치시킵니다.
Button Box( "Continue", // 버튼을 누르면 이 스크립트가 실행됩니다...
Register = Register_Num_teb << get text();
// 값을 사용하여 새 테이블을 만듭니다...
///////////////////////////////////////////////// /////////////////////////////////////////루프 시작
동안(등록 == 1,
도티스 = Expr(
새 열( "start_time", 숫자, 연속, 공식( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
이 작업을 수행;
dt << MoveSelectedColumns( {:start_time}, After( :Register1_active ) );
도티스 = Expr(
새 열("SoftStart_Accuracy%",
숫자,
마디 없는,
공식( ((:Register1_tsoftstart - :start_time) / :Register1_tsoftstart) * 100 )
)
);
이 작업을 수행;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
동안(등록 == 2,
도티스 = Expr(
새 열( "start_time", 숫자, 연속, 공식( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
이 작업을 수행;
dt << MoveSelectedColumns( {:start_time}, After( :Register2_active ) );
도티스 = Expr(
새 열("SoftStart_Accuracy%",
숫자,
마디 없는,
공식( ((:Register2_tsoftstart - :start_time) / :Register2_tsoftstart) * 100 )
)
);
이 작업을 수행;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
동안(등록 == 3,
도티스 = Expr(
새 열( "start_time", 숫자, 연속, 공식( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
이 작업을 수행;
dt << MoveSelectedColumns( {:start_time}, After( :Register3_active ) );
도티스 = Expr(
새 열("SoftStart_Accuracy%",
숫자,
마디 없는,
공식( ((:Register3_tsoftstart - :start_time) / :Register3_tsoftstart) * 100 )
)
);
이 작업을 수행;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
동안(등록 == 4,
도티스 = Expr(
새 열( "start_time", 숫자, 연속, 공식( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
이 작업을 수행;
dt << MoveSelectedColumns( {:start_time}, After( :Register4_active ) );
도티스 = Expr(
새 열("SoftStart_Accuracy%",
숫자,
마디 없는,
공식( ((:Register4_tsoftstart - :start_time) / :Register4_tsoftstart) * 100 )
)
);
이 작업을 수행;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
동안(등록 == 5,
도티스 = Expr(
새 열( "start_time", 숫자, 연속, 공식( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
이 작업을 수행;
dt << MoveSelectedColumns( {:start_time}, After( :Register5_active ) );
도티스 = Expr(
새 열("SoftStart_Accuracy%",
숫자,
마디 없는,
공식( ((:Register5_tsoftstart - :start_time) / :Register5_tsoftstart) * 100 )
)
);
이 작업을 수행;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
///////////////////////////////////////////////// /////////////////////////////////////////
// 선택적으로 대화 상자를 닫습니다. 아니면 다시 실행하고 싶을 수도 있습니다.
w << closeWindow; // 보고서가 아닌 대화상자만
)
)
)
)
);