Ho uno script che importa i dati sulla forza della tenuta e quindi li usa per generare grafici di controllo. Il set di dati contiene quasi un anno di dati, ma le carte di controllo devono visualizzare solo i dati degli ultimi 3 mesi.C'è un elenco di numeri di sigillanti attivi nello script e l'ho impostato per scorrere l'elenco dei sigillanti attivi e se ci sono dati per quel sigillante negli ultimi tre mesi creare un sottoinsieme e quindi il grafico di controllo. Funzionava, ma quando ho aggiunto recentemente due nuovi numeri di sigillante (11043 e 12143) all'elenco, lo script non genererà i grafici di controllo per quei due sigillanti. Ho cercato manualmente i dati e so che ci sono dati per ciascuno dei due nuovi sigillanti negli ultimi tre mesi. Non riesco a capire cosa sia diverso per questi due sigillanti che causano il malfunzionamento dello script.Ho allegato alcuni dati inventati in un file excel che è nel formato che otteniamo dal test di resistenza della tenuta. Ecco cosa ho nello script:
//Import file and create data table
DS = Open("Source File Path Here"); //need to check where the file will be stored and what it will be called
DS << Set Name ("Sealer Data - Maximum Load (lbf/in)");
//Sort Data
DS <
//Modify date to display only the date and not the date and time
DS << New Column("Date", Numeric, Continuous, Formula(Short Date(Num(Munger(Char(:End date), 1,10)))));
//Create a subset data table and control chart for each sealer
SL = {07056, 08139, 09066, 10083, 10088, 10532, 11043, 12035, 12036, 12093, 12119, 12143, 12144, 12145, 14122, 14123}; //list modified for 07Feb17
For(i=N Items(SL), i>0, i--,
DS << Select Where (:Sealer Number == SL[i] & :Date >= Short Date(Today() - 90 * 86400));
If( N Row( DS << get selected rows ) == 0, Continue() );
DS << Subset ((Selected Rows), Output Table Name("Sealer_"||char(SL[i])));
IF(SL[i]==12119,
Control Chart(
Sample Label( :Date ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Maximum Load, Individual Measurement),
SendToReport(
Dispatch( {}, "Control Chart", OutlineBox, {Set Title( "Sealer_"||char(SL[i]) )} ),
Dispatch(
{"Individual Measurement of Maximum Load"},
"2",
ScaleBox,
{Format( "Fixed Dec", 12, 1 ), Min( -0.5), Max( 10 ),
Inc(5), Minor Ticks( 1 ),
Add Ref Line( 0.46, Dashed, "Purple", "0.46" ),
Add Ref Line( 0.7, Dotted, "Blue", "0.70" ),
Rotated Labels( "Horizontal" )}
),
Dispatch(
{"Individual Measurement of Maximum Load"},
"1",
ScaleBox,
{Show Minor Ticks( 0 ), Rotated Labels( "Vertical" )}
),
Dispatch(
{"Individual Measurement of Maximum Load"},
"",
AxisBox,
{Add Axis Label( "Maximum Load (lbf/in)" )}
),
Dispatch(
{"Individual Measurement of Maximum Load"},
"IR Chart of IM",
FrameBox,
{Frame Size( 912, 318 ), Line Width Scale( 1.5 )}
),
Dispatch(
{"Individual Measurement of Maximum Load"},
"",
AxisBox( 2 ),
{Add Axis Label( "Date" )}
),
Dispatch(
{"Individual Measurement of Maximum Load"},
"IR Chart of IM",
FrameBox( 2 ),
{Frame Size( 70, 318 )}
),
Dispatch(
{"Individual Measurement of Maximum Load"},
"1",
ScaleBox,
{Inc( 1 ), Minor Ticks( 0 )}
)
),
),
Control Chart(
Sample Label( :Date ),
Group Size( 1 ),
KSigma( 3 ),
Chart Col( :Maximum Load, Individual Measurement),
SendToReport(
Dispatch( {}, "Control Chart", OutlineBox, {Set Title( "Sealer_"||char(SL[i]) )} ),
Dispatch(
{"Individual Measurement of Maximum Load"},
"2",
ScaleBox,
{Format( "Fixed Dec", 12, 1 ), Min( -0.5 ), Max( 5 ),
Inc( 5 ), Minor Ticks( 1 ), Add Ref Line( 0.46, "Dashed", "Purple", "0.46", 1 ),
Add Ref Line( 0.7, "Dotted", "Blue", "0.70", 1 )}
),
Dispatch(
{"Individual Measurement of Maximum Load"},
"1",
ScaleBox,
{Inc( 1 ), Minor Ticks( 0 )}
),
Dispatch(
{"Individual Measurement of Maximum Load"},
"",
AxisBox,
{Add Axis Label( "Maximum Load (lbf/in)" )}
),
Dispatch(
{"Individual Measurement of Maximum Load"},
"IR Chart of IM",
FrameBox,
{Frame Size( 912, 318 ), Line Width Scale( 1.5 )}
),
Dispatch(
{"Individual Measurement of Maximum Load"},
"",
AxisBox( 2 ),
{Add Axis Label( "Date" )}
),
Dispatch(
{"Individual Measurement of Maximum Load"},
"IR Chart of IM",
FrameBox( 2 ),
{Frame Size( 70, 318 )}
)
)
);
);
);
Io e te l'abbiamo impostato per scorrere l'elenco dei sigillanti attivi e se ci sono dati per quel sigillante negli ultimi tre mesi, creare un sottoinsieme e quindi il grafico di controllo. Funzionava, ma quando ho aggiunto recentemente due nuovi numeri di sigillante all'elenco, lo script non genererà le carte di controllo per quei due sigillanti. Ho cercato manualmente i dati e so che ci sono dati per ciascuno dei due nuovi sigillanti negli ultimi tre mesi. Non riesco a capire cosa sia diverso per questi due sigillanti che causano il malfunzionamento dello script.
Grazie per l'aiuto! Una volta che ho cambiato
:Data >= Appuntamento breve ( In data odierna () - 90 * 86400 a
num (:Data) >= In data odierna () - 90 * 86400
lo script è stato eseguito correttamente. Penso che fosse qualcosa con la colonna Date che è stata cambiata in una colonna di caratteri piuttosto che in una colonna numerica come avrebbe dovuto essere.
Sospetterei che questo codice rientri nel caso continue:
DS << Select Where( :Sealer Number == SL[i] & :Date >= Short Date( Today() - 90 * 86400 ) );
If( N Row( DS << get selected rows ) == 0,
Continue()
);
Come suggerisce Mark, imposta un punto di interruzione su continue, o magari aggiungi semplicemente una dichiarazione:
Show( i, SL[i], :Date );
Cerca nel registro l'output. Immagino che :Date sarà sbagliato, forse perché non c'è una riga corrente nella tabella dei dati.