Vous avez peut-être lu l’article de blog intitulé « Limites de spécification de processus qui diffèrent en fonction d’une colonne de regroupement » et pensé
Cet article vous a montré comment obtenir une analyse de capacité basée sur une colonne de regroupement dans une seule fenêtre de rapport. Cependant, une fois que vous avez fini de lire l'article,
vous avez peut-être réalisé que le message vous a donné l'analyse que vous souhaitiez, mais un graphique de contrôle distinct a été fourni pour chaque phase.
Peut-être que vous recherchiez vraiment un tableau de contrôle monophasé avec les limites de spécification tracées sur le graphique...
L'une des fonctionnalités les plus intéressantes de JMP est son langage de script flexible. Grâce à l'utilisation du langage de script JMP (JSL) , vous pouvez créer le type de graphique que vous recherchez. Cet article de blog détaille le script nécessaire pour produire ce graphique de contrôle monophasé avec les limites de spécification tracées sur le graphique .
Exemple : Impression de texte dans des livres
Dans mon article de blog « Limites de spécification de processus qui diffèrent en fonction d'une colonne de regroupement », j'ai présenté un exemple de processus d'impression. Examinons cet exemple. Les variations dans le processus d'impression peuvent entraîner une distorsion de la ligne, notamment des problèmes d'inclinaison, d'épaisseur et de longueur. Pour cet exemple, nous allons considérer la longueur de la ligne. Si la ligne est trop longue, la phrase peut déborder de la page. Si la ligne est trop courte, il y aura beaucoup d'espace perdu sur la page.
Pour ces données particulières, nous avons deux tailles de livres différentes. Les livres à couverture rigide ont une largeur de 17,78 cm. Les livres de poche ont une largeur de 13,97 cm. La longueur des lignes d'un livre à couverture rigide est considérée comme bonne si sa longueur imprimée est de 16 cm +/- 0,2 cm. La longueur des lignes d'un livre de poche est considérée comme bonne si sa longueur imprimée est de 12 +/- 0,4 cm. À chaque tirage, le premier et le dernier livre sont pris en compte pour la mesure. Les longueurs des lignes sont mesurées sur une page spécifiée au milieu de chaque livre.

Analyse
Pour créer un graphique de contrôle de phase pour cet exemple, sélectionnez Générateur de graphiques de contrôle dans le menu Qualité et processus. Faites glisser Longueur vers Y. Faites glisser Type vers Phase. Faites glisser Exécution vers l'axe des x.

Nous avons appris dans le billet de blog intitulé « Limites de spécification de processus qui diffèrent en fonction d'une colonne de regroupement » que nous ne pouvons pas utiliser la propriété de colonne de limite de spécification ou la commande Limites de spécification car ces commandes s'appliquent à l'ensemble de la colonne (dans ce cas, la longueur). Cela signifie que les deux phases auraient les mêmes limites de spécification, ce qui n'est pas ce que nous voulons. Par conséquent, nous devons les ajouter via un script.
Obtenir le script de la carte de contrôle
Pour obtenir le script qui génère ce graphique, sélectionnez « Enregistrer le script dans la fenêtre de script » dans le triangle rouge à côté de Control Chart Builder. Le script suivant vous est fourni.
Control Chart Builder(
Show Capability( 0 ),
Variables( Subgroup( :Run ), Y( :Length ), Phase( :Type ) ),
Chart( Position( 1 ) ),
Chart( Position( 2 ) ),
SendToReport(
Dispatch(
{},
"Control Chart Builder",
FrameBox,
{DispatchSeg(
TextSeg( 3 ),
{Line Color( "None" ), Fill Color( "None" )}
), DispatchSeg(
TextSeg( 4 ),
{Line Color( "None" ), Fill Color( "None" )}
)}
)
)
);
Pour rendre le script plus robuste et plus facile à utiliser pour nos besoins, nous allons ajouter quelques éléments à ce script. Nous ajoutons du code avant le script pour ouvrir les tables de données nécessaires (les données réelles et la table des limites de spécifications dont nous parlerons plus tard), attribuer un handle au script, pointer le script vers la table de données qui nous intéresse et ajouter un handle au rapport.
dt=Open("SpecChange.jmp"); //actual data
dtSpec=Open("specChangelimits.jmp"); //data containing specification limits
obj=dt<<CONTROL chart="" builder=""></CONTROL>
<P> </P>
<P>Ensuite, nous devons déterminer comment ajouter les limites de spécification à ce script existant.</P>
<H3 id="toc-hId--476198926" id="toc-hId--1762693420">Commande de ligne H</H3>
<P>Par défaut dans <A href="https://www.jmp.com/en_us/software/data-analysis-software.html" target="_self" rel="noopener noreferrer">JMP</A> , les lignes de limites de spécifications sont ajoutées en tant que lignes de référence. Vous pouvez envisager d'ajouter des lignes de référence via JSL. Si vous essayez cela, vous découvrirez que cela ne vous donne pas non plus ce que vous voulez. Comme pour les méthodes mentionnées précédemment, les lignes de référence s'appliquent à l'ensemble du graphique et seraient donc présentes dans les deux phases (livre relié et livre de poche). Au lieu de cela, nous pouvons réaliser des lignes de spécifications distinctes pour chaque phase au moyen d'un segment de ligne. Le segment de ligne particulier que nous voulons utiliser est H Line. La commande H Line a la forme suivante :</P>
<P> </P>
<CODE class=" language-jsl">H Line( x1, x2, y);
Il trace une ligne horizontale en y de x1 à x2 à travers tout le cadre.
Déterminer les valeurs de x1 et x2
Nous pouvons tirer parti des informations que JMP connaît déjà. La carte de contrôle sait déjà ce que sont x1 et x2 pour les livres à couverture rigide et les livres de poche car elle a déjà tracé des lignes de limite de contrôle sur le graphique. Nous pouvons utiliser ces segments de ligne existants pour déterminer x1 et x2.
actLineSeg=(rpt[FrameBox(2)]<<XPATH>0, //if the description contains the word average
actx=Insert(actx , arg(actLineSeg,i)<<GET x="" values=""></GET></XPATH>
<P>Dans le code ci-dessus, nous trouvons d'abord les segments de ligne pour le graphique d'emplacement. Ensuite, nous obtenons les descriptions de chaque segment de ligne. Nous créons deux listes actx et actPhase. Lorsque la description contient le mot « Moyenne », les valeurs x du segment de ligne sont stockées dans actx et l'étiquette de phase est stockée dans actPhase.</P>
<H3 id="toc-hId-1298808436" id="toc-hId-1722927250">Obtention de l'argument y pour la ligne H</H3>
<P>La méthode que vous utiliserez pour obtenir y sera déterminée par la manière dont vous avez stocké ces informations. Pour les besoins de cet exemple et de cet article de blog, nous partirons du principe que ces informations sont stockées dans une table de données distincte, comme c'était le cas dans l'article de blog « <A href="https://community.jmp.com/t5/JMPer-Cable/Process-specification-limits-that-differ-based-on-a-grouping/ba-p/36656" target="_self">Limites de spécification de processus qui diffèrent en fonction d'une colonne de regroupement</A> ».</P>
<P> </P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="specChange2.png" style="width: 297px;"><span class="lia-inline-image-display-wrapper" image-alt="specChange2.png" style="width: 297px;"><img src="https://us.v-cdn.net/6038925/uploads/images/5995i8FBEFD91C35B15EE/specChange2.png" role="button" title="specChange2.png" alt="specChange2.png" /></span></SPAN></P>
<P> </P>
<P>Nous devrons faire correspondre la valeur de actPhase (obtenue avec le script précédent) avec la colonne « Type » dans notre tableau de données des limites de spécification. Votre variable de phase ne s'appellera pas toujours « Type ». Pour rendre le JSL plus générique afin qu'il puisse être utilisé dans d'autres exemples, nous pouvons obtenir le nom de la variable de phase à partir du rapport du générateur de graphiques de contrôle. Plus précisément, nous pouvons extraire ces informations des étiquettes de phase qui apparaissent directement au-dessus du graphique.</P>
<P> </P>
<CODE class=" language-jsl">actPhaseName=(rpt[GraphBuilderBox(1)]<<XPATH></XPATH>
<P>Une fois la ligne appropriée dans le tableau des limites de spécification déterminée, nous pouvons obtenir les valeurs de la limite de spécification inférieure, de la cible et de la limite de spécification supérieure à partir des colonnes LSL, Cible et USL dans le tableau de données des limites de spécification.</P>
<P> </P>
<CODE class=" language-jsl">for(j=1, j<=narg(actx),j++, //for every argument of actx
for(k=1, k<=nrows(dtSpec), k++, //for every row of the specification data table
if(arg(actPhase,j)==Column(dtSpec, actPhaseName)[k],
//if actPhase is equal to Type in the specification table
H Line( arg(actx,j)[1], arg(actx,j)[2], Column(dtSpec, "LSL")[k] );
H Line( arg(actx,j)[1], arg(actx,j)[2], Column(dtSpec, "Target")[k]);
H Line( arg(actx,j)[1], arg(actx,j)[2], Column(dtSpec, "USL")[k] );
);
);
);
Script graphique
Comment utiliser les lignes H dans notre script ? Les commandes HLine doivent être intégrées dans une commande de script graphique. Les scripts graphiques permettent d'ajouter des éléments graphiques à un cadre existant dans une fenêtre de rapport. Nous ajouterons une description au script et choisirons la couleur du stylo pour les lignes de limite de spécification. Nous pouvons également déterminer l'ordre des lignes de grille et l'ordre des lignes de référence si nécessaire. Le script graphique peut être envoyé à la fenêtre du générateur de cartes de contrôle via la commande SendTo Report.
obj<<SENDTOREPORT></SENDTOREPORT>
<H3 id="toc-hId--1221151498" id="toc-hId-913580624">Conclusion</H3>
<P>En rassemblant tous ces éléments, nous obtenons le script final suivant :</P>
<P> </P>
<CODE class=" language-jsl">dt=Open("SpecChange.jmp"); //actual data
dtSpec=Open("specChangelimits.jmp"); //data containing specification limits
obj=dt<<CONTROL chart="" builder="">0, //if the description contains the word average
actx=Insert(actx , arg(actLineSeg,i)<<GET x="" values=""></GET></CONTROL>
<P>L’exécution de ce script donne les résultats suivants.</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary." style="width: 686px;"><span class="lia-inline-image-display-wrapper" image-alt="Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary." style="width: 686px;"><img src="https://us.v-cdn.net/6038925/uploads/images/5996i6790A59F4F9F1592/specchangefinished.png" width="686" height="346" role="button" title="specchangefinished.png" alt="Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary." /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Note: The specification limits are difficult to see for hardcover since all lines are so close together. You can alter the Y axis through the interface or JSL so that the lines can be seen more clearly if necessary.</span></span><SPAN class="lia-inline-image-caption" onclick="event.preventDefault();">Remarque : les limites de spécification sont difficiles à voir pour les livres à couverture rigide, car toutes les lignes sont très proches les unes des autres. Vous pouvez modifier l'axe Y via l'interface ou JSL afin que les lignes soient visibles plus clairement si nécessaire.</SPAN></SPAN></P>
<P>Vous pouvez voir sur l'image ci-dessus qu'un ensemble de limites de spécification apparaît pour le livre à couverture rigide (15,98, 16, 16,02) et qu'un ensemble différent de limites de spécification apparaît pour le livre de poche (11,6, 12, 12,4).</P>
<P>Ce script est générique dans le sens où vous pouvez avoir autant de niveaux de phase que vous le souhaitez, les niveaux peuvent être nommés comme vous le souhaitez et la colonne de phase peut être nommée comme vous le souhaitez. Cependant, le script nécessite que vos limites de spécification soient stockées dans une table de données distincte. La table de données des limites de spécification nécessite qu'il y ait 1 ligne par niveau de phase. Les noms des niveaux de phase doivent correspondre aux noms de niveau affichés dans le rapport CCB. La table de données doit contenir des colonnes intitulées LSL, Target et USL qui stockent respectivement la limite de spécification inférieure, la cible et la limite de spécification supérieure.</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="cartoon_thought_bubble_3.jpg" style="width: 150px;"><span class="lia-inline-image-display-wrapper" image-alt="cartoon_thought_bubble_3.jpg" style="width: 150px;"><img src="https://us.v-cdn.net/6038925/uploads/images/6004i22873971DFC74A41/cartoon_thought_bubble_3.jpg" role="button" title="cartoon_thought_bubble_3.jpg" alt="cartoon_thought_bubble_3.jpg" /></span></SPAN></P>