JSL을 사용하여 조건에 따라 Graph Builder에서 X 또는 Y 변수를 동적으로 할당하는 방법은 무엇입니까?
안녕하세요 JMP 커뮤니티 여러분,
I'm trying to build a dynamic Graph Builder report in JSL where the list of X variables is determined by certain conditions (e.g., flags like includeSite, includeWW, etc.). The goal is to flexibly add or remove columns from the X-axis based on runtime logic.
저는 다음을 포함하여 여러 가지 접근 방식을 시도했습니다.
X( :ColumnName )
X( Column("ColumnName") )
Expr( X(...) )
Substitute(...) and Eval(...)
하지만 저는 계속해서 다음과 같은 오류를 겪습니다.
Name Unresolved: X in access or evaluation of 'X'
Bad Argument( Column(...) )
제가 찾고 있는 것은 다음과 같은 안정적이고 올바른 방법입니다.
제 목표를 간략하게 설명하면 다음과 같습니다.
xVars = {};
If( includeSite, Insert Into( xVars, :Site ) );
If( includeWW, Insert Into( xVars, :WW ) );
// add remaining fixed columns...
Graph Builder(
Variables(
// <- How can I inject xVars here properly?
Y( :Measurement )
),
Elements(
Points( Y( :Measurement ) )
)
);
I want to avoid generating multiple separate graph blocks depending on each condition. Is there a supported or recommended way to dynamically build up the X() list for Graph Builder?
미리 감사드립니다!
자동화 및 스크립팅기본 데이터 분석 및 모델링품질 및 공정 엔지니어링Re: JSL을 사용하여 조건에 따라 Graph Builder에서 X 또는 Y 변수를 동적으로 할당하는 방법은 무엇입니까?먼저 << 변수 추가를 사용해 보세요.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(Variables(X(:age), Y(:weight)), Elements(Points(X, Y), Smoother(X, Y)));
Wait(0.5);
gb << Add Variable({:height, Role("Y")});
그래도 작동하지 않으면 X를 표현식으로 빌드한 다음 그래프 빌더로 평가해야 할 수도 있습니다.
Re: JSL을 사용하여 조건에 따라 Graph Builder에서 X 또는 Y 변수를 동적으로 할당하는 방법은 무엇입니까?@jthi가 제안한 것처럼 내장 함수를 사용하는 것은 이러한 주제를 처리하는 좋은 방법입니다.
JSL 코드 블록(="표현식")을 정의하고 결합하여 JSL 코드를 동적으로 작성하는 원래 아이디어를 따르고 싶다면 @제시안 의 블로그 게시물 ☝을 살펴보세요.
와 함께
Expr( X(...) )
당신이 가까이에 있다면, 대리자 와 Eval은 프레임워크의 다른 부분입니다.
아마도 가장 중요한 함수는 이름 Expr() 입니다. 이 함수는 변수(=name)에 저장된 표현식에 값을 계산하지 않고도 접근할 수 있습니다. 예를 들어,
y= Expr(X( "ColumnName") );
Name Expr(y);
you will get X( "ColumnName") 대신에

표현 처리에 대한 기타 리소스:
JMP에서의 표현식 처리: 팁과 함정 - JMP 사용자 커뮤니티
스크립터스 클럽, 세션 9: 고급 JSL
표현식 처리 함수: 1부 - Expr(), NameExpr(), Eval(), ... 난제 풀기
Re: JSL을 사용하여 조건에 따라 Graph Builder에서 X 또는 Y 변수를 동적으로 할당하는 방법은 무엇입니까?따라서 표현식() , 평가() , 대리자() , AND 이름 Expr() 의 도움으로
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
xVars = Expr(X);
Insert Into( xVars, Expr(:age) );
Eval(Substitute(Expr(Graph Builder(
Variables(
__xVars__,
Y( :height )
)
)
), Expr(__xVars__) , Name Expr(xVars)));
Re: JSL을 사용하여 조건에 따라 Graph Builder에서 X 또는 Y 변수를 동적으로 할당하는 방법은 무엇입니까?대리자() 대신 Eval Expr()을 사용하는 것을 선호합니다. 이는 다음과 같이 작동합니다.
" 표현식() 을 검색하여 전체를 평가하기 전에 내용을 평가하세요":
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
xVars = Expr( X );
Insert Into( xVars, Expr( :age ) );
Eval(
Eval Expr(
Graph Builder(
Variables( Expr( Name Expr( xVars ) ), Y( :height ) )
)
)
);
따라서 JMP는 다음을 찾아야 합니다.

평가합니다. 이름 Expr() 에 유의하세요. 이전 게시물에서 설명했듯이, 이는 JMP가 x변수 의 내용만 조회하고 평가하지 않도록 합니다. xVars 를 검색하여 메인 블록에 삽입하면, 전체 내용이 둘러싸는 를 통해 평가됩니다.

무슨 일이 일어나고 있는지 확인하는 좋은 방법이 있습니다. 평가() 을 생략하고 로그를 살펴보세요.
그러면 JMP는 "미리 만들어진" 표현식을 평가하지 않고 로그에 출력합니다. 이를 통해 사용자는 최종 표현식을 보고 오류를 검사할 수 있습니다.

모든 것이 예상대로라면 간단히 Evaluate()를 추가하여 표현식을 평가합니다.