Comment attribuer dynamiquement des variables X ou Y dans Graph Builder à l'aide de JSL en fonction de conditions ?
Bonjour la communauté 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.
J'ai essayé plusieurs approches, notamment en utilisant :
X( :ColumnName )
X( Column("ColumnName") )
Expr( X(...) )
Substitute(...) and Eval(...)
Cependant, je rencontre régulièrement des erreurs telles que :
Name Unresolved: X in access or evaluation of 'X'
Bad Argument( Column(...) )
Ce que je recherche, c'est un moyen fiable et correct pour :
-
Définir dynamiquement une liste de variables de l'axe X
-
Pass them to Graph Builder
-
Évitez de coder en dur le nombre de variables X ou de devoir répéter la logique du générateur
Voici une version simplifiée de mon objectif :
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?
Merci d'avance!
Automatisation et scriptsAnalyse et modélisation des données de baseIngénierie de la qualité et des procédésRe : Comment attribuer dynamiquement des variables X ou Y dans Graph Builder à l'aide de JSL en fonction de conditions ?Vous pouvez d'abord essayer en utilisant << Ajouter une variable
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")});
Si cela ne fonctionne pas, vous devrez peut-être créer X en tant qu'expression, puis l'évaluer dans le générateur de graphiques.
Re : Comment attribuer dynamiquement des variables X ou Y dans Graph Builder à l'aide de JSL en fonction de conditions ?L'utilisation de fonctions intégrées - comme le suggère @jthi - est un excellent moyen de gérer de tels sujets.
Si vous souhaitez suivre l'idée originale d' écrire du code JSL de manière dynamique en définissant et en combinant des blocs de code JSL (="expressions"), veuillez consulter l'article de blog de @Jasean ☝.
Avec
Expr( X(...) )
vous êtes proche, Remplaçant et Évaluer sont d'autres parties du framework.
La fonction la plus importante est peut-être Nom Expr() . Elle permet d'accéder à l'expression stockée dans une variable (=name) sans l'évaluer, par exemple via
y= Expr(X( "ColumnName") );
Name Expr(y);
you will get X( "ColumnName") au lieu de

Autres ressources sur la gestion des expressions :
Gestion des expressions dans JMP : astuces et pièges – Communauté d'utilisateurs JMP
Scripters Club, Session 9 : JSL avancé
Fonctions de gestion des expressions : Partie 1 - Décrypter les énigmes Expr(), NameExpr(), Eval(), etc.
Re : Comment attribuer dynamiquement des variables X ou Y dans Graph Builder à l'aide de JSL en fonction de conditions ?Donc, avec l'aide de Expr() , Évaluer() , Remplaçant() ET Nom 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 : Comment attribuer dynamiquement des variables X ou Y dans Graph Builder à l'aide de JSL en fonction de conditions ?Au lieu de Remplaçant() , je préfère utiliser Évaluer l'expression() - qui fonctionne comme
« recherchez Expr() et évaluez le contenu avant d'évaluer l'ensemble » :
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 ) )
)
)
);
Donc, JMP doit trouver :

et l'évaluer. Veuillez noter le nom Expr() . Comme indiqué dans l'article précédent, cela garantit que JMP ne recherche que le contenu des xVars et ne l'évalue pas. Après la récupération et l'insertion du bloc dans le bloc principal, l'ensemble est évalué via le bloc englobant.

Une astuce intéressante pour vérifier ce qui se passe : omettez l' Évaluer() englobant et regardez le journal.
JMP affichera ensuite l'expression « pré-cuite » dans le journal, sans l'évaluer. Cela permet à l'utilisateur de consulter l'expression finale et de rechercher les erreurs.

Si tout est comme prévu, ajoutez simplement Évaluer() pour évaluer l'expression.