Möglicherweise haben Sie den Blog-Beitrag mit dem Titel „ Prozessspezifikationsgrenzen, die sich je nach Gruppierungsspalte unterscheiden “ gelesen und gedacht
In diesem Beitrag wurde Ihnen gezeigt, wie Sie eine Fähigkeitsanalyse basierend auf einer Gruppierungsspalte in einem einzigen Berichtsfenster erhalten. Nachdem Sie den Beitrag jedoch zu Ende gelesen haben,
Möglicherweise haben Sie festgestellt, dass der Beitrag Ihnen die gewünschte Analyse lieferte, aber für jede Phase ein separates Kontrolldiagramm bereitgestellt wurde.
Vielleicht haben Sie wirklich nach einem einphasigen Kontrolldiagramm gesucht, bei dem die Spezifikationsgrenzen in der Grafik dargestellt sind …
Eine der großartigen Funktionen von JMP ist seine flexible Skriptsprache. Mithilfe der JMP Scripting Language (JSL) können Sie den gewünschten Diagrammtyp erstellen. In diesem Blogbeitrag wird das Skript beschrieben, das zum Erstellen dieses einphasigen Kontrolldiagramms mit den im Diagramm dargestellten Spezifikationsgrenzen erforderlich ist.
Beispiel: Drucken von Text in Büchern
In meinem Blogbeitrag „ Prozessspezifikationsgrenzen, die sich je nach Gruppierungsspalte unterscheiden “ habe ich ein Beispiel aus einem Druckprozess vorgestellt. Sehen wir uns dieses Beispiel noch einmal an. Abweichungen im Druckprozess können zu Verzerrungen der Linie führen, darunter Schiefe, Dicke und Längenprobleme. In diesem Beispiel werden wir die Länge der Linie berücksichtigen. Wenn die Linie zu lang ist, läuft der Satz möglicherweise über die Seite hinaus. Wenn die Linie zu kurz ist, wird viel Platz auf der Seite verschwendet.
Für diese speziellen Daten haben wir zwei verschiedene Buchgrößen. Die Hardcover-Bücher sind 17,78 cm breit. Die Taschenbücher sind 13,97 cm breit. Die Zeilenlänge in einem Hardcover-Buch gilt als gut, wenn es eine gedruckte Länge von 16 cm +/- 0,2 cm hat. Die Zeilenlänge in einem Taschenbuch gilt als gut, wenn es eine gedruckte Länge von 12 +/- 0,4 cm hat. Bei jedem Druckdurchgang werden das erste und das letzte Buch zur Messung herangezogen. Die Zeilenlängen werden auf einer bestimmten Seite in der Mitte jedes Buches gemessen.

Analyse
Um ein Phasenkontrolldiagramm für dieses Beispiel zu erstellen, wählen Sie „Kontrolldiagramm-Generator“ aus dem Menü „Qualität und Prozess“. Ziehen Sie „Länge“ auf Y. Ziehen Sie „Typ“ auf „Phase“. Ziehen Sie „Ausführung“ auf die X-Achse.

