Ich würde die Zeilen identifizieren, die mit den ausgelösten Alarmen verknüpft sind. Der Handler, der aufgerufen wird, wenn Alarme ausgelöst werden, erhält die Informationen über die Punkte, insbesondere qc_sample (und qc_firstRow qc_lastRow). Dies sollte perfekt sein, wenn nur ein Diagramm vorhanden ist. Das Beispiel identifiziert die Zeile der Tabelle, wenn wir Einzelmessungen haben. Leider habe ich eine BY-Spalte, die sich in viele Diagramme aufteilt. In diesem Fall bezieht sich qc_sample auf die Stichprobe jedes Diagramms, was es schwierig macht, die entsprechenden Zeilen in der Tabelle abzurufen. Gibt es eine einfache Möglichkeit, sie zu bekommen?
Ja, es sieht so aus, als ob das Alarmskript ein stumpfes Instrument zu sein scheint, da es (für mich ...) keine offensichtliche Möglichkeit gibt, die Werte von „qc_sample“ mit den Ebenen der Variablen „By“ und von dort in Beziehung zu setzen die entsprechende Zeile in der Datentabelle.
Aber je nachdem, was sonst noch in Ihrem Skript vor sich geht, können Sie möglicherweise „Prozess-Screening“ verwenden, um das zu bekommen, was Sie brauchen. Das folgende Skript soll Ihnen den Einstieg erleichtern: Führen Sie es aus und überprüfen Sie das Protokoll und die beiden „Detail“-Tabellen, die es erstellt.
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);