Ciao,
Ho la tabella di temperatura temporale 1 e la tabella di inizio e di fine operazione 2. Vorrei aggiungere una nuova colonna nel registro della temperatura temporale ed etichettare la "operazione" della cella quando si trova nel perimetro dell'operazione. Qualcuno sa come farlo?
Kevin,
La tabella 2 è confusa, l'ora di fine è precedente all'ora di inizio. L'unica volta che corrisponde alla tabella della temperatura è l'ora di inizio. Di seguito è riportato uno script, tuttavia, mi aspettavo che l'ora di fine fosse successiva all'ora di inizio.
Puoi trovare queste operazioni di avvio unendo le due tabelle che corrispondono a Tempo con ora di inizio, vedi il secondo blocco di JSL.
Poiché solo l'ora di inizio corrispondeva, ho aggiunto il codice per copydown le diverse operazioni e creato una colonna di durata per confrontare visivamente la stabilità della temperatura.
Names Default to Here(1);
dt1 = Data Table("Table 1 Temperature log");
dt2 = Data Table("Table 2 operation Time");
dt1 << New Column ("Operation", character);
for(i=1, i<=nrows(dt2), i++,
tbeg = dt2:Start Time[i];
tend = dt2:End Time[i];
_idx = dt1 << get rows where( tend <= dt1:Time <= tbeg);
if(nrow(_idx)>0,
dt1:Operation[_idx] = "Operation " || char(i);
); //end if
); //end for
//since there is only one row that matches, copy down
//if End Time column was the end of the operation, this would not be needed
//--copy down and get duration
dt1 << New Column("Duration", Numeric, Continuous, Format("min:s") );
_idx = dt1 << get rows where (:Operation != "");
for(i=1, i<=nrow(_idx), i++,
init = dt1:Time[_idx[i]];
If(i < nrow(_idx),
tbeg = _idx[i];
tend = _idx[i + 1] - 1;
dt1:Operation[tbeg :: tend ] = dt1:Operation[_idx[i] ];
, //else
tbeg = _idx[i];
tend = nrow(dt1);
dt1:Operation[tbeg :: tend ] = dt1:Operation[_idx[i] ];
);
dt1[tbeg :: tend,"Duration"] = Transpose(dt1:Time[tbeg :: tend] - init);
);
//--graph
gb = dt1 << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables( X( :Duration ), Y( :RoomTemp ), Overlay( :Operation ) ),
Elements( Points( X, Y, Legend( 9 ) ), Line( X, Y, Legend( 11 ) ) )
);
Aderire
Data Table( "Table 1 Temperature log" ) << Join(
With( Data Table( "Table 2 operation Time" ) ),
By Matching Columns( :Time = :Start Time ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 0 ),
Preserve main table order( 1 )
)