J'ai très rapidement présenté quelques trucs et astuces pour JMP Scripting pendant JMP Scripters Club Q2 . Voici les mêmes conseils sous forme de texte (et un peu plus). Mes explications techniques peuvent ne pas être correctes et je peux utiliser des termes erronés ici et là, car je ne me soucie pas vraiment de comprendre tout (seulement la plupart) ce qui se passe sur JMP et JSL, je veux juste que mon code fonctionne bien et rapidement.
Astuce1 Activer le journal intégré de l'éditeur de scripts JMP
L'activation du journal intégré vous permet de consulter rapidement et facilement le journal JMP directement dans l'éditeur de scripts de JMP. Vous pouvez activer le journal intégré à partir des préférences JMP sous l'éditeur de script. JMP16 vous permet également de modifier la hauteur du journal intégré (j'utilise personnellement des valeurs comprises entre 25% et 30%).

Peut-être des liens utiles
Connexion texte dans JMP (aide jmp.com)
Astuce2 Pour JMP16+, activez le journal amélioré
Avec JMP16, une nouvelle fonctionnalité appelée Enhanced Log a été publiée. Cela permet de suivre ce que vous avez fait de manière interactive dans JMP et fournit un script pour ces actions et permet de laisser plus facilement JMP écrire des scripts pour vous.
Le journal amélioré peut être activé à partir des préférences de JMP. Vous pouvez également apporter des modifications à ce qui est capturé et à l'apparence du journal amélioré.

Peut-être des liens utiles
Enregistreur de journal et d'action amélioré - Nouveau dans JMP 16 et JMP Pro 16
Le journal amélioré dans JMP 16 : cela change tout
Connexion améliorée à JMP (jmp.com)
Astuce3 Évaluer les valeurs des variables aux expressions
Il s'agit d'un sujet assez courant dans la communauté JMP : pourquoi la valeur d'une variable n'est pas évaluée dans une formule, par exemple. Cela signifie essentiellement que les valeurs n'ont pas été évaluées "hors" des expressions (variables). Vous trouverez ci-dessous des exemples pour illustrer le problème et les solutions possibles (ma méthode préférée est Eval(EvalExpr()) + Expr()).
Exemple1 Formule
Dans cet exemple, deux colonnes sont créées, une sans et avec Eval(EvalExpr()). Celui sans est laissé avec le nom de la variable dans la formule
Voir plus...
Names Default To Here(1);
// Create demo table
dt = New Table("Demo",
Add Rows(6),
New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5, 6])),
New Column("y1", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y2", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
)
);
power = 3;
new_col = dt << New Column("x to " || char(power), Numeric, Continuous, Formula(:x^power));
Show(new_col << Get Formula);
power = 4;
Eval(EvalExpr(new_col = dt << New Column("x to " || char(power), Numeric, Continuous, Formula(:x^Expr(power)))));
Show(new_col << Get Formula);
Tableau de données et formules (notez à quoi ressemblent les formules et ce qui est arrivé aux valeurs x à 3 (elles sont à la puissance 4 maintenant))

Si vous deviez enregistrer cette table de données, la rouvrir et ajouter une nouvelle ligne, vous obtiendrez le message d'erreur suivant, car la table de données ne connaît pas la valeur de la puissance.

