Come assegnare dinamicamente le variabili X o Y in Graph Builder utilizzando JSL in base alle condizioni?
Ciao comunità 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.
Ho provato diversi approcci, tra cui l'utilizzo di:
X( :ColumnName )
X( Column("ColumnName") )
Expr( X(...) )
Substitute(...) and Eval(...)
Tuttavia, mi imbatto costantemente in errori come:
Name Unresolved: X in access or evaluation of 'X'
Bad Argument( Column(...) )
Ciò che cerco è un modo affidabile e corretto per:
-
Definire dinamicamente un elenco di variabili dell'asse X
-
Pass them to Graph Builder
-
Evita di codificare in modo rigido il numero di variabili X o di dover ripetere la logica del builder
Ecco una versione semplificata del mio obiettivo:
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?
Grazie in anticipo!
Automazione e scriptingAnalisi e modellazione dei dati di baseIngegneria della qualità e dei processiR: Come assegnare dinamicamente le variabili X o Y in Graph Builder utilizzando JSL in base alle condizioni?Potresti provare prima usando << Aggiungi variabile
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")});
Se ciò non funziona, potresti dover costruire X come espressione e quindi valutarla nel generatore di grafici
R: Come assegnare dinamicamente le variabili X o Y in Graph Builder utilizzando JSL in base alle condizioni?Utilizzare funzioni integrate, come suggerisce @jthi , è un ottimo modo per gestire tali argomenti.
Se vuoi seguire l'idea originale di scrivere codice JSL in modo dinamico definendo e combinando blocchi di codice JSL (="espressioni"), dai un'occhiata al post del blog di @Jasean ☝.
Con
Expr( X(...) )
sei vicino, Sostituire ed Valutazione sono altre parti del framework.
Forse la funzione più importante: Nome Expr() . Può essere utilizzata per accedere all'espressione memorizzata in una variabile (=name) senza valutarla, ad esempio tramite
y= Expr(X( "ColumnName") );
Name Expr(y);
you will get X( "ColumnName") invece di

Altre risorse sulla gestione delle espressioni:
Gestione delle espressioni in JMP: suggerimenti e trappole - Community di utenti JMP
Scripters Club, Sessione 9: JSL avanzato
Funzioni di gestione delle espressioni: Parte I - Svelare l'enigma di Expr(), NameExpr(), Eval(), ...
R: Come assegnare dinamicamente le variabili X o Y in Graph Builder utilizzando JSL in base alle condizioni?Quindi, con l'aiuto di Espr() , Valutazione() , Sostituire() , E Nome 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)));
R: Come assegnare dinamicamente le variabili X o Y in Graph Builder utilizzando JSL in base alle condizioni?Invece di Sostituire() , preferisco usare Valutazione Expr() , che funziona come
"cerca Espr() e valuta il contenuto prima di valutare il tutto":
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 ) )
)
)
);
Quindi, JMP deve trovare:

e valutarlo. Si noti il nome Expr() . Come discusso nel post precedente, questo garantisce che JMP cerchi solo il contenuto di xVars e non lo valuti. Dopo averlo recuperato e inserito nel blocco principale, l'intero blocco viene valutato tramite l'elemento racchiuso

Un buon trucco per controllare cosa sta succedendo: omettere l' Valutazione() di chiusura e guardare il log.
JMP stamperà quindi l'espressione "precotta" nel log, senza valutarla. Questo permette all'utente di visualizzare l'espressione finale e di individuare eventuali errori:

Se tutto è come previsto, basta aggiungere Valutazione() per valutare l'espressione.