条件に基づいて JSL を使用してグラフ ビルダーで 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 を使用してグラフ ビルダーで 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 を使用してグラフ ビルダーで X または Y 変数を動的に割り当てる方法@jthiが提案しているように、組み込み関数を使用することは、このようなトピックを処理する優れた方法です。
JSL コードのブロック (= "式") を定義および組み合わせることで JSL コードを動的に記述するという本来のアイデアに従う場合は、 @ジェーアンのブログ投稿☝ をご覧ください。
と
Expr( X(...) )
あなたは近づいています。Substitute とEval はフレームワークの別の部分です。
おそらく最も重要な関数は名前式()です。これは変数(=name)に格納されている式を評価せずにアクセスするために使用できます。例えば、
y= Expr(X( "ColumnName") );
Name Expr(y);
you will get X( "ColumnName") の代わりに

式の処理に関するその他のリソース:
JMPにおける式処理:ヒントと落とし穴 - JMPユーザーコミュニティ
スクリプターズクラブ、セッション9:上級JSL
式処理関数: パート I - Expr()、NameExpr()、Eval() などの難問を解明する
Re: 条件に基づいて JSL を使用してグラフ ビルダーで X または Y 変数を動的に割り当てる方法そこで、 式() 、 評価() 、 代わりの() 、 名前式()の助けを借りて、
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 を使用してグラフ ビルダーで X または Y 変数を動的に割り当てる方法代わりの()の代わりに、 式の評価()を使うことを好みます。これは次のように動作します。
「全体を評価する前に、 式()を検索してその内容を評価します」:
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 は次のものを見つける必要があります。

そして評価します。Name Expr()に注意してください。前回の記事で説明したように、これによりJMPはxVarsの内容を参照するだけで、評価は行いません。xVarsを取得してメインブロックに挿入した後、全体を囲むExpr()によって評価します。

何が起こっているかを確認するための便利なトリック: 囲んでいる評価()を省略してログを確認します。
JMPは「事前処理済み」の式をログに出力しますが、評価は行いません。これにより、ユーザーは最終的な式を確認し、エラーがないか確認できます。

すべてが予想どおりであれば、評価()を追加するだけで式を評価することができます。