Join-Frage: Zeitstempelbereich, irgendwie irgendwie?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Also habe ich eine Frage dazu, wie man einen Join macht, um Zeilen irgendwie mit ihren ähnlichen Zeitstempeln abzugleichen.
Ich habe zwei Tabellen, eine für Fehlerdaten, eine für die Waferanzahl durch ein Tool.Die Zeitstempel stimmen nicht überein und nicht jeder in einer Tabelle gemessene Wafer wird in der anderen erfasst.
Irgendwelche Tipps, wie Sie dieser Tabelle beitreten können, um das ultimative Ziel zu erreichen, die Anzahl der Defekte im Vergleich zur Anzahl der Wafer darzustellen?
========
1,6 Millionen Zeilen, ~6 Monate Daten
Tabelle 1 – Fehlerdaten
Defektdaten wurden nur an einer kleinen Auswahl von Wafern gemessen.
Zeitstempel nur für den Eingang/Ausgang, also ein einziger Zeitstempel für das gesamte Los

Tabelle 2 – Waferanzahl
individuelle Wafer-Zeitstempel für eine größere Anzahl von Wafern.
eindeutige Zeitstempel für jeden Wafer

Re: Beitrittsfrage: Zeitstempelbereich, irgendwie irgendwie?Danke!
Re: Beitrittsfrage: Zeitstempelbereich, irgendwie irgendwie?Danke Vince für das Teilen des Codes! Es ist sehr hilfreich!
Ich frage mich, ob es eine Möglichkeit gibt, zwei Tabellen nach dem nächsten Datum/der nächsten Uhrzeit zu verbinden und auch nach etwas anderem zu gruppieren, zum Beispiel Tool_ch in diesem Fall. Ich habe dies getan, indem ich die gleichen Elemente in beiden Tabellen unterteilte, dann nach dem nächsten Datum zusammenfügte und alles zusammenführte. Ich glaube nicht, dass dies ein effizienter Weg ist, dies zu tun. 
Danke~
Peng
Re: Beitrittsfrage: Zeitstempelbereich, irgendwie irgendwie?Sie erstellen also in beiden Tabellen eine Spalte mit dem gewünschten Namen.
Eine Tabelle, dt1, Sie erstellen eine Zeilenspalte, die nur die Zeilennummer ist.Dann erhalten Sie die Werte als Matrix für die Spalte, der Sie beitreten möchten.
mat = Column(dt1, "Column with the information you want to join") << Get Values;
Erstellen Sie dann eine Spalte in der anderen Tabelle (dt2) mit der Formel:
Loc Min( Abs( Column( dt2, "Other Join Column" )[Row()] - mat ) );
Dadurch erhalten Sie die Position (Zeile), an der die minimale Differenz zwischen der aktuellen Zeile in dt2 und dem gesamten Wertesatz für dt1 besteht.
Dann fügen Sie einfach die beiden Säulen zusammen.
Re: Beitrittsfrage: Zeitstempelbereich, irgendwie irgendwie?Eindrucksvoll!Ich muss das durchstöbern ... ich bin noch neu dabei und versuche, mitzuhumpeln.
Gibt es Beispieldatentabellen, auf die dies zutrifft und die ich einrichten kann?
Erstellt also eine neue Spalte in DT1 und DT2, "Loc Min".
verbindet sich dann, indem die beiden Spalten in einer neuen Tabelle abgeglichen werden
Re: Beitrittsfrage: Zeitstempelbereich, irgendwie irgendwie?Genau darüber sprach Graham Blatz dieses Jahr bei der Advanced Scripting Session auf der JMP-Konferenz.Ich habe seinen Code von vor einiger Zeit, aber er hat ihn tatsächlich verbessert, indem er KDTable() verwendet hat, was ihn wahnsinnig schnell macht.
Hier ist ein Ausschnitt der Funktion, die die wichtigsten Teile erledigt.
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>
Re: Beitrittsfrage: Zeitstempelbereich, irgendwie irgendwie?Ja Entschuldigung.Hätte WID verwenden sollen.Ich kann davon ausgehen, dass dieser physische Slot-Wert dabei bleibt.L11 Slot4 in Tabelle 1 ist identisch mit L11 Slot4 in Tabelle 2.
Ich habe mehrere andere übereinstimmende Spalten, die ich verwenden kann, um die Join-Genauigkeit zu erhöhen, wie Vorgangsnummer, Prozessrezept, Produkttyp usw.
Re: Beitrittsfrage: Zeitstempelbereich, irgendwie irgendwie?Ich gehe davon aus, dass die Chargenintegrität immer gewahrt bleibt, aber werden die Wafer jemals zwischen den Slots gemischt? Anders gesagt, entsprechen Zeile 4 von Tabelle 1 (L22, W10) und Zeile 18 von Tabelle 2 (L22, W10) demselben physischen Wafer?