Solution de contournement pour "mettre à jour" la fonction dans le scriptBonjour la communauté JMP,
J'ai une table de données qui dépend d'une autre table de données. J'ai essayé de le mettre à jour avec la fonction de mise à jour, mais cela ne semble rien faire. Au lieu de cela, ce script ouvre une nouvelle fenêtre de table de données avec le sous-ensemble sélectionné au lieu de mettre à jour la table actuelle. Comment puis-je lui faire mettre à jour la table de données actuellement ouverte « dt » avec le sous-ensemble de « dtU » ? Merci!
// Open Sample Data
dt = Open("KrF CDU Data table.jmp");
dtU = Open( "Exposure_Summary_Data.jmp" );
// Making subset of data
dtU << Clear Column Selection();
dtU << Select Where(contains("KrF", :Type));
Column(dtU,"F23")<< Set Selected(1);
dtU << Invert Column Selection;
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1,:Wafer Code));
// Updating with subset
dt << Update(With(dt1),By Matching Columns(name==name),);Re : Solution de contournement pour "mettre à jour" la fonction dans le scriptMatch doit spécifier autant de colonnes qui le rendent unique. Vous devrez peut-être faire correspondre plusieurs colonnes, par exemple :Experiment name == :Experiment name, :Stack==:Stack, :Wafer Code==:Wafer Code, :Metrology Recipe==:Metrology.
Ce ne sont que des suggestions.
Vous devez choisir quelles colonnes rendent chaque ligne unique, puis les faire correspondre en conséquence.
Re : Solution de contournement pour "mettre à jour" la fonction dans le scriptJ'ai donc fait ce que vous avez dit et mis à jour manuellement le tableau, voici le code associé
Data Table( "KrF CDU data table 1" ) << Update(
With( Data Table( "Subset of Exposure_Summary_Data" ) ),
Match Columns( :Wafer Code = :Wafer Code )
)
Donc, j'ai appliqué cela directement à mon code
dt << Update( With( dt1 ), Match Columns( dt:Wafer Code= dt1:Wafer code ) );
Cependant, au lieu de mettre à jour toutes les lignes, il met simplement à jour la première ligne et copie cette ligne pour toutes les lignes, comme illustré ci-dessous. Dois-je le boucler sur toutes les lignes ?
Re : Solution de contournement pour "mettre à jour" la fonction dans le scriptDans cette ligne de code, « nom » fait référence au nom de la colonne. Vous n'affichez pas tous les noms de colonnes, mais avez-vous certainement une colonne appelée « nom » dans les deux ?
gdt <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Update</SPAN><SPAN class="token punctuation">(</SPAN> With<SPAN class="token punctuation">(</SPAN> dt1 <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> Match Columns<SPAN class="token punctuation">(</SPAN> dt<SPAN class="token punctuation">:</SPAN>name <SPAN class="token operator">==</SPAN> dt1<SPAN class="token punctuation">:</SPAN>name <SPAN class="token punctuation">)</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN> <SPAN class="token comment">//This is still not runnin</SPAN>
Essayez de faire cette opération manuellement à partir du menu Tables->mettre à jour.Lorsque vous obtenez le résultat souhaité, regardez le script source en haut à gauche (clic droit sur la source, cliquez pour voir le script) et inspectez ce code pour vous aider à obtenir exactement ce que vous voulez dans votre JSL.
Re : Solution de contournement pour "mettre à jour" la fonction dans le scriptJ'ai donc vérifié tous les types de données pour les colonnes correspondantes, et ce sont les mêmes : même ordre et mêmes types de données. Aucune des colonnes n’a également de fonctions. J'ai joint les ensembles de données sous forme d'image et mon code actuel. Je suis totalement perdu, donc toute aide est la plus appréciée. Merci à tous!
//Clean up
Clear Log(); Clear Globals(); //Close All(DataTables,"No Save");
// Open Sample Data
dtU = Open( "Exposure_Summary_Data.jmp" );
// Making subset of data
dtU << Clear Column Selection();
dtU << Select Where(contains(:Type,"KrF"));
Column(dtU,"F23")<< Set Selected(1);
dtU << Invert Column Selection;
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1));
// Opening other data table and updating
dt = Open("KrF CDU Data table 1.jmp");
dt << Update( With( dt1 ), Match Columns( dt:name == dt1:name ) ); //This is still not running
dt << Save( "KrF CDU Data table 1.jmp" );
Re : Solution de contournement pour "mettre à jour" la fonction dans le scriptPuisque nous ne pouvons pas voir les tableaux, ce n'est qu'une hypothèse sur les choses à essayer.
- Vérifiez que le nom de la colonne existe dans les deux, les deux ont le même type de données (caractère probable) et le même type de modélisation (probablement nominal).
- utilisez :name==:name ou dt:name == dt1:name
- vérifiez si l'une des colonnes de dt a des fonctions, surtout si les colonnes à mettre à jour ont des fonctions. Je pense que vous devez supprimer la fonction avant la mise à jour.
Voilà quelques idées de dépannage.
Re : Solution de contournement pour "mettre à jour" la fonction dans le scriptJe ne sais pas si j'interprète correctement ce que vous essayez de faire ici, mais voici mon interprétation, avec quelques exemples de données.Vous devrez ajouter une colonne appelée name après la commande stop().Cela a bien fonctionné pour moi.
Edit : je pense que j'ai mal compris quelque chose. ... vous voulez dire que vous essayez de mettre à jour une table qui est verrouillée car dépendante, comme un résumé, JMP peut forcer une nouvelle table. Je ne suis pas certain de ça.
Clear Log();
Clear Globals();
//Close All( DataTables, "No Save" );
dt = Open( "$SAMPLE_DATA/Students.jmp" );
dtU = Open( "$SAMPLE_DATA/Big Class.jmp" );
dtU << Clear Column Selection();
dtU << Select Where( :age == 12 );
Column( dtU, "age" ) << Set Selected( 1 );
dtU << Invert Column Selection;
dt1 = dtU << Subset( Selected Rows( 1 ), Selected Columns( 1 ) );
stop();
// run up to here, create an extra column called name in the dt (students.jmp) with some names from dtU (big class), then run next line
dt << Update( With( dt1 ), By Matching Columns( name == name ) );
Re : Solution de contournement pour "mettre à jour" la fonction dans le scriptJ'ai essayé le changement, mais au lieu de mettre à jour la table de données KrF (dt), il ouvre uniquement un nouveau sous-ensemble et ne met pas à jour la table dt. Dois-je connecter les deux à un serveur odbc ? Les deux tables sont toujours ouvertes, donc JMP voit définitivement les deux tables.Re : Solution de contournement pour "mettre à jour" la fonction dans le scriptessaye de changer
dt << Update( With( dt1 ), By Matching Columns( name == name ) );
à
dt << Update( With( dt1 ), Match Columns( name== name ) );
Sur la base des lignes commentées de mon script, ma précédente tentative de connexion utilisait l'ancien format et n'a pas fonctionné lorsque j'ai passé à la mise à jour. La syntaxe est différente
Re : Solution de contournement pour "mettre à jour" la fonction dans le scriptOups, je voulais écrire cette ligne comme
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1));
Cependant, il ne met toujours pas à jour dt ("KrF CDU Data table.jmp"). J'essaie de mettre à jour la table de données KrF avec les données de la table d'exposition (dtU).
Voici à quoi ressemble le journal :
Name Unresolved: name in access or evaluation of 'name' , name/*###*/
In the following script, error marked by /*###*/
Clear Log();
Clear Globals();
Close All( DataTables, "No Save" );
dt = Open( "KrF CDU Data table.jmp" );
dtU = Open( "Exposure_Summary_Data.jmp" );
dtU << Clear Column Selection();
dtU << Select Where( Contains( :Type, "KrF" ) );
Column( dtU, "F23" ) << Set Selected( 1 );
dtU << Invert Column Selection;
dt1 = dtU << Subset( Selected Rows( 1 ), Selected Columns( 1 ) );
dt << Update( With( dt1 ), By Matching Columns( name/*###*/ == name ) );
Il y a donc une sorte d'erreur avec la ligne de mise à jour ? Je ne suis pas sûr, mais c'est ce que rapporte le journal
Re : Solution de contournement pour "mettre à jour" la fonction dans le scriptCertains de vos JSL semblent erronés ou étranges :
dtU << Select Where(contains("KrF", :Type)); ça devrait être
dtU << Select Where(contains( :Type, "KrF:));
De plus, cette ligne deux semble étrange. Selected Columns(1,:Wafer Code) et
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1,:Wafer Code));
Vous n'avez pas mentionné quelle table est dépendante. Par défaut, les tables de sous-ensembles ne sont pas dépendantes.
Que rapporte le fichier journal ?