Come utilizzare JSL per ottenere i limiti nella tabella di controllo IRCiao,
Supponendo di avere una tabella dei limiti salvata con più colonne di parametri come mostrato di seguito. C'è un modo per leggere questo file e applicare i limiti a un grafico IR per i parametri corrispondenti utilizzando JSL?

Secondo il post seguente non è possibile richiamare la funzione "Ottieni limiti" dalla finestra di dialogo Grafico di controllo utilizzando JSL. In questo caso è stato suggerito di codificare i limiti.
Come ottenere i limiti di capacità sul grafico di controllo IR
Sto pensando di dover leggere il file dei limiti, acquisire Sigma, Avg, LCL e UCL come variabili, quindi passarle al Chart Col per ciascun parametro.Se questo è l’unico modo per farlo, quale sarebbe il modo più efficiente per affrontarlo?
Di seguito è riportato l'esempio di codice per un singolo parametro della carta di controllo con livello di fase e limiti codificati:
Control Chart(
Sample Label( :WEEK ),
Phase( :YEAR ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col(
:P1,
Individual Measurement(
Test 1( 1 ),
Test 2( 1 ),
Test 5( 1 ),
Test 6( 1 ),
Phase Level(
"2019",
Sigma( 0.0106958422036977 ),
Avg( 5.59766666666667 ),
LCL( 5.56557914005557 ),
UCL( 5.62975419327776 )
)
)
)
);
Grazie in anticipo.
Ry
Re: Come utilizzare JSL per ottenere i limiti nella tabella di controllo IREccellente! Questo mi ha messo sulla strada giusta.
Grazie!
Re: Come utilizzare JSL per ottenere i limiti nella tabella di controllo IRÈ possibile utilizzare JSL con il comando Ottieni limiti per un grafico di controllo IR.Il post a cui hai fatto riferimento riguardava i limiti delle specifiche e non i limiti di controllo.Se disponi di limiti di controllo, puoi utilizzare il seguente JSL con il comando Get Limits.
dt = Open("$SAMPLE_DATA/Quality Control/Coating.jmp");
obj = Control Chart(
Sample Size( Column(dt, "Sample") ),
Chart Col( :Weight, XBar, R ),
Get Limits(
"$SAMPLE_DATA/Quality Control/CoatingLimits.jmp"
)
);
Re: Come utilizzare JSL per ottenere i limiti nella tabella di controllo IR
Not Found in access or evaluation of 'Control Chart' , Bad Argument( {:Month Alerted, :YEAR} ), Control Chart(/*###*/Sample Label( :Month Alerted ),
Phase( :YEAR ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col(
:Grand Total,
Individual Measurement(
Test 1( 1 ),
Test 2( 1 ),
Test 5( 1 ),
Test 6( 1 ),
Phase Level(
"2019",
Sigma( 9843.52246062887 ),
Avg( 54802.5935983333 ),
LCL( 25272.0262164467 ),
UCL( 84333.1609802199 )
)
)
)
)
Le mie colonne hanno un avviso mensile, il contenuto dei dati della colonna è di 12 mesi in questo formato 2019-04, quindi ho modificato l'etichetta di esempio in: Avviso mensile.
la parte successiva è l'ANNO e la Fase che non corrispondono ai miei dati, quindi penso che sia lì che non funziona?
I limiti sono più colonne ma ognuna con un'intestazione diversa, idealmente non voglio scrivere ogni intestazione di colonna.
mi serve anche la dimensione (500.175), ma non sono sicuro di dove si adatti al codice e la salvo nella tabella dati.
Ho provato a utilizzare il generatore di carte di controllo ma non sono riuscito a aggiungere i limiti. Seleziono il file ma dopo non ha fatto nulla. Ciò significava che non potevo ottenere una sorta di script.
Molte grazie: ho allegato la sceneggiatura
Re: Come utilizzare JSL per ottenere i limiti nella tabella di controllo IRQuali messaggi di errore ricevi nel registro?Re: Come utilizzare JSL per ottenere i limiti nella tabella di controllo IRCiao, mi sono imbattuto in questa soluzione e ho provato a implementarla ma non funziona per me, apre i file che specifico nella parte superiore dello script ma non continua con il resto dello script. Potrebbe avere qualcosa a che fare con la parte Fase ma non capisco completamente da dove provenga? grazie per l'aiutoRe: Come utilizzare JSL per ottenere i limiti nella tabella di controllo IRGrazie per la veloce risposta Jim.Stavo cercando di impostare i limiti di controllo e la proprietà Sigma e ricevevo un errore per:
too many arguments in access or evaluation of 'Expr' , Expr/*###*/(Column( finalDt, colNamesList[i] ) <<
Set Property(
"Control Limits",
{Individual Measurement( Avg( __avg__ ), LCL( __LCL__ ), UCL( __UCL__ ) )}
), Column( finalDt, colNamesList[i] ) << Set Property( "Sigma", __sigma__ ))Il problema era che stavo cercando di definire due diverse proprietà di colonna nella stessa espressione sostitutiva.Dopo averlo suddiviso in 2 valutazioni, funziona.Vedi sotto.
Current Data Table( finalDt );
Wait(0);
// Get list of columns to chart
colNameList = finalDt << get column names( continuous, string );
// Loop across all of the columns and create the charts
For( i = 2, i <= N Items( colNameList ), i++,
// If limits exist for the current column, then process
If( Try( Column( dtLimits, colNameList[i] ) << get name ) != "",
// get the limits needed
// sigma
theSigma = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( :_LimitsKey == "_Std Dev" ))[1]];
theAvg = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( :_LimitsKey == "_Mean" ))[1]];
theLCL = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( :_LimitsKey == "_LCL" ))[1]];
theUCL = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( :_LimitsKey == "_UCL" ))[1]];
Eval(
Substitute(
Expr( __process__ << Set Property("Control Limits", {Individual Measurement( Avg( __avg__ ), LCL( __LCL__ ), UCL( __UCL__ ))})),
Expr( __process__ ), Parse( ":" || colNameList[i] ),
Expr( __avg__ ), theAvg,
Expr( __LCL__ ), theLCL,
Expr( __UCL__ ), theUCL
)
);
Eval(
Substitute(
Expr( __process__ << Set Property("Sigma", __sigma__)),
Expr( __process__ ), Parse( ":" || colNameList[i] ),
Expr( __sigma__ ), theSigma,
)
);
)
);Grazie ancora per il tuo rapido aiuto.
Ry
Re: Come utilizzare JSL per ottenere i limiti nella tabella di controllo IRSe imposti in modo interattivo i limiti di controllo per un grafico IR e quindi utilizzi il seguente JSL per recuperare i limiti,
:columnname <<GET property=""></GET>
Verrà mostrata la struttura memorizzata per la proprietà Colonna
{Individual Measurement(
Avg( 62.55 ),
LCL( 51.574420384821 ),
UCL( 73.525579615179 )
)}
Quindi tutto ciò che deve essere fatto è leggere le informazioni dalla tabella dei dati dei limiti, quindi costruire la struttura sopra e passarla alla colonna della tabella dei dati di misurazione.Di seguito è riportata una modifica del mio script precedente, tranne per il fatto che popola i limiti di controllo, anziché eseguire le carte di controllo
Names Default To Here( 1 );
dt = Open( "path to data table" );
dtLimits = Open( "path to limits table" );
// Get list of columns to chart
colNameList = dt << get column names( continuous, string );
// Loop across all of the columns and create the charts
For( i = 1, i <= N Items( colNameList ), i++,
// If limits exist for the current column, then process
If( Try( Column( dtLimits, colNameList[i] ) << get name ) != "",
// get the limits needed
theAvg = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( _LimitsKey == "_Mean" ))[1]];
theLCL = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( _LimitsKey == "_LCL" ))[1]];
theUCL = Column( dtLimits, colNameList[i] )[(dtLimits << get rows where( _LimitsKey == "_UCL" ))[1]];
Eval(
Substitute(
Expr(
__Process__ << set property(
"Control Limits",
{Individual Measurement( Avg( __avg__ ), LCL( __LCL__ ), UCL( __UCL__ ) )}
)
),
Expr( __process__ ), Parse( ":" || colNameList[i] ),
Expr( __avg__ ), theAvg,
Expr( __LCL__ ), theLCL,
Expr( __UCL__ ), theUCL
)
);
)
);Re: Come utilizzare JSL per ottenere i limiti nella tabella di controllo IRCiao Jim,
Puoi mostrarmi come affrontare il primo metodo che hai menzionato? Leggere i limiti dalla tabella dei limiti e applicarli come proprietà della colonna.
Grazie,
Ry
Re: Come utilizzare JSL per ottenere i limiti nella tabella di controllo IRGrazie Jim. Ho dovuto apportare una piccola modifica alle sezioni Get Rows Where( _LimitsKey == ...). Ho appena aggiunto i due punti ":" in modo che diventi Get Rows Where( :_LimitsKey == ...), quindi tutto ha funzionato. Una domanda però. Lo script genera finestre individuali per ogni grafico di controllo dei parametri. Esiste un modo per generare una finestra con le carte di controllo di ciascun parametro impilate (come se avessi selezionato più parametri nella finestra di dialogo della carta di controllo IR)?Re: Come utilizzare JSL per ottenere i limiti nella tabella di controllo IRCi sono 2 modi fondamentali per farlo.
- Leggere i dati dalla tabella dei limiti e quindi salvare i limiti come Proprietà colonna. Quindi eseguire i grafici desiderati.
- Attraversa le colonne da tracciare, leggendo i limiti dalla tabella dei limiti e inserendoli nel JSL per generare i grafici.
È il secondo di questi metodi che ho utilizzato per lo script seguente.Dovrebbe essere uno script funzionante, ma senza avere effettivamente la tabella dei limiti e la tabella dei dati effettiva, è possibile che si verifichino alcuni problemi.
Names Default To Here( 1 );
dt = Open( "path to data table" );
dtLimits = Open( "path to limits table" );
// Get list of columns to chart
colNameList = dt << get column names( continuous, string );
// Loop across all of the columns and create the charts
For( i = 1, i <= N Items( colNameList ), i++,
// If limits exist for the current column, then process
If( Try( Column( dtLimits, colNameList[i] ) << get name ) != "",
// get the limits needed
// sigma
theSigma = Column( dtLimits, colNameList[i] )[(dtLimits <<
get rows where( _LimitsKey == "_Std Dev" ))[1]];
theAvg = Column( dtLimits, colNameList[i] )[(dtLimits <<
get rows where( _LimitsKey == "_Mean" ))[1]];
theLCL = Column( dtLimits, colNameList[i] )[(dtLimits <<
get rows where( _LimitsKey == "_LCL" ))[1]];
theUCL = Column( dtLimits, colNameList[i] )[(dtLimits <<
get rows where( _LimitsKey == "_UCL" ))[1]];
Eval(
Substitute(
Expr(
Control Chart(
Sample Label( :WEEK ),
Phase( :YEAR ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col(
__process__,
Individual Measurement(
Test 1( 1 ),
Test 2( 1 ),
Test 5( 1 ),
Test 6( 1 ),
Phase Level(
"2019",
Sigma( __sigma__ ),
Avg( __avg__ ),
LCL( __LCL__ ),
UCL( __UCL__ )
)
)
)
)
),
Expr( __process__ ), Parse( ":" || colNameList[i] ),
Expr( __sigma__ ), theSigma,
Expr( __avg__ ), theAvg,
Expr( __LCL__ ), theLCL,
Expr( __UCL__ ), theUCL
)
);
)
);