C'est parce que j'utilise Names Default To Here(1); dans le script d'exemple, mais l'erreur est une bonne chose dans ce cas. Si je n'utilisais pas Names Default To Here(1); pour lancer mon script (voir pourboire supplémentaire ), j'ajouterais la variable de puissance à l'espace de noms global et la table de données connaîtrait toujours la valeur de puissance dans la même session JMP. Maintenant, je pense peut-être que ma table de données fonctionne comme elle est censée le faire et je partage la table et la personne avec qui je l'ai partagée se demandera pourquoi elle ne fonctionne pas.
Exemple2 Définir les limites de spécification
Cet exemple de script montre comment vous pouvez utiliser Eval(EvalExpr()) pour obtenir des valeurs dans les propriétés de colonne (dans ce cas, Spec Limits).
Voir plus...
Names Default To Here(1);
// Create demo table
dt = New Table("Demo",
Add Rows(6),
New Column("Label", Character, "Nominal", Set Values({"A", "A", "A", "B", "B", "B"})),
New Column("x", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5, 6])),
New Column("y1", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y2", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
),
New Column("y3", Numeric, "Continuous",
Set Values(
[0.540628764079884, 0.0138843499589711, 0.363861175486818, 0.697015449637547, 0.114948588656262, 0.685370508348569]
)
)
);
Column(dt, "y1") << Set Property(
"Spec Limits",
{LSL(-1), USL(1), Show Limits(1)}
);
lower_limit = 0.5;
upper_limit = 1.5;
Column(dt, "y2") << Set Property(
"Spec Limits",
{LSL(lower_limit), USL(upper_limit), Show Limits(1)}
);
Eval(
EvalExpr(
Column(dt, "y2") << Set Property(
"Spec Limits",
{LSL(Expr(lower_limit)), USL(Expr(upper_limit)), Show Limits(1)}
);
)
);
Exemple3 << A la fermeture
Comme dernier exemple, je vais montrer comment vous pouvez protéger votre script contre l'écrasement accidentel des références. J'en ai brièvement parlé dans le 2022_Q1 MakeOverChallenge : action sur le clic de la souris de différentes manières Défi B
Si vous exécutez ce script et fermez la fenêtre bivariée, vous remarquerez que le tableau Semiconductor Capability est fermé au lieu de Big Class. En effet, lorsque la fenêtre bivariée est fermée, dt fait déjà référence à Semiconductor Capability (aurait également pu utiliser un nom de variable différent, par exemple dt_semi)
Voir plus...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density);
biv << On Close(
close(dt, no save)
);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
Et si vous exécutez ce code, la bonne table sera fermée. En effet, nous évaluons la référence dans la table Big Class à l'instruction << On close
Voir plus...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
biv = dt << Bivariate(Y(:Weight), X(:Height), Nonpar Density);
Eval(EvalExpr(
biv << On Close(
Close(Expr(biv << Get Data Table), no save)
);
));
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
Peut-être des liens utiles
Insérer une expression dans une autre en utilisant Eval Insert, Eval Expr, Parse et Substitute
Fonctions de gestion des expressions : Partie I - Démêler Expr(), NameExpr(), Eval(), ... Énigme
Expressions (Aide JMP, jmp.com)
Fonctions d'expression (aide JMP, jmp.com)
Astuce supplémentaire Démarrez vos scripts avec des noms par défaut ici (1) ;
Cela vous protégera de la pollution de l'espace de noms avec des variables globales et évitera les problèmes ultérieurs.C'est quelque chose que je fais toujours lorsque je démarre un nouveau fichier de script, même si je devais utiliser un espace de noms personnalisé. Je fais cela pour éviter même de créer accidentellement des variables dans l'espace de noms global.
Peut-être des liens utiles
Portée avancée et espaces de noms (Aide JMP, jmp.com) (très bonne lecture, il a plusieurs pages, assurez-vous de vérifier la plupart d'entre elles !)
Règles de résolution des noms (Aide JMP, jmp.com)
Scripts essentiels pour l'efficacité et la reproductibilité : faire moins pour faire plus (2019-US-TUT-290)
En ce qui concerne le
Names default to here (1);
J'ai aussi vu certaines personnes utiliser
Clear globals (1);
en plus au début d'un script.
Je sens que je peux comprendre pourquoi cela serait utile, mais quelle est votre opinion à ce sujet ?
@Ressel , personnellement, j'éviterais Clear Globals(1) car cela pourrait interférer avec d'autres scripts en cours d'exécution. Il serait beaucoup plus sûr de définir toutes les variables de script localement ou dans leur propre espace de noms.
Salut @Ressel ,
je suis d'accord avec @DonMcCormack , il est préférable de ne pas effacer les variables globales. Un exemple de la raison pour laquelle vous ne voudriez pas faire cela pourrait être lorsque vous avez une fonctionnalité "Rappel" dans votre script, où vous pouvez cliquer sur le bouton Rappeler, puis sur toutes les variables ou colonnes que vous avez converties en rôles ou valeurs que vous ' entrées pour une utilisation dans une plate-forme JMP sont automatiquement remplacées et vous n'avez pas à revenir en arrière et à le faire manuellement. Si vous avez le clear globals(1) au début de votre script, chaque fois que vous exécutez le script, vos variables de rappel seront effacées de la mémoire, rendant ainsi la fonction de rappel inutile.
DS