Join Question : plage d'horodatage, un peu en quelque sorte ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />J'ai donc une question sur la façon de faire une jointure pour que les lignes correspondent un peu à leurs horodatages similaires.
J'ai deux tables, une pour les données de défaut, une pour le nombre de plaquettes via un outil.Les horodatages ne correspondent pas et toutes les tranches mesurées dans une table ne sont pas enregistrées dans l'autre.
Des conseils sur la façon de rejoindre ce tableau dans le but ultime de tracer le nombre de défauts par rapport au nombre de plaquettes ?
========
1,6 million de lignes, ~ 6 mois de données
Tableau 1 - Données sur les défauts
Les données de défaut ne sont mesurées que sur un petit échantillon de tranches.
Horodatage uniquement pour l'entrée/la sortie, donc un seul horodatage pour l'ensemble du lot

Tableau 2 - Nombre de tranches
des horodatages de tranches individuelles pour un plus grand échantillon de tranches.
des horodatages uniques pour chaque plaquette

Re : Join Question : plage d'horodatage, un peu en quelque sorte ?Merci!
Re : Join Question : plage d'horodatage, un peu en quelque sorte ?Merci Vince d'avoir partagé le code ! C'est très utile !
Je me demande s'il existe un moyen de joindre deux tables par date/heure la plus proche et également de les regrouper par autre chose, par exemple, Tool_ch dans ce cas. Je l'ai fait en créant des sous-ensembles des mêmes éléments dans les deux tables, puis en les rejoignant par la date la plus proche et en fusionnant le tout. Je ne pense pas que ce soit un moyen efficace de le faire. 
Merci ~
Ping
Re : Join Question : plage d'horodatage, un peu en quelque sorte ?Vous créez donc une colonne appelée ce que vous voulez dans les deux tables.
Une table, dt1, vous créez une colonne de ligne qui est juste le numéro de ligne.Ensuite, vous obtenez les valeurs sous forme de matrice pour la colonne à laquelle vous essayez de vous joindre.
mat = Column(dt1, "Column with the information you want to join") << Get Values;
Créez ensuite une colonne dans l'autre table (dt2) avec la formule :
Loc Min( Abs( Column( dt2, "Other Join Column" )[Row()] - mat ) );
Cela vous donnera l'emplacement (ligne) où se trouve la différence minimale entre la ligne actuelle dans dt2 et l'ensemble des valeurs pour dt1.
Ensuite, vous joignez simplement les deux colonnes ensemble.
Re : Join Question : plage d'horodatage, un peu en quelque sorte ?Génial!J'aurai besoin de fouiller dans ça... je suis encore nouveau dans ce domaine et j'essaie de boiter.
Existe-t-il des exemples de tableaux de données auxquels cela s'applique et que je peux configurer ?
Crée donc une nouvelle colonne dans DT1 et DT2, "Loc Min"
puis joint en faisant correspondre les deux colonnes dans une nouvelle table
Re : Join Question : plage d'horodatage, un peu en quelque sorte ?Graham Blatz a en fait parlé de cette chose exacte lors de la session de script avancé lors de la conférence JMP cette année.J'ai son code d'il y a quelque temps, mais il l'a amélioré en utilisant KDTable() qui le rend incroyablement rapide.
Voici un extrait de la fonction qui fait les bits les plus importants.
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 : Join Question : plage d'horodatage, un peu en quelque sorte ?Oui désolé.Aurait dû utiliser WID.Je peux supposer que cette valeur d'emplacement physique reste avec elle.L11 Slot4 dans le tableau 1 est le même que L11 Slot4 dans le tableau 2.
J'ai plusieurs autres colonnes correspondantes que je peux utiliser pour augmenter la précision de la jointure, comme opération #, recette de processus, type de produit, etc.
Re : Join Question : plage d'horodatage, un peu en quelque sorte ?Je suppose que l'intégrité du lot est toujours maintenue, mais les tranches sont-elles toujours mélangées entre les emplacements ? Autrement dit, la ligne 4 du tableau 1 (L22, W10) et la ligne 18 du tableau 2 (L22, W10) correspondent-elles au même wafer physique ?