Iscriviti Domanda: intervallo di timestamp, una specie?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Quindi ho una domanda su come fare un join per far corrispondere le righe in qualche modo ai loro timestamp simili.
Ho due tabelle, una per i dati sui difetti, una per il conteggio dei wafer attraverso uno strumento.I timestamp non corrispondono e non tutti i wafer misurati in una tabella vengono registrati nell'altra.
Qualche consiglio su come unirti a questo tavolo per l'obiettivo finale di tracciare il conteggio dei difetti rispetto al conteggio dei wafer?
========
1,6 milioni di righe, ~6 mesi di dati
Tabella 1 - Dati sui difetti
Dati sui difetti misurati solo su un piccolo campione di wafer.
Timestampe solo per l'entrata/uscita, quindi un'unica marca temporale per tutto il lotto

Tabella 2 - Conteggio Wafer
timestamp singoli wafer per un campione più ampio di wafer.
timestamp univoci per ogni wafer

Ri: Iscriviti Domanda: intervallo di timestamp, una specie?Grazie!
Ri: Iscriviti Domanda: intervallo di timestamp, una specie?Grazie Vince per aver condiviso il codice! È molto utile!
Mi chiedo se esiste un modo per unire due tabelle in base alla data/ora più vicina e anche raggruppare per qualcos'altro, ad esempio Tool_ch in questo caso. L'ho fatto sottoponendo gli stessi elementi in entrambe le tabelle, quindi unendo in base alla data più vicina e unendo tutto insieme. Non credo che questo sia un modo efficiente per farlo. 
Grazie~
Peng
Ri: Iscriviti Domanda: intervallo di timestamp, una specie?Quindi crei una colonna chiamata come vuoi in entrambe le tabelle.
Una tabella, dt1, crei una colonna di riga che è solo il numero di riga.Quindi ottieni i valori come matrice per qualsiasi colonna su cui stai cercando di unirti.
mat = Column(dt1, "Column with the information you want to join") << Get Values;
Quindi crea una colonna nell'altra tabella (dt2) con la formula:
Loc Min( Abs( Column( dt2, "Other Join Column" )[Row()] - mat ) );
Ciò che farà è fornirti la posizione (riga) in cui si trova la differenza minima tra la riga corrente in dt2 e l'intero insieme di valori per dt1.
Quindi unisci semplicemente le due colonne insieme.
Ri: Iscriviti Domanda: intervallo di timestamp, una specie?Eccezionale!Avrò bisogno di approfondire questo ... sono ancora nuovo in questo e sto cercando di zoppicare.
Esistono tabelle di dati di esempio a cui si applica che posso configurare?
Quindi crea una nuova colonna sia in DT1 che in DT2, "Loc Min"
quindi si unisce abbinando le due colonne in una nuova tabella
Ri: Iscriviti Domanda: intervallo di timestamp, una specie?Graham Blatz in realtà ha parlato proprio di questa cosa esatta all'Advanced Scripting Session alla conferenza JMP di quest'anno.Ho il suo codice da qualche tempo fa, ma in realtà lo ha migliorato usando KDTable() che lo rende incredibilmente veloce.
Ecco uno snippet della funzione che fa i bit più importanti.
dt2 << New Column( "Loc Min", numeric, continuous, formula( Row() ) ); //indexing, basically, to match/update upon
list_big = Column( dt2, rt2 ) << get values; //creates a vector of values for the following
dt1 << New Column( "Loc Min",
numeric,
continuous,
formula(
Loc Min( Abs( Column( rt1 )[Row()] - list_big ) )
)
); //simple, but fast. Very fast.
dt_join = dt1 << Join(
With( dt2 ),
By Matching Columns( :Loc Min = :Loc Min ),
Drop multiples( 0, 1 ),
Name( "Include non-matches" )(0, 0),
Preserve main table order( 1 )
); // I opted for a join rather than an update, for now. may change in the future.
Here's the actual function as well that you can call and has a UI with it.
nearest_neighbor = Function(
//by Graham Blatz
//2/20/15
//Matches Nearest Neighbor of ostensibly dates, but whatever, man
{dt1 = Current Data Table(),
dt2 = Current Data Table(), rt1 = "ReadTime", rt2 = "ReadTime"
},
{DEFAULT LOCAL},
If( dt1 == dt2, //default execution of a prompt, dunno a clean way around this without making some user camp inconvenienced.
list_tables = {};
For( i = 1, i <= N Table(), i++,
Insert Into( list_tables, Data Table( i ) << get name );
); //sets up names of data tables to pick from
dt1 = Data Table( list_tables[1] );
dt2 = Data Table( list_tables[2] ); //Reasonable Starting point
win_tableselect = New Window( "Select Tables",
<<MODAL></MODAL>
Ri: Iscriviti Domanda: intervallo di timestamp, una specie?Sì scusa.Avrei dovuto usare WID.Posso presumere che il valore dello slot fisico rimanga con esso.L11 Slot4 nella tabella 1 è uguale a L11 Slot4 nella tabella 2.
Ho molte altre colonne corrispondenti che posso utilizzare per aumentare la precisione del join, come operazione #, ricetta di processo, tipo di prodotto, ecc.
Ri: Iscriviti Domanda: intervallo di timestamp, una specie?Presumo che l'integrità del lotto sia sempre mantenuta, ma i wafer vengono mai mescolati tra gli slot? Detto diversamente, la riga 4 della tabella 1 (L22, W10) e la riga 18 della tabella 2 (L22, W10) corrispondono allo stesso wafer fisico?