Le but ici est d'enregistrer une série de cartes de contrôle (ou tout autre rapport) sous forme de fichier graphique pouvant être utilisé ailleurs.
Par exemple, j'ai un jeu de diapositives PowerPoint contenant 10 cartes de contrôle. Chaque lundi, je dois mettre à jour les cartes de contrôle dans le jeu de diapositives. Je pouvais créer les graphiques dans JMP, puis les copier et les coller dans le jeu chaque semaine, ou je pouvais profiter de la fonction d'insertion et de liaison disponible dans la plupart des produits MS.

Pour ce faire, je pourrais créer la carte de contrôle, l'enregistrer sous figure1.png, puis ouvrir PowerPoint où j'insérerais l'image à l'aide de l'option "insérer et lier" (petite flèche vers le bas sur le bouton Insérer). Je ferais cela pour chacune des 10 diapositives. La semaine prochaine, je créerais simplement chaque carte de contrôle et les enregistrerais dans un fichier graphique (c'est-à-dire figure1.png, figure2.png...). Ensuite, lorsque j'ouvre le jeu de diapositives dans PowerPoint, la nouvelle version de figure1.png, etc., est insérée dans le jeu.
Cela semble fastidieux ? Oui, ce serait horrible, il serait plus facile de simplement enregistrer les 10 graphiques sous forme de fichier PowerPoint dans JMP et de copier et coller les graphiques. Cependant! Avec un peu de JSL, tout cela devient vraiment facile et je vais vous montrer comment.
Avant de commencer, examinons un script simple pour créer une carte de contrôle et comprendre ce qui se passe :
Carte de contrôle ( Taille de groupe( 1 ), Col du graphique ( : Métrique 1, Mesure individuelle ))
Décollons ceci :
La couche la plus externe est Carte de contrôle() , et à l'intérieur de cette couche, il y a deux parties, Taille du groupe(1) , et Graphique Col() .
Chacun des éléments a des arguments, par exemple la taille du groupe a un argument, "1". Chart Col() a deux arguments. Le premier est une référence de colonne et le type de carte de contrôle à créer avec cette colonne. Conceptuellement, il existe des couches de fonctions, et une façon de créer un script consiste à construire votre "oignon" de l'intérieur.
Il y a probablement 100 et 1 façons d'écrire ce script, et certaines pourraient être plus faciles et moins verbeuses que ce que je vais faire ici. L'approche que j'utilise ici a tendance à fonctionner avec presque toutes les plates-formes de JMP, mais elle nécessite une façon un peu différente de penser à la création de scripts... la création de scripts de l'intérieur vers l'extérieur.
1. liste={} ; c'est là que je fournis une liste de noms de colonnes à partir desquelles je veux créer des cartes de contrôle. Un exemple plus complexe pourrait avoir une boîte de dialogue utilisée pour générer la liste, ou peut-être un filtre logique pour sélectionner des colonnes continues dans une table, mais c'est pour un autre article de blog.
2. a=expr(); Ici, je prends simplement chacune des fonctions utilisées dans la carte de contrôle et je les définis mais en les laissant vides.
a=expr(tableau de contrôle()); me donne un endroit pour mettre des arguments. b=expr(taille du groupe(1)); est un élément que je vais insérer dans Carte de contrôle( ) , et c=expr(graphique col(... va également être inséré dans "a". Le " expression( ) " La fonction est importante à comprendre. Ce qu'il y a à l'intérieur n'est pas évalué, n'est pas "lu" et transformé en quelque chose. Par exemple si Parler ( "Bonjour" ); étaient dans votre script, JMP dirait "bonjour", mais si s=expr( Parler ( "Bonjour" ) ); étaient dans votre script, rien ne se passerait jusqu'à ce que vous évaluiez "s" ou eval(s) explicitement scripté(s). (plus précisément, si "s;" se trouvait sur une ligne de votre code, JMP l'évaluerait et dirait "bonjour"). Ici j'utilise expression( ) pour conserver les pièces que je veux utiliser plus tard.
3. Insérer dans (c, alist[i],1); Ici, "c" est un argument non évalué, chartcol (mesure individuelle).Insérer dans, insère la première chose dans la variable de liste "alist" dans le contenu de "c". Alors maintenant c est chartcol(:Métrique 1, mesure individuelle).
C'est un bon endroit pour prendre du recul et expliquer d'où vient le "i" dans "alist[i]".
Pour (i=1, i<=nitems(liste), i++ est le début d'une boucle For Next, ou Pour cet ensemble de conditions, continuez ainsi jusqu'à ce que la condition ne soit plus vraie. Donc, i=1, et tant que i est inférieur ou égal au nombre de choses dans "alist", faites la chose suivante. La variable "i" est augmentée de un dans chaque boucle, et nous pouvons utiliser cette variable de compteur pour d'autres choses dans la boucle. Dans la première boucle, i=1, nous l'utilisons donc pour obtenir la première chose dans "alist" en disant "alist, subscript, i". Plus tard dans le script, nous allons utiliser i au nom du fichier que nous sauvegardons. Je veux une liste sérielle de noms de fichiers (figure1, figure2, figure3...) Pour obtenir cela, je concatène le préfixe avec I. Sauf qu'il y a un problème, on ne peut pas concaténer un nombre, donc on doit dire " chemin/figure"||char(i)||".png " le i numérique doit être enveloppé dans caractère( ) , alors en tant que caractère, il peut être concaténé avec d'autres caractères. (choses entourées de guillemets.)
4. obj=eval(a); à ce stade du script, le carte de contrôle() La fonction a été emballée avec tous les arguments dont j'ai besoin et il est temps de l'évaluer. Notez que "obj", une variable, peut être utilisée comme "handle" pour parler à la carte de contrôle qui vient d'être générée.
5. obj< cette dernière étape enregistre le contenu de obj en tant que fichier image ,png. notez que le nom du fichier a une extension .png, puis juste après le nom du fichier, l'argument suivant est "png". Cela signifie qu'il est possible d'enregistrer un fichier avec une extension .gif mais en tant que type de fichier .png. Je recommande fortement pas ne correspond pas à l'extension et au type de fichier.
6. obj< C'est juste du nettoyage. Si vous vouliez voir les rapports JMP que vous avez créés, cela serait commenté.
7. Le dernier bit est ");" c'est la parenthèse fermante pour le début For(. En pratique, lorsque vous codez, c'est une bonne idée de vous laisser un commentaire à la fin de la boucle, quelque chose comme "//end of i loop" Ceci est particulièrement important si vous itérez à l'intérieur d'autres boucles , cela aide à empêcher les choses de devenir folles.
alist={:Metric 1, :Metric 2, :Metric 3};
for(i=1, i<=nitems(alist), i++,
a=expr(control chart());
b=expr(group size(1));
c=expr(chart col(individual measurement));
insert into(c,alist[i],1);
insert into(a,nameexpr(b));
insert into(a,nameexpr(c));
obj=eval(a);
obj<< Save Picture( "/Users/bywing/Byron Wingerd/Examples/example"||char(i)||".png", "png" );<BR /> obj<< Close Window;
);