
Mi imbatto in un problema in cui voglio vedere come sarebbero i miei vecchi limiti di controllo rispetto ai limiti di controllo fissi attuali o nuovi per un insieme di carte di controllo. In genere aggiungerei linee di riferimento a ciascun grafico, ma penso che potrebbe esserci un modo migliore, utilizzando un messaggio platfrom a lungo dimenticato (almeno per me).
All'inizio di quest'anno stavo giocando con l'idea di come sarebbe stato aggiungere una nuova proprietà di colonna, in questo caso Action and Alert Limts per i grafici di monitoraggio ambientale, e quindi utilizzare quella proprietà di colonna come linea di riferimento nei grafici di controllo. Collegamento al blog EM
Mentre cercavo qualcosa di completamente diverso nello Scripting Index, mi sono imbattuto in una funzione chiamata "Aggiungi limiti". Per quanto ne so, questa funzione esiste da molto tempo, almeno prima della v14, e può essere utilizzata per inviare i limiti di controllo superiore e inferiore a un grafico di controllo. Questi limiti vengono visualizzati come linee tratteggiate e sono elencati in una tabella accanto al grafico. Mi ci vorrebbe molto JSL per farlo accadere, quindi è piuttosto bello scoprire una funzionalità di utilità così elevata.
L'utilizzo di base di Aggiungi limiti è simile al seguente:
//Example of adding limits to a control chart
ccb = dt << Control Chart Builder( Variables( Y( :Column 1 ) ), Show Control Panel( 0 ) );
ccb << chart( position( 1 ), Add Limits( {LCL( 20 ), UCL( 30 )} ) );
L'ultima riga di JSL invia un messaggio al grafico che include i valori da utilizzare come limiti della linea tratteggiata.
Ovviamente vorrei usarlo in modo dinamico con qualsiasi colonna, quindi richiede un po 'di lavoro in più con i piedi.
Per prima cosa impostiamo una tabella da utilizzare come esempio.
dt=New Table( "old and new control limits",Add Rows( 50 ),
New Column( "Column 1",Numeric,"Continuous",Format( "Best", 12 ),
Formula( Round( Random Normal( 25, 3 ), 0 ) )));
column(dt, 1)<< Delete Formula;
Nota che sto eliminando la formula che genera alcuni dati casuali con cui lavorare subito dopo la costruzione della tabella. Questo corregge i valori nella tabella.
Il passaggio successivo consiste nell'aggiungere un nuovo tipo di proprietà della colonna, qualcosa di personalizzato che non esiste nativamente in JMP.
Column( dt, 1 ) << set property( "Old Control Limits", {LCL( 20 ), UCL( 30 )} );
Dopo aver eseguito questa riga, la colonna nella tabella dati ha ora una proprietà chiamata Old Control Limits.
Solo per verificare se lo script ha funzionato, puoi dare un'occhiata ai valori dalla proprietà della colonna in questo modo.
OCL = Column( dt, 1 ) << Get Property( "Old Control Limits" );Show( OCL[1], OCL[2] );
La nuova variabile, OCL, ha due valori, LCL(20) e UCL(30)
Posso usare quei valori in una nuova carta di controllo.
Le prossime due righe potrebbero sembrare davvero strane, ma sono super robuste e sfruttano la struttura basata sulle funzioni di JSL.
Per prima cosa definirò un paio di argomenti vuoti o quasi vuoti e poi li anniderò insieme.
ccbe = Expr(Control Chart Builder( Variables( Y( :Column 1 ) ), Show Control Panel( 0 ) ));
ce = Expr( chart( position( 1 ) ) );
ae = Expr( add limits() );
le = {};
Impostando queste espressioni posso gestire ogni parte senza valutarle.
ccbe, l'espressione del generatore di carte di controllo è una funzione, "Creatore di carte di controllo" con due argomenti, "Variabili" e "Mostra pannello di controllo"
Voglio aggiungere un nuovo argomento chiamato Chart() alla funzione Control Chart Builder. La nuova variabile, ce è un'espressione con l'argomento "Chart" e Chart include un argomento, "Position (1)".
Voglio aggiungere, Aggiungi limiti all'argomento del grafico, quindi ho la variabile ae, per fare riferimento a un'espressione Aggiungi limiti vuota.
Infine ho creato un elenco vuoto chiamato "le", che conterrà i limiti ottenuti da "Ottieni proprietà" nella variabile OCL dal passaggio precedente.
Poi metterò insieme i pezzi:
Insert Into( le, OCL );show( le );
Insert Into( ae, le );Show( ae );
Insert Into( ce, Name Expr( ae ) );Show( ce );
Insert Into( ccbe, Name Expr( ce ), 2 );
ccbe;
Per prima cosa prendo l'elenco delle cose in OCL e lo inserisco in le.
Secondo, prendo "le" e lo inserisco in "ae", seguito dall'inserimento di "ae" in "ce". Nel secondo caso ho racchiuso "ae" all'interno di un Name Expr(). Questo mi dà l'espressione valutata di ae senza valutarla. Questo metodo NameExpr() è molto utile.
Infine inserisco ce nel ccbe, che è l'intera espressione della carta di controllo.
Nel JSL sopra, ho incluso uno "spettacolo" dopo ogni passaggio in modo da poter vedere come viene creata la funzione nel registro.
L'ultimo passo è ottenere un grafico. Eseguendo semplicemente ccbe da solo, viene valutata quella variabile che contiene l'espressione completa e ottengo un grafico di controllo con linee tratteggiate che rappresentano i vecchi limiti di controllo, che provenivano dalle proprietà delle colonne.
Con un piccolo sforzo in più, sono abbastanza sicuro che sarebbe possibile iniziare con una tabella che includa i limiti di controllo attuali e vecchi, che potrebbe essere utilizzata per popolare tutte le proprietà della colonna per un'intera tabella di variabili di processo.
L'intero script è incluso di seguito.