Potresti aver letto il post del blog intitolato " Limiti delle specifiche del processo che differiscono in base a una colonna di raggruppamento " e aver pensato
Quel post ti ha mostrato come ottenere un'analisi della capacità basata su una colonna di raggruppamento, il tutto in una singola finestra di report. Tuttavia, una volta terminato di leggere il post,
Potresti aver capito che il post ti ha fornito l'analisi che volevi, ma per ogni fase è stato fornito un grafico di controllo separato.
Forse stavi cercando davvero un diagramma di controllo monofase con i limiti di specifica tracciati sul grafico...
Una delle grandi caratteristiche di JMP è il suo linguaggio di scripting flessibile. Tramite l'uso di JMP Scripting Language (JSL) , puoi creare il tipo di grafico che stai cercando. Questo post del blog descrive in dettaglio lo script necessario per produrre quel grafico di controllo monofase con i limiti di specifica tracciati sul grafico .
Esempio: Stampa di testo nei libri
Nel mio post del blog " Limiti delle specifiche di processo che differiscono in base a una colonna di raggruppamento ", ho introdotto un esempio tratto da un processo di stampa. Esaminiamo quell'esempio. Le variazioni nel processo di stampa possono causare distorsioni nella riga, inclusi problemi di inclinazione, spessore e lunghezza. Per questo esempio, prenderemo in considerazione la lunghezza della riga. Se la riga è troppo lunga, la frase potrebbe uscire dalla pagina. Se la riga è troppo corta, ci sarà molto spazio sprecato sulla pagina.
Per questi dati particolari, abbiamo due diverse dimensioni di libro. I libri con copertina rigida sono larghi 17,78 cm. I libri con copertina flessibile sono larghi 13,97 cm. La lunghezza della riga in un libro con copertina rigida è considerata buona se ha una lunghezza stampata di 16 cm +/- 0,2 cm. La lunghezza della riga in un libro con copertina flessibile è considerata buona se ha una lunghezza stampata di 12 +/- 0,4 cm. In ogni tiratura, il primo e l'ultimo libro vengono presi per la misurazione. Le lunghezze della riga vengono misurate su una pagina specifica al centro di ogni libro.

Analisi
Per creare un grafico di controllo di fase per questo esempio, seleziona Control Chart Builder dal menu Quality and Process. Trascina Length su Y. Trascina Type su Phase. Trascina Run sull'asse x.

Abbiamo appreso dal post del blog intitolato " Limiti di specifica del processo che differiscono in base a una colonna di raggruppamento " che non possiamo usare la proprietà della colonna dei limiti di specifica o il comando Limiti di specifica perché questi comandi si applicano all'intera Colonna (in questo caso Lunghezza). Ciò significa che entrambe le fasi avrebbero gli stessi limiti di specifica, il che non è ciò che vogliamo. Pertanto, dobbiamo aggiungerli tramite scripting.
Ottenere lo script del grafico di controllo
Per ottenere lo script che produce questo grafico, seleziona "Save Script to Script Window" dal triangolo rosso accanto a Control Chart Builder. Ti viene fornito lo script seguente.
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" )}
)}
)
)
);
Per rendere lo script più robusto e più facile da usare per i nostri scopi, aggiungeremo alcune cose a questo script. Aggiungiamo codice prima dello script per aprire le tabelle dati necessarie (i dati effettivi e la tabella dei limiti delle specifiche di cui parleremo più avanti), assegniamo allo script un handle, puntiamo lo script alla tabella dati di interesse e aggiungiamo un handle al report.
dt=Open("SpecChange.jmp"); //actual data
dtSpec=Open("specChangelimits.jmp"); //data containing specification limits
obj=dt<<CONTROL chart="" builder=""></CONTROL>
<P> </P>
<P>Ora dobbiamo capire come aggiungere i limiti di specifica a questo script esistente.</P>
<H3 id="toc-hId--476198926" id="toc-hId--1762693418">Comando di linea H</H3>
<P>Di default in <A href="https://www.jmp.com/en_us/software/data-analysis-software.html" target="_self" rel="noopener noreferrer">JMP</A> , le linee di limite delle specifiche vengono aggiunte come linee di riferimento. Puoi prendere in considerazione l'aggiunta di linee di riferimento tramite JSL. Se provi a farlo, scoprirai che neanche questo ti dà ciò che desideri. Come con i metodi menzionati in precedenza, le linee di riferimento si applicano all'intero grafico e sarebbero quindi presenti in entrambe le fasi (copertina rigida e tascabile). Invece, possiamo realizzare linee di specifica separate per ogni fase tramite un segmento di linea. Il segmento di linea specifico che vogliamo usare è H Line. Il comando H Line ha la seguente forma:</P>
<P> </P>
<CODE class=" language-jsl">H Line( x1, x2, y);
Traccia una linea orizzontale in y da x1 a x2 attraverso l'intero fotogramma.
Determinare i valori per x1 e x2
Possiamo sfruttare le informazioni che JMP già conosce. Il grafico di controllo sa già cosa sono x1 e x2 sia per la copertina rigida che per la copertina flessibile perché ha già disegnato le linee di controllo limite sul grafico. Possiamo usare quei Line Segs esistenti per determinare x1 e 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>Nel codice sopra, troviamo prima i segmenti di linea per il grafico della posizione. Poi, otteniamo le descrizioni per ogni segmento di linea. Creiamo due elenchi actx e actPhase. Quando la descrizione contiene la parola "Average", i valori x del segmento di linea vengono memorizzati in actx e l'etichetta di fase viene memorizzata in actPhase.</P>
<H3 id="toc-hId-1298808436" id="toc-hId-1722927252">Ottenere l'argomento y per la linea H</H3>
<P>Il metodo che utilizzi per ottenere y sarà determinato dal modo in cui hai archiviato queste informazioni. Ai fini di questo esempio e post del blog, daremo per scontato che queste informazioni siano archiviate in una tabella dati separata, proprio come nel post del blog " <A href="https://community.jmp.com/t5/JMPer-Cable/Process-specification-limits-that-differ-based-on-a-grouping/ba-p/36656" target="_self">Limiti di specifica del processo che differiscono in base a una colonna di raggruppamento</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>Dovremo abbinare il valore di actPhase (ottenuto con lo script precedente) con la colonna "Type" nella nostra tabella dati dei limiti di specifica. La tua variabile di fase non sarà sempre chiamata "Type". Per rendere il JSL più generico in modo che possa essere utilizzato in altri esempi, possiamo ottenere il nome della variabile di fase dal report del generatore di grafici di controllo. In particolare, possiamo estrarre queste informazioni dalle etichette di fase che appaiono direttamente sopra il grafico.</P>
<P> </P>
<CODE class=" language-jsl">actPhaseName=(rpt[GraphBuilderBox(1)]<<XPATH></XPATH>
<P>Dopo aver determinato la riga appropriata nella tabella dei limiti di specifica, possiamo ottenere i valori del limite di specifica inferiore, del target e del limite di specifica superiore dalle colonne LSL, Target e USL nella tabella dati dei limiti di specifica.</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] );
);
);
);
Scrittura grafica
Come utilizziamo le linee H nel nostro script? I comandi HLine devono essere racchiusi in un comando script grafico. Gli script grafici sono il modo in cui aggiungiamo elementi grafici a un frame esistente all'interno di una finestra di report. Aggiungeremo una descrizione allo script e sceglieremo il colore della penna per le linee di limite delle specifiche. Possiamo anche determinare l'ordine delle linee della griglia e l'ordine delle linee di riferimento, se necessario. Lo script grafico può essere inviato alla finestra del generatore di grafici di controllo tramite il comando SendTo Report.
obj<<SENDTOREPORT></SENDTOREPORT>
<H3 id="toc-hId--1221151498" id="toc-hId-913580626">Conclusione</H3>
<P>Mettendo insieme tutti questi pezzi abbiamo la seguente sceneggiatura finita:</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'esecuzione di questo script produce i seguenti risultati.</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();">Nota: i limiti delle specifiche sono difficili da vedere per la copertina rigida poiché tutte le linee sono molto vicine tra loro. È possibile modificare l'asse Y tramite l'interfaccia o JSL in modo che le linee possano essere viste più chiaramente, se necessario.</SPAN></SPAN></P>
<P>Dall'immagine soprastante si può vedere che per la versione con copertina rigida è presente un set di limiti di specifica (15,98, 16, 16,02), mentre per la versione tascabile è presente un set di limiti di specifica diverso (11,6, 12, 12,4).</P>
<P>Questo script è generico nel senso che puoi avere tutti i livelli di fase che desideri, i livelli possono essere denominati come vuoi e la colonna di fase può essere denominata come vuoi. Tuttavia, lo script richiede che i limiti di specifica siano archiviati in una tabella dati separata. La tabella dati dei limiti di specifica richiede che ci sia 1 riga per livello di fase. I nomi dei livelli di fase devono corrispondere ai nomi dei livelli mostrati nel report CCB. La tabella dati deve contenere colonne intitolate LSL, Target e USL che archiviano rispettivamente il limite di specifica inferiore, il target e il limite di specifica superiore.</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>