Identificherei le righe associate agli allarmi attivati. L'handler che viene chiamato quando vengono attivati gli allarmi riceve le informazioni sui punti, in particolare qc_sample (e qc_firstRow qc_lastRow). Questo dovrebbe essere perfetto se c'è un solo grafico. Il campione identifica la riga della tabella se disponiamo di misurazioni individuali. Sfortunatamente, ho una colonna BY che si divide in molti grafici. In questo caso qc_sample si riferisce al campione di ciascun grafico e questo rende difficile recuperare le righe corrispondenti nella tabella. Esiste un modo semplice per ottenerli?
Sì, sembra che lo script di allarme sia uno strumento brusco in quanto non esiste un modo ovvio (per me...) che i valori di "qc_sample" possano essere correlati ai livelli della variabile "By" e quindi a la riga appropriata nella tabella dati.
Ma, a seconda di cos'altro sta succedendo nel tuo script, potresti essere in grado di utilizzare "Screening del processo" per ottenere ciò di cui hai bisogno. Lo script seguente dovrebbe aiutarti a iniziare: eseguilo e controlla il registro e le due tabelle di "dettaglio" che crea.
NamesDefaultToHere(1);
// Make some data
dt = NewTable("Alarms",
NewColumn("By", Numeric, Nominal, Formula(RandomInteger(1,2))),
NewColumn("Data", Numeric, Continuous, Formula(RandomNormal(0,1)))
);
dt << addRows(1000);
// Use process screening invisibly to get the details of all alarms (one table for each level of the 'By' variable)
ps = dt << Process Screening( Y(Column(dt, "Data")), By(Column(dt, "By")), Invisible );
dtList = ps << saveDetailsTable;
Report(ps[1]) << closeWindow;
// Control chart with alarm script
cc = dt << Control Chart(
Chart Col( :Data, Individual Measurement, Moving Range ),
By( :By ),
Alarm Script(
Write(
"Out of Control for test ",
qc_test,
" in column ",
qc_col,
" in sample ",
qc_sample,
"\!N"
)
)
);
// Turn on Test 1
cc << Test 1(1);