Aus dem Blogbeitrag „ Prozessspezifikationsgrenzen, die sich je nach Gruppierungsspalte unterscheiden “ haben wir gelernt, dass wir die Spalteneigenschaft „Spezifikationsgrenze“ oder den Befehl „Spezifikationsgrenzen“ nicht verwenden können, da diese Befehle für die gesamte Spalte (in diesem Fall Länge) gelten. Das bedeutet, dass beide Phasen dieselben Spezifikationsgrenzen hätten, was wir nicht wollen. Daher müssen wir diese per Skript hinzufügen.
Abrufen des Kontrolldiagrammskripts
Um das Skript zu erhalten, das dieses Diagramm erstellt, wählen Sie „Skript im Skriptfenster speichern“ aus dem roten Dreieck neben „Control Chart Builder“. Sie erhalten das folgende Skript.
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" )}
)}
)
)
);
Um das Skript robuster und für unsere Zwecke einfacher zu verwenden zu machen, werden wir diesem Skript einige Dinge hinzufügen. Wir fügen vor dem Skript Code hinzu, um die erforderlichen Datentabellen zu öffnen (die eigentlichen Daten und die Tabelle mit den Spezifikationsgrenzen, über die wir später sprechen werden), weisen dem Skript einen Handle zu, richten das Skript auf die betreffende Datentabelle und fügen dem Bericht einen Handle hinzu.
dt=Open("SpecChange.jmp"); //actual data
dtSpec=Open("specChangelimits.jmp"); //data containing specification limits
obj=dt<<CONTROL chart="" builder=""></CONTROL>
<P> </P>
<P>Als Nächstes müssen wir herausfinden, wie wir die Spezifikationsgrenzen zu diesem vorhandenen Skript hinzufügen.</P>
<H3 id="toc-hId--476198926" id="toc-hId--1762693419">H-Linienkommando</H3>
<P>Standardmäßig werden in <A href="https://www.jmp.com/en_us/software/data-analysis-software.html" target="_self" rel="noopener noreferrer">JMP</A> Spezifikationsgrenzlinien als Referenzlinien hinzugefügt. Sie können Referenzlinien auch über JSL hinzufügen. Wenn Sie dies versuchen, werden Sie feststellen, dass Sie damit auch nicht das gewünschte Ergebnis erzielen. Wie bei den zuvor erwähnten Methoden gelten Referenzlinien für das gesamte Diagramm und wären daher in beiden Phasen (Hardcover und Taschenbuch) vorhanden. Stattdessen können wir separate Spezifikationslinien für jede Phase mithilfe eines Liniensegments erstellen. Das spezielle Liniensegment, das wir verwenden möchten, ist die H-Linie. Der Befehl „H-Linie“ hat die folgende Form:</P>
<P> </P>
<CODE class=" language-jsl">H Line( x1, x2, y);
Es zeichnet eine horizontale Linie bei y von x1 bis x2 durch den gesamten Rahmen.
Bestimmen Sie die Werte für x1 und x2
Wir können die Informationen nutzen, die JMP bereits kennt. Die Kontrollkarte weiß bereits, was x1 und x2 für Hardcover und Taschenbuch sind, da sie bereits Kontrollgrenzlinien in das Diagramm eingezeichnet hat. Wir können diese vorhandenen Liniensegmente verwenden, um x1 und x2 zu bestimmen.
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>Im obigen Code finden wir zuerst die Liniensegmente für das Lagediagramm. Als nächstes erhalten wir die Beschreibungen für jedes Liniensegment. Wir erstellen zwei Listen: actx und actPhase. Wenn die Beschreibung das Wort „Durchschnitt“ enthält, werden die x-Werte aus dem Liniensegment in actx und die Phasenbezeichnung in actPhase gespeichert.</P>
<H3 id="toc-hId-1298808436" id="toc-hId-1722927251">Abrufen des y-Arguments für die H-Linie</H3>
<P>Die Methode, die Sie verwenden, um y zu erhalten, hängt davon ab, wie Sie diese Informationen gespeichert haben. Für die Zwecke dieses Beispiels und Blogbeitrags gehen wir davon aus, dass diese Informationen in einer separaten Datentabelle gespeichert sind, genau wie im Blogbeitrag „ <A href="https://community.jmp.com/t5/JMPer-Cable/Process-specification-limits-that-differ-based-on-a-grouping/ba-p/36656" target="_self">Prozessspezifikationsgrenzen, die sich je nach Gruppierungsspalte unterscheiden</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>Wir müssen den Wert von actPhase (erhalten mit dem vorherigen Skript) mit der Spalte „Typ“ in unserer Datentabelle mit Spezifikationsgrenzen abgleichen. Ihre Phasenvariable wird nicht immer „Typ“ heißen. Um das JSL allgemeiner zu gestalten, damit es in anderen Beispielen verwendet werden kann, können wir den Namen der Phasenvariable aus dem Bericht des Kontrolldiagramm-Generators abrufen. Insbesondere können wir diese Informationen aus den Phasenbeschriftungen ziehen, die direkt über dem Diagramm angezeigt werden.</P>
<P> </P>
<CODE class=" language-jsl">actPhaseName=(rpt[GraphBuilderBox(1)]<<XPATH></XPATH>
<P>Nachdem die entsprechende Zeile in der Spezifikationsgrenzentabelle bestimmt wurde, können wir die Werte der unteren Spezifikationsgrenze, des Ziels und der oberen Spezifikationsgrenze aus den Spalten LSL, Ziel und USL in der Spezifikationsgrenzen-Datentabelle abrufen.</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] );
);
);
);
Grafisches Skript
Wie verwenden wir die H-Linien in unserem Skript? Die HLine-Befehle müssen in einen Grafikskriptbefehl eingebettet werden. Mit Grafikskripten fügen wir grafische Elemente zu einem vorhandenen Rahmen in einem Berichtsfenster hinzu. Wir fügen dem Skript eine Beschreibung hinzu und wählen die Stiftfarbe für die Spezifikationsgrenzlinien aus. Bei Bedarf können wir auch die Reihenfolge der Gitterlinien und der Referenzlinien bestimmen. Das Grafikskript kann über den Befehl „SendTo Report“ an das Fenster des Kontrolldiagrammgenerators gesendet werden.
obj<<SENDTOREPORT></SENDTOREPORT>
<H3 id="toc-hId--1221151498" id="toc-hId-913580625">Abschluss</H3>
<P>Wenn wir alle diese Teile zusammenfügen, erhalten wir das folgende fertige Skript:</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>Das Ausführen dieses Skripts führt zu den folgenden Ergebnissen.</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();">Hinweis: Bei gebundenen Ausgaben sind die Spezifikationsgrenzen schwer zu erkennen, da alle Zeilen sehr nah beieinander liegen. Sie können die Y-Achse über die Schnittstelle oder JSL anpassen, sodass die Zeilen bei Bedarf deutlicher zu erkennen sind.</SPAN></SPAN></P>
<P>Wie Sie der Abbildung oben entnehmen können, gilt für die gebundene Ausgabe ein bestimmter Satz Spezifikationsgrenzen (15,98, 16, 16,02) und für die Taschenbuchausgabe ein anderer Satz Spezifikationsgrenzen (11,6, 12, 12,4).</P>
<P>Dieses Skript ist generisch in dem Sinne, dass Sie so viele Phasenebenen haben können, wie Sie möchten, die Ebenen können beliebig benannt werden und die Phasenspalte kann beliebig benannt werden. Das Skript erfordert jedoch, dass Ihre Spezifikationsgrenzen in einer separaten Datentabelle gespeichert werden. Die Datentabelle mit den Spezifikationsgrenzen erfordert, dass pro Phasenebene eine Zeile vorhanden ist. Die Namen der Phasenebenen müssen mit den Ebenennamen übereinstimmen, die im CCB-Bericht angezeigt werden. Die Datentabelle muss Spalten mit den Titeln LSL, Ziel und USL enthalten, die jeweils die untere Spezifikationsgrenze, das Ziel und die obere Spezifikationsgrenze speichern.</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>