Utilisation des colonnes de configuration pour appliquer sélectivement des règles aux graphiques de contrôleBonjour,
J'ai un problème pour appliquer les règles de tendance appropriées, ou « Tests », aux graphiques de contrôle à l'aide de JSL. Mes données sont constituées des résultats d'analyses multiples pour tous les lots de mesures d'un certain produit au cours de la dernière année. Les données avec lesquelles je travaille sont dans un format empilé et le tableau comporte des colonnes qui contiennent des limites de contrôle et de spécification, ainsi que 8 colonnes pour les 8 tests. Dans les colonnes de tests, chaque ligne aura soit un 1 soit un 0 pour indiquer si la règle s'appliquera. J'ai mis en place un exemple de tableau ci-dessous dans un format similaire pour référence.
| ID du lot | Analyse | Résultat | LCL | UCL | Règle 1 | Règle3 | Règle 5 |
| A | X | 12 | 10 | 18 | 1 | 0 | 0 |
| A | Y | 204 | 200 | 215 | 1 | 0 | 1 |
| A | Z | 0,8 | 0,5 | 1 | 1 | 1 | 1 |
| B | X | 13 | 10 | 18 | 1 | 0 | 0 |
| B | Y | 209 | 200 | 215 | 1 | 0 | 1 |
| B | Z | 0,7 | 0,5 | 1 | 1 | 1 | 1 |
| C | X | 15 | 10 | 18 | 1 | 0 | 0 |
| C | Y | 205 | 200 | 215 | 1 | 0 | 1 |
| C | Z | 0,8 | 0,5 | 1 | 1 | 1 | 1 |
Dans cet exemple, il y a 3 analyses uniques pour 3 lots uniques. La colonne Résultat est unique pour chaque analyse de chaque lot, mais les limites de contrôle et les règles de tendance correspondent aux analyses correspondantes. Ainsi, pour l'analyse X, seule la règle 1 doit s'appliquer, mais pour l'analyse Z, les 3 règles doivent s'appliquer. J'ai des graphiques de contrôle tracés à l'aide du code ci-dessous, avec des modifications mineures des noms de colonnes pour les besoins de l'exemple :
dt << Control Chart(
Sample Label( :Lot ),
Group Size( 1 ),
KSigma( 3 ),
By( :Analysis ),
Chart Col( :Result, Levey Jennings( Show Zones( 1 ), Shade Zones( 1 ), Test 1( :Rule1[1] ), Test 3( :Rule3[1] ), Test 5( :Rule5[1] ) ) ),
SendToReport(
Dispatch(
{},
"Levey Jennings of Result",
OutlineBox,
{Set Title("Parameter: "||char(:Analysis))}
),Le reste du code est constitué de commandes Dispatch permettant d'ajouter des lignes de référence, d'ajuster la taille du cadre, etc. Ces sections de code ne présentent aucun problème, je les ai donc omises par souci de concision. Comme indiqué ci-dessus, lors de l'ajout des lignes « Test 1 », « Test 3 » et « Test 5 » à la commande Levey Jennings, j'ai tenté de référencer la valeur de la première ligne à partir des colonnes de configuration respectives. De cette façon, lorsque le script trace les graphiques par analyse, la première ligne contiendra la configuration de la règle de tendance de l'analyse en cours de tracé. Cependant, lorsque j'exécute le script, il applique simplement les 3 règles, qu'elles soient ou non appliquées pour ce paramètre spécifique. Quelqu'un peut-il m'aider à expliquer comment je peux faire en sorte que JMP analyse la valeur des colonnes de configuration respectives et détermine si une certaine règle doit être appliquée à chaque graphique par analyse ?
J'ai déjà fait fonctionner cette fonction dans une table fractionnée, mais je l'ai fait en utilisant une boucle for pour créer une chaîne avec les valeurs concaténées dans la chaîne, puis en utilisant les commandes Parse et Eval pour l'exécuter. Je préférerais vraiment ne pas utiliser de boucle for ici si cela peut être évité, car c'est pourquoi je récupère les données dans un format empilé en premier lieu.
Automatisation et scriptsExploration et visualisation des donnéesRé : Utilisation des colonnes de configuration pour appliquer de manière sélective des règles aux graphiques de contrôleJ'ai exécuté votre JSL avec 2 modifications
- Vous avez spécifié une colonne appelée Lot et le nom réel est Lot ID
- J'ai supprimé la section Envoyer au rapport
Names Default To Here( 1 );
dt = Current Data Table();
dt << Control Chart(
Sample Label( :Lot ID ),
Group Size( 1 ),
KSigma( 3 ),
By( :Analysis ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( :Rule1[1] ),
Test 3( :Rule3[1] ),
Test 5( :Rule5[1] )
)
);
Le code a été exécuté et a produit le résultat suivant

Pour vérifier que les tests spécifiés ont été correctement gérés, j'ai enregistré le script à partir de la sortie du graphique de contrôle
Control Chart(
SendToByGroup( {:Analysis == "X"} ),
Sample Label( :Lot ID ),
KSigma( 3 ),
SendToByGroup(
{:Analysis == "X"},
Chart Col(
:Result,
Levey Jennings( Show Zones( 1 ), Shade Zones( 1 ), Test 1( 1 ) )
)
),
SendToByGroup(
{:Analysis == "Y"},
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( 1 ),
Test 5( 1 )
)
)
),
SendToByGroup(
{:Analysis == "Z"},
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( 1 ),
Test 3( 1 ),
Test 5( 1 )
)
)
),
By( :Analysis )
);
Comme on peut le voir dans le script généré, le graphique de contrôle a reçu les informations sur les tests à exécuter pour chaque analyse
J'ai exécuté le code sur Windows 11 avec JMP 18.1.0
Je ne vois pas de problème
Ré : Utilisation des colonnes de configuration pour appliquer sélectivement des règles aux graphiques de contrôleOk, j'ai donc essayé de reproduire exactement ce que vous avez décrit. Voici le script que j'ai exécuté.
Names Default to Here( 1 );
dt = Current Data Table();
dt << Control Chart(
Sample Label( :Lot ID ),
Group Size( 1 ),
KSigma( 3 ),
By( :Analysis ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( :Rule1[1] ),
Test 3( :Rule3[1] ),
Test 5( :Rule5[1] )
)
)
);
Mais ma sortie par défaut est que les trois règles sont actives pour chaque analyse. Voici le script pour l'analyse X, qui ne doit appliquer que le test 1 en fonction des colonnes de configuration.
Control Chart(
Sample Label( :Lot ID ),
KSigma( 3 ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( 1 ),
Test 3( 1 ),
Test 5( 1 )
)
),
Where( :Analysis == "X" )
);
J'utilise JMP 17.0.0 sous Windows 11, donc c'est peut-être un problème qui a été résolu dans l'une des mises à jour entre nos versions. Je vais voir comment mettre à jour mon service informatique avant de procéder à tout autre dépannage. Merci d'avoir testé le code, je suis heureux de voir que le code devrait fonctionner en principe !
Ré : Utilisation des colonnes de configuration pour appliquer de manière sélective des règles aux graphiques de contrôleJ'ai reproduit vos résultats dans JMP 17. Vous trouverez ci-dessous une façon d'obtenir les résultats souhaités en exécutant chacun des niveaux d'analyse un par un.
Names Default To Here( 1 );
dt = Current Data Table();
Summarize( dt, byGroup = By( :Analysis ) );
For Each( {level}, byGroup,
dt << select where( :Analysis == level );
dtTemp = dt << Subset( selected columns( 0 ), selected rows( 1 ) );
Eval(
Eval Expr(
dtTemp << Control Chart(
Sample Label( :Lot ID ),
Group Size( 1 ),
KSigma( 3 ),
//By( :Analysis ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( Expr( dtTemp:Rule1[1] ) ),
Test 3( Expr( dtTemp:Rule3[1] ) ),
Test 5( Expr( dtTemp:Rule5[1] ) )
)
)
)
)
);
);Ré : Utilisation des colonnes de configuration pour appliquer de manière sélective des règles aux graphiques de contrôleC'est similaire à la façon dont j'avais obtenu ce résultat lorsque je travaillais avec une table fractionnée, en faisant une boucle par numéro de colonne et en créant une expression qui était finalement analysée en JSL et évaluée. J'espérais simplement éviter l'utilisation d'une instruction For lorsque je travaillais avec la table empilée et en utilisant les fonctions By et Where pour séparer par analyse. En fin de compte, ce code JMP17 est toujours beaucoup plus simple que ce que j'avais développé pour les tables fractionnées. Merci encore pour votre contribution ! Je vais essayer d'intégrer cela dans mon script actuel jusqu'à ce que je puisse passer à JMP18.