
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 (du 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 Limites d'action et d'alerte pour les cartes de surveillance environnementale, puis utilisez cette propriété de colonne comme ligne de référence dans les cartes de contrôle.
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, avant JMP 14 au moins, 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 en pointillés et répertoriées dans un tableau à côté du graphique. Il me faudrait beaucoup de JSL pour que cela se produise, donc c'est agréable de découvrir un utilitaire aussi utile.
L'utilisation de base de "Ajouter des limites" ressemble à ceci, où la dernière ligne de JSL envoie un message au graphique qui inclut les valeurs à utiliser comme limites en pointillés :
//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 )} ) );
Bien sûr, je voudrais utiliser "Ajouter des limites" de manière dynamique avec n'importe quelle colonne, ce qui nécessite un peu plus de travail de fantaisie.
Tout d'abord, configurons un tableau à utiliser comme exemple.Notez que lors de la configuration de la table, 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.
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;
L'étape suivante consiste à ajouter un nouveau type de propriété de colonne, quelque chose de personnalisé qui n'existe pas nativement dans JMP.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 .
Column( dt, 1 ) << set property( "Old Control Limits", {LCL( 20 ), UCL( 30 )} );
Ensuite, juste pour vérifier si le script a fonctionné, vous pouvez consulter les valeurs de la propriété de la colonne.La nouvelle variable, LAC , a deux valeurs, LCL(20) , et UCL(30) . Je peux utiliser ces valeurs dans une nouvelle carte de contrôle :
OCL = Column( dt, 1 ) << Get Property( "Old Control Limits" );Show( OCL[1], OCL[2] );
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.
Tout d'abord, je vais définir quelques arguments vides ou presque vides, puis je vais les imbriquer ensemble.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, Générateur de cartes de contrôle avec deux arguments, variables et Afficher le panneau de configuration .
Ensuite, je veux ajouter un nouvel argument appelé c cerf() à la fonction Control Chart Builder.
- La nouvelle variable, ce est une expression avec l'argument c cerf et le graphique comprend un argument, poste (1) .
- Je veux ajouter, ajouter des limites au graphique argument donc j'ai variable ae , pour référencer un vide ajouter des limites expression.
- Enfin, je fais une liste vide appelée le , qui contiendra les limites que j'ai obtenues de Obtenir la propriété dans le LAC variable de l'étape précédente.
ccbe = Expr(Control Chart Builder( Variables( Y( :Column 1 ) ), Show Control Panel( 0 ) ));
ce = Expr( chart( position( 1 ) ) );
ae = Expr( add limits() );
le = {};
Ensuite, je superpose les pièces ensemble pour faire ceci:
- D'abord, je prends la liste des choses dans LAC et insérez-le dans le .
- Deuxièmement, je prends le et insérez-le dans ae , suivi de l'insertion ae dans ce . Dans le deuxième cas, j'ai enveloppé ae à l'intérieur d'un Nom Expr() . Cela me donne l'expression évaluée de ae sans l'évaluer. Ce NomExpr() la méthode est super pratique.
- Troisièmement, j'insère ce dans le ccbe , qui est l'expression entière de la carte de contrôle.
- J'ai également inclus un Montrer 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 courant 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
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;
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 joint.