
Je rencontre un problème où je veux voir à quoi ressembleraient mes anciennes limites de contrôle par rapport aux limites de contrôle fixes actuelles ou nouvelles pour un ensemble de cartes de contrôle. En règle générale, j'ajouterais des lignes de référence à chaque graphique, mais je pense qu'il pourrait y avoir un meilleur moyen, en utilisant un message de plate-forme oublié depuis longtemps (au moins pour moi).
Plus tôt cette année, je jouais avec l'idée de ce à quoi cela ressemblerait d'ajouter une nouvelle propriété de colonne, dans ce cas Action et Alert Limts pour les graphiques de surveillance environnementale, puis d'utiliser cette propriété de colonne comme ligne de référence dans les graphiques de contrôle. Lien vers le blog EM
Alors que je cherchais quelque chose de complètement différent dans l'index de script, je suis tombé sur une fonction appelée "Ajouter des limites". Autant que je sache, cette fonction existe depuis longtemps, au moins avant la v14, et elle peut être utilisée pour envoyer des limites de contrôle supérieures et inférieures à une carte de contrôle. Ces limites sont affichées sous forme de lignes pointillées et sont répertoriées dans un tableau à côté du graphique. Il me faudrait beaucoup de JSL pour que cela se produise, donc c'est plutôt agréable de découvrir une fonctionnalité aussi utile.
L'utilisation de base d'Ajouter des limites ressemble à ceci :
//Example of adding limits to a control chart
ccb = dt << Control Chart Builder( Variables( Y( :Column 1 ) ), Show Control Panel( 0 ) );
ccb << chart( position( 1 ), Add Limits( {LCL( 20 ), UCL( 30 )} ) );
La dernière ligne de JSL envoie un message au graphique qui inclut les valeurs à utiliser comme limites de ligne en pointillés.
Bien sûr, je voudrais l'utiliser dynamiquement avec n'importe quelle colonne, ce qui demande un peu plus de travail de fantaisie.
Commençons par configurer un tableau à utiliser comme exemple.
dt=New Table( "old and new control limits",Add Rows( 50 ),
New Column( "Column 1",Numeric,"Continuous",Format( "Best", 12 ),
Formula( Round( Random Normal( 25, 3 ), 0 ) )));
column(dt, 1)<< Delete Formula;
Notez que je supprime la formule qui génère des données aléatoires avec lesquelles travailler juste après la construction de la table. Ceci corrige les valeurs dans le tableau.
L'étape suivante consiste à ajouter un nouveau type de propriété de colonne, quelque chose de personnalisé qui n'existe pas nativement dans JMP.
Column( dt, 1 ) << set property( "Old Control Limits", {LCL( 20 ), UCL( 30 )} );
Après avoir exécuté cette ligne, la colonne de la table de données a maintenant une propriété appelée Anciennes limites de contrôle.
Juste pour vérifier si le script a fonctionné, vous pouvez consulter les valeurs de la propriété de la colonne en procédant ainsi.
OCL = Column( dt, 1 ) << Get Property( "Old Control Limits" );Show( OCL[1], OCL[2] );
La nouvelle variable, OCL, a deux valeurs, LCL(20) et UCL(30)
Je peux utiliser ces valeurs dans une nouvelle carte de contrôle.
Les deux prochaines lignes peuvent sembler vraiment étranges, mais elles sont très robustes et tirent parti de la structure basée sur les fonctions de JSL.
Je vais d'abord définir quelques arguments vides ou presque vides, puis je vais les imbriquer ensemble.
ccbe = Expr(Control Chart Builder( Variables( Y( :Column 1 ) ), Show Control Panel( 0 ) ));
ce = Expr( chart( position( 1 ) ) );
ae = Expr( add limits() );
le = {};
En configurant ces expressions, je peux gérer chaque partie sans les évaluer.
ccbe, l'expression du générateur de carte de contrôle est une fonction, "Control Chart Builder" avec deux arguments, "Variables" et "Show Control Panel"
Je souhaite ajouter un nouvel argument appelé Chart () à la fonction Control Chart Builder. La nouvelle variable, ce est une expression avec l'argument "Chart" et Chart inclut un argument, "Position (1)".
Je veux ajouter, Add Limits à l'argument Chart donc j'ai la variable ae, pour référencer une expression Add Limits vide.
Enfin, j'ai créé une liste vide appelée "le", qui contiendra les limites que j'ai obtenues de "Get Properties" dans la variable OCL de l'étape précédente.
Ensuite, je vais superposer les pièces ensemble:
Insert Into( le, OCL );show( le );
Insert Into( ae, le );Show( ae );
Insert Into( ce, Name Expr( ae ) );Show( ce );
Insert Into( ccbe, Name Expr( ce ), 2 );
ccbe;
D'abord, je prends la liste des choses dans OCL et je l'insère dans le fichier.
Deuxièmement, je prends "le" et l'insère dans "ae", suivi de l'insertion de "ae" dans "ce". Dans le second cas, j'ai enveloppé "ae" dans un Name Expr(). Cela me donne l'expression évaluée de ae sans l'évaluer. Cette méthode NameExpr() est super pratique.
Enfin, j'insère ce dans le ccbe, qui est l'expression complète de la carte de contrôle.
Dans le JSL ci-dessus, j'ai inclus un "show" après chaque étape afin que vous puissiez voir comment la fonction est construite dans le journal.
La dernière étape consiste à obtenir un graphique. En exécutant simplement ccbe tout seul, cette variable contenant l'expression complète est évaluée et j'obtiens une carte de contrôle avec des lignes pointillées représentant les anciennes limites de contrôle, qui provenaient des propriétés des colonnes.
Avec un peu plus d'effort, je suis presque sûr qu'il serait possible de commencer avec une table qui inclut les limites de contrôle actuelles et anciennes, qui pourraient être utilisées pour remplir toutes les propriétés de colonne pour une table entière de variables de processus.
Le script entier est inclus ci-dessous.