Débutant : comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processusBonjour. Je suis très nouveau. Avant de me lancer dans l'apprentissage des scripts, j'aimerais avoir la confirmation que j'aborde cette question correctement. Nous souhaitons un moyen simple de créer le rapport de distribution simple ci-dessous qui peut être créé pour une colonne sélectionnée par l'utilisateur, généralement 30 points de données, qui ressemble à l'image ci-dessous et nous espérons supprimer les éléments avec des lignes rouges :

Un exemple de tableau de données est :

Vous trouverez ci-dessous le script créé par le système lorsque j'ai utilisé : Enregistrer le script/Dans la table de données :
Distribution(
Distribution continue (
Colonne( :OD ),
Disposition horizontale (1),
Histogramme( 0 ),
Verticale( 0 ),
Capacité du processus (
Utiliser les spécifications des propriétés des colonnes,
Analyse de la capacité du processus (non-conformité (0))
)
),
Histogrammes uniquement,
EnvoyerAuRapport(
Dispatch( {"OD", "Capacité du processus", "Capacité OD", "Histogramme"}, "1",
Boîte à échelle,
{Min( 2,1388234375 ), Max( 2,1636765625 ), Inc( 0,005 ),
Tiques mineures (5)}
)
)
);
Je suppose que cela ne peut pas être fait sans script. Si ce n'est pas le cas, merci de me le faire savoir.
Ce que je prévois de faire, c'est d'essayer d'apprendre à écrire un script pour que l'utilisateur puisse sélectionner la colonne à utiliser, là où le script ci-dessus utilise uniquement la colonne « OD ». Cela devrait, je l'espère, donner le rapport de base ci-dessus en exécutant le script.
Commencez ensuite à rechercher des modifications de script pour supprimer les entrées que nous avons barrées en rouge.
Cette approche est-elle naïve ? Existe-t-il une meilleure façon de l’aborder ?
Merci pour toute contribution,
Accorder
Ingénierie de la qualité et des procédésRé: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutantsPour les tables de capacité, c'est assez simple car vous pouvez utiliser un filtre tel que
Contains({"Cpk", "Cp"}, Index)
Mais cela ne fonctionne pas pour la zone de tableau sous Résumé du processus car elle n'a pas de noms de colonnes... vous ne pouvez donc pas facilement utiliser les préréglages par exemple.
Utilisez donc des scripts. Avec les scripts, vous pouvez ajouter ces en-têtes à la zone de tableau, puis les utiliser pour le filtrage
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
mycol = "NPN1";
dist = dt << Distribution(
Ignore Platform Preferences(1),
Continuous Distribution(
Column(Eval(mycol)),
Quantiles(0),
Summary Statistics(0),
Horizontal Layout(1),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(
Use Column Property Specs,
Process Capability Analysis(Nonconformance(0))
)
)
);
// modify axis
Report(dist)[OutlineBox("Histogram"), AxisBox(1)] << Min(100) << Max(130) << Inc(1) << Minor Ticks(5);
// Filter table boxes
Report(dist)[OutlineBox("Within Sigma Capability"), TableBox(1)] << Filter Where(Contains({"Cpk", "Cp"}, Index));
Report(dist)[OutlineBox("Overall Sigma Capability"), TableBox(1)] << Filter Where(Contains({"Ppk", "Pp"}, Index));
Report(dist)[OutlineBox("Process Summary"), TableBox(1), StringColBox(1)] << Set Heading("Stat");
Report(dist)[OutlineBox("Process Summary"), TableBox(1), NumberColBox(1)] << Set Heading("Value");
Report(dist)[OutlineBox("Process Summary"), TableBox(1)] << Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat));

Ré: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutantsMerci, Jarmo, d'avoir pris le temps de faire cela. Cela me donne une excellente base à appliquer à notre table. Je vous suis reconnaissant de votre aide.
Je vais jouer avec et voir si je peux comprendre si je peux faire une invite utilisateur pour la colonne cible, car le nom varie, et m'appuyer sur cela. Au minimum, je peux personnaliser le script pour certains scénarios de pièces avec mes connaissances actuelles (limitées). Pour nos utilisateurs, cela peut même être mieux pour eux. Quoi qu'il en soit, merci encore.
Ré: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutantsUne fois que vous avez commencé à utiliser JSL, la création d'une interface utilisateur simple pour quelque chose comme cela est assez simple (encore plus si vous utilisez Column Dialog() mais je n'aime pas personnellement ça). Cet exemple contient des techniques plus avancées mais fera très probablement ce que vous voulez faire. Il y a quelques vérifications de bon sens que vous voudrez peut-être ajouter, comme la vérification des limites de spécifications, mais quelque chose comme cela peut servir de point de départ
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
run_custom_dist = Expr(
dist = dt << Distribution(
Ignore Platform Preferences(1),
Continuous Distribution(
Column(Eval(mycol)),
Quantiles(0),
Summary Statistics(0),
Horizontal Layout(1),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(Use Column Property Specs, Process Capability Analysis(Nonconformance(0)))
)
);
// modify axis
Report(dist)[Outline Box("Histogram"), AxisBox(1)] << Min(100) << Max(130) << Inc(1) << Minor Ticks(5);
// Filter table boxes
Report(dist)[Outline Box("Within Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Cpk", "Cp"}, Index));
Report(dist)[Outline Box("Overall Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Ppk", "Pp"}, Index));
Report(dist)[Outline Box("Process Summary"), Table Box(1), String Col Box(1)] << Set Heading("Stat");
Report(dist)[Outline Box("Process Summary"), Table Box(1), Number Col Box(1)] << Set Heading("Value");
Report(dist)[Outline Box("Process Summary"), Table Box(1)] << Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat));
);
nw = New Window("UI",
H List Box(
Panel Box("Pick Columns",
window:fcs = Filter Col Selector(dt, << Character(0))
),
Panel Box("Cast",
Lineup Box(N Col(2),
Button Box("Column", << Set Function(function({this},
(this << sib) << Append(window:fcs << get selected)
))),
window:clb = Col List Box(dt, Min Items(1), Max items(1), N Lines(2), << Modeling Type({"Continuous"}))
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK",
sel = window:clb << get items;
If(N Items(sel) > 0,
mycol = sel[1];
run_custom_dist;
window:fcs << close window;
);
),
Button Box("Cancel", window:fcs << close window);
)
)
)
);
Write();
Le guide de script est une bonne source pour démarrer avec JSL
Ré: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutantsMerci Jarmo ! J'ai commencé à utiliser le guide de script. Je ne suis probablement pas assez patient, mais je continue à le parcourir.:)
Puis-je vous demander de montrer un autre changement ? Je pense que cela m'aidera beaucoup. Pourriez-vous compléter le script afin qu'un graphique de moyenne mobile soit ajouté sous les capacités Sigma (essentiellement en bas) ? J'ai fait un exemple ci-dessous avec le NPN1 du fichier Semiconductor. Il me manque quelque chose dans les légendes du script et je pense que cela m'aidera à le comprendre.

Je peux imaginer que tu vas lever les yeux au ciel Comme la question suivante montre fondamentalement que je ne comprends pas bien JMP. Un script comme celui-ci est-il plus logique d'être un fichier de script qu'un utilisateur ouvre et exécute ou est-il plus logique d'enregistrer ce script dans la table de données et de l'exécuter à partir de là ? Est-ce juste une préférence ou y a-t-il un avantage ?
S'il existe une autre façon de reconnaître votre aide en plus d'un Kudo, n'hésitez pas à me le faire savoir. Votre aide m'a épargné bien des maux de tête.
Merci encore,
Accorder
Ré: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutantsVous pouvez créer quelque chose comme cela en utilisant Workflow Builder , donc en fonction de ce que vous faites en utilisant cela, cela peut être une bonne idée (et c'est une bonne pratique d'utiliser JMP).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
run_custom_dist = Expr(
vlb = V List Box(
dist = dt << Distribution(
Ignore Platform Preferences(1),
Continuous Distribution(
Column(Eval(mycol)),
Quantiles(0),
Summary Statistics(0),
Horizontal Layout(1),
Histogram(0),
Vertical(0),
Outlier Box Plot(0),
Process Capability(Use Column Property Specs, Process Capability Analysis(Nonconformance(0)))
)
),
ccb = dt << Control Chart Builder(
Show Two Shewhart Charts(0),
Include Missing Categories(0),
Show Limit Summaries(0),
Show Capability(0),
Variables(Y(Eval(mycol))),
Chart(Points(Statistic("Moving Range")), Limits(Sigma("Moving Range"))),
Show Control Panel(0)
)
);
// modify axis
Report(dist)[Outline Box("Histogram"), AxisBox(1)] << Min(100) << Max(130) << Inc(1) << Minor Ticks(5);
// Filter table boxes
Report(dist)[Outline Box("Within Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Cpk", "Cp"}, Index));
Report(dist)[Outline Box("Overall Sigma Capability"), Table Box(1)] << Filter Where(Contains({"Ppk", "Pp"}, Index));
Report(dist)[Outline Box("Process Summary"), Table Box(1), String Col Box(1)] << Set Heading("Stat");
Report(dist)[Outline Box("Process Summary"), Table Box(1), Number Col Box(1)] << Set Heading("Value");
Report(dist)[Outline Box("Process Summary"), Table Box(1)] << Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat));
nw = new window("",
vlb
);
);
nw = New Window("UI",
H List Box(
Panel Box("Pick Columns",
window:fcs = Filter Col Selector(dt, << Character(0))
),
Panel Box("Cast",
Lineup Box(N Col(2),
Button Box("Column", << Set Function(function({this},
(this << sib) << Append(window:fcs << get selected)
))),
window:clb = Col List Box(dt, Min Items(1), Max items(1), N Lines(2), << Modeling Type({"Continuous"}))
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK",
sel = window:clb << get items;
If(N Items(sel) > 0,
mycol = sel[1];
run_custom_dist;
window:fcs << close window;
);
),
Button Box("Cancel", window:fcs << close window);
)
)
)
);
Write();
La manière dont quelque chose comme cela doit être utilisé dépend entièrement de vous, pour moi, il serait peut-être plus logique d'avoir un flux de travail pour cela (corriger la distribution pourrait être un peu difficile sans JSL pour le flux de travail) OU de créer un module complémentaire que l'utilisateur pourrait exécuter sur sa propre table selon ses besoins. Pour les besoins du module complémentaire, je laisserais très probablement l'utilisateur sélectionner plusieurs colonnes ou utiliser le sélecteur de colonnes et ce serait une bonne idée d'implémenter des vérifications supplémentaires (la table est-elle ouverte, les colonnes sélectionnées ont-elles des limites de spécification, etc.).
Modifier : valeur codée en dur corrigée à partir du générateur de graphiques de contrôle
Ré: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutantsMerci Jarmo. Cela me donne une excellente base sur laquelle commencer à travailler. J'ai modifié ce code et cela m'aide vraiment. Voir ce nouveau code de fenêtre m'a vraiment aidé à résoudre quelque chose qui me manquait.
Je vais également travailler sur ce générateur de workflow. Je n'y avais pas encore pensé du tout. En fin de compte, d'après ce que je sais maintenant, un module complémentaire semble être le meilleur choix pour notre groupe, une fois que j'y serai...
Encore une fois, j'apprécie vraiment toute votre aide et je ne peux pas vous remercier assez,
Accorder
Ré: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutantsJ'ai pensé qu'il serait judicieux de demander ici au lieu de créer un nouveau sujet...
J'ai mis en place un bon processus et créé un module complémentaire pour notre groupe qui est en cours d'utilisation. En essayant d'en savoir plus, je cherche à ajouter uniquement la ligne « Total Outside » et uniquement la colonne « Expected Comprehensive PPM » de la section Non-conformité (soulignée en rouge dans la capture ci-dessous) :

Je peux afficher la boîte, mais aucune valeur... Vous trouverez ci-dessous la section du script (lignes 50 à 52) pour cela et une capture d'écran :
Report(dist)[Outline Box("Nonconformance"), Table Box(1), String Col Box(1)] << Set Heading("Portion");
Report(dist)[Outline Box("Nonconformance"), Table Box(1), Number Col Box(1)] << Set Heading("Expected Overall PPM");
Report(dist)[Outline Box("Nonconformance"), Table Box(1)] << Filter Where(Contains({"Total Outside"}, Expected Overall PPM));
Notez que dans la capture d'écran, des colonnes « Attendu dans % » et « Attendu globalement % » ont également été ajoutées, ce que je ne veux pas.

Je sais qu'il me manque quelque chose de basique... J'ai essayé d'utiliser les propriétés des éléments pour comparer ce qui est différent, mais je ne vois rien dans la valeur. J'ai également essayé l'outil Enregistrer le script pour voir si cela aide à donner un indice, mais il utilise une commande Dispatch et je n'arrive pas à le faire fonctionner non plus...
De plus, est-il possible de placer la section « Non-conformité » directement sous le « Résumé du processus » et au-dessus de la « Capacité Sigma globale » ? Je ne le pense pas d'après mes recherches, mais il se peut que j'aie raté quelque chose ici aussi.

Merci,
Accorder
Ré: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutantsVous pouvez modifier les colonnes que vous souhaitez afficher en premier en utilisant JMP et en vérifiant le script créé par JMP pour voir SI JMP peut capturer ce que vous souhaitez faire (dans ce cas, il le peut). Vous pouvez alors soit le laisser au script de distribution, soit le déplacer en dehors de celui-ci.

Et dans votre script, cela pourrait ressembler à ceci
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Observed %")] << Visibility("Collapse");
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Expected Within %")] << Visibility("Collapse");
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Expected Overall %")] << Visibility("Collapse");
Report(dist)[Outline Box("Nonconformance"), NumberColBox("Expected Overall PPM")] << Visibility("Visible");
Report(dist)[Outline Box("Nonconformance"), Table Box(1)] << Filter Where(Portion == "Total Outside");
Vous pouvez également utiliser la boîte de clonage pour « copier » la non-conformité
ncob = Report(dist)[Outline Box("Nonconformance")];
(Report(dist)["Process Capability","? Capability","Process Summary"] << parent) << Append(
ncob << clone box;
);
(ncob << parent) << Set(0);
</CODE><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="jthi_1-1729017828517.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><span class="lia-inline-image-display-wrapper" image-alt="jthi_1-1729017828517.png" style="width: 321px;"><img src="https://us.v-cdn.net/6038925/uploads/images/69147iBECE0693438ABAB9/jthi_1-1729017828517.png" role="button" title="jthi_1-1729017828517.png" alt="jthi_1-1729017828517.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<P>Mais si vous n'avez pas besoin des fonctionnalités de ces plateformes JMP, je vous conseille de créer un rapport personnalisé à partir de différentes parties. De cette façon, vous pouvez contrôler plus facilement l'apparence du rapport et les utilisateurs n'essaieront pas par accident d'utiliser ces fonctionnalités qui pourraient même ne pas fonctionner correctement.</P></LINGO-BODY><LINGO-SUB id="lingo-sub-805889" slang="en-US" mode="CREATE">Ré: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutants</LINGO-SUB><LINGO-BODY id="lingo-body-805889" slang="en-US" mode="CREATE"><P>Ah ! Je vais essayer de comprendre ton message et de le modifier. J'ai vu les indicateurs de visibilité dans le script Dispatch (il ressemble à ce que tu avais), mais je n'ai pas compris comment les intégrer comme tu l'as fait.</P><P> </P><P>Qu'est-ce qui vous a poussé à utiliser</P><PRE class="language-jsl"><CODE>Filter Where(Portion == "Total Outside");
et non pas une liste de légendes comme certaines autres. Par exemple :
Filter Where(Contains({"LSL", "Target", "USL", "N", "Sample Mean"}, Stat))
Merci Jarmo !
Ré: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutantsJ'ai utilisé
Filter Where(Portion == "Total Outside");
mais vous pouvez toujours utiliser Contient si vous le souhaitez (dans votre script, le problème n'était pas Contient mais utilisait la mauvaise colonne PPM global attendu au lieu de Portion pour effectuer la comparaison)
Report(dist)[Outline Box("Nonconformance"), Table Box(1)] << Filter Where(Contains({"Total Outside"}, Portion));
J'ai utilisé une comparaison égale car vous souhaitez afficher uniquement une seule ligne du tableau. Contient peut être utilisé pour plusieurs éléments et lorsque vous n'avez qu'un seul élément (comme dans ce cas), cela n'est pas nécessaire.
La raison pour laquelle je l'ai changé était quelque chose comme ceci :
Vous pourriez penser que "mais est-ce que ça a de l'importance si ça marche ?". En fait, ça n'a pas d'importance MAIS lorsque vous (ou du moins lorsque je le fais) commencerez à réfléchir au code, cela aura une certaine importance. Pour moi, il serait désormais évident qu'il n'y aura jamais plus d'un élément dans cette table (ou s'il y en a plus d'un, l' idée du filtrage doit être modifiée et cela vous fera un peu vous arrêter).
Ré: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutantsJarmo, merci pour cette excellente explication.
Ré: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutantsLes bonnes questions sont le déclencheur de bonnes publications communautaires.
Merci @GM-FPP .
Ré: Comment aborder la personnalisation de l'histogramme, de la capacité Sigma et du résumé du processus pour les débutantsMerci @hogi, j'apprécie votre message.