Bonnes pratiques pour les jointures/mises à jour répétées dans les scripts JMPSalut tout le monde,
I’m running a JSL script that performs Update/Join operations between calculation tables and filtered data tables. I noticed the following behavior:
-
Lorsque le script s'exécute plusieurs fois, JMP renomme automatiquement les colonnes en double pour éviter les conflits de noms, par exemple :
<SPAN><SPAN class="hljs-title class_">Numéro</SPAN> <SPAN class="hljs-title class_">de lot</SPAN> - <SPAN class="hljs-title class_">Numéro</SPAN> <SPAN class="hljs-title class_">de lot</SPAN> du tableau <SPAN class="hljs-number">1,</SPAN> <SPAN class="hljs-title class_">Numéro</SPAN> <SPAN class="hljs-title class_">de lot</SPAN> <SPAN class="hljs-keyword">du</SPAN> tableau <SPAN class="hljs-number">2</SPAN></SPAN>
-
Même si je ferme les tableaux depuis le panneau, les variables (objets colonnes) existent toujours en mémoire, donc la réexécution du script crée des colonnes dupliquées supplémentaires.
-
Ma solution actuelle consiste à quitter JMP et à le redémarrer avant d'exécuter le script afin d'éviter les colonnes en double.
Questions pour la communauté :
-
Are there best practices for repeated Update or Join operations that avoid generating duplicate columns?
-
Existe-t-il une méthode recommandée pour « nettoyer » les tables/variables après l'exécution d'un script afin que les exécutions suivantes ne créent pas de doublons ?
-
Existe-t-il des fonctions ou des modèles JSL permettant de renommer ou de remplacer des colonnes en toute sécurité sans générer de copies supplémentaires ?
Toute suggestion ou stratégie serait grandement appréciée !
J'ai également essayé ce code pour les gérer dynamiquement, mais cela n'a pas fonctionné.
RenameColumn = Function({dt, oldNamePattern, newName},
colList = dt << Get Column Names; // returns a column list object
n = N Items(colList); // number of columns
For(i = 1, i <= n, i++,
c = colList[i]; // get the column name as string
If(Contains(c, oldNamePattern),
Column(dt, c) << Set Name(newName);
Break(); // optional: stop after first match
);
);
);
Automatisation et scriptageRe: Bonnes pratiques pour les jointures/mises à jour répétées dans les scripts JMPQue souhaitez-vous faire à ces colonnes ? Si elles existent déjà, ne faut-il pas les mettre à jour ni les rajouter ? Pourriez-vous fournir un exemple de script avec des données que la communauté pourrait examiner ?
Re: Bonnes pratiques pour les jointures/mises à jour répétées dans les scripts JMPJe suis curieux de connaître les détails de ce problème.
en particulier, les variables (objets colonnes) existent toujours en mémoire, donc la réexécution du script crée des colonnes dupliquées supplémentaires.
Par ailleurs, veuillez noter :
Pour Tables/Update, ce problème est dû à une nouvelle fonctionnalité de JMP19 :
Autoriser la plateforme de mise à jour à créer de nouvelles colonnes si elles existent déjà dans la table à mettre à jour.
La fonctionnalité supplémentaire est sympa, mais les gens n'ont pas pensé aux effets secondaires !
effet collatéral :
Avec JMP19, il n'est plus possible d'utiliser la fonction dans le mode :
"Veuillez ajouter les colonnes qui ne figurent pas encore dans la table cible."
Plus de détails : Tables/Mise à jour modifiées !
Les scripts se comportent différemment et l'utilisateur obtiendra des tableaux comme celui-ci :
(Les colonnes supplémentaires sont inutiles - elles surchargent le tableau)

J'espère que les développeurs comprendront le problème et le corrigeront dans la prochaine version.
une solution possible : 2 modes
Mise à jour automatique des tables
- Utilisez la nouvelle approche et ajoutez une colonne (avec un suffixe) SI (!!!!) l'utilisateur sélectionne la colonne

- n'utilisez pas l'astuce en mode « Tous » :

-> autorisera à nouveau
« Ajouter les colonnes qui ne figurent pas encore dans la table cible »
(comme dans les versions précédentes de JMP).
... autre option : un paramètre supplémentaire pour activer/désactiver le nouveau mode.
Pour garantir la rétrocompatibilité : désactiver le paramètre par défaut.
Re: Bonnes pratiques pour les jointures/mises à jour répétées dans les scripts JMPIl semble que vous deviez utiliser la fonction « Colonnes de sortie » dans la jointure afin d'éviter l'importation de données en double. À moins d'importer des colonnes portant le même nom, l'utilisation de « Colonnes de sortie » n'ajoutera pas le suffixe « … de la table 2 » aux noms de colonnes.
Dans la fonction Mise à jour, vous sélectionnez les colonnes à ajouter afin d'éviter l'ajout de noms de colonnes en double.
Re: Bonnes pratiques pour les jointures/mises à jour répétées dans les scripts JMPCode:
// Filtering Table A using RequiredBatches
FilteredA = TableA << Join(
With(RequiredBatches),
By Matching Columns(:Batch Number = :Batch Number),
Drop Multiples(0,0),
Include Matches(0,0),
Output Table("FilteredA"),
Invisible(0)
);
// Filtering Table B using RequiredBatches
FilteredB = TableB << Join(
With(RequiredBatches),
By Matching Columns(:Batch Number = :Batch Number),
Drop Multiples(0,0),
Include Nonmatches(0,0),
Output Table("FilteredB"),
Prevent Name Collision(1),
Invisible(0)
);
// Rename joined key columns
Column(FilteredA, "Batch Number of TableA") << Set Name("Batch Number");
Column(FilteredB, "Batch Number of TableB") << Set Name("Batch Number");
Si j'exécute ce script une seconde fois sans redémarrer JMP , voici ce qui se produit :
- JMP ajoute automatiquement des suffixes aux noms des tables :
FilteredA → FilteredA 2
FilteredB → FilteredB 2
J'ai également essayé d'utiliser « for all tables » au début du script ; cela semble fonctionner sur Mac car je ne rencontre aucun problème, mais sous Windows, je pense que cela ne fonctionne pas ou que son comportement est vraiment confus.
Try(TableA << Close(No Save));
Même après avoir fermé la liste des fenêtres JMP Home en utilisant l'option « Tout fermer sauf ceci » dans mon script [où les tableaux sont affichés], les tableaux sont bien fermés, mais des variables restent probablement en mémoire. Je ne sais donc pas comment résoudre ce problème.
Est-ce que cela pourrait aider, ou existe-t-il une autre solution qui n'implique pas de réutiliser le code ?

Re: Bonnes pratiques pour les jointures/mises à jour répétées dans les scripts JMPOù est
Prevent Name Collision(1)
d'où vient-il ?
Effectuez la jointure de manière interactive dans la plateforme JMP Join, assurez-vous qu'elle corresponde à l'aperçu, exécutez-la et copiez le script à partir du journal amélioré.
Re: Bonnes pratiques pour les jointures/mises à jour répétées dans les scripts JMPAvez-vous essayé d'activer « Mettre à jour la table principale avec les données de la deuxième table » ?

[Aucune nouvelle colonne - mettre à jour toute ligne correspondante]
ou « Correspondance avec la colonne du même nom » ?

[Similaire au premier - mais avec de nouvelles colonnes.]
Re: Bonnes pratiques pour les jointures/mises à jour répétées dans les scripts JMPyes, but this would be impractical for large list of columns</CODE></P>
</LINGO-BODY>
<LINGO-SUB id="lingo-sub-914649" slang="en-US" mode="CREATE" translate="no">Re: Bonnes pratiques pour les jointures/mises à jour répétées dans les scripts JMP</LINGO-SUB>
<LINGO-BODY id="lingo-body-914649" slang="en-US" mode="CREATE">
<BLOCKQUOTE>
<HR />
<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/63230" target="_blank">@zetaVagabond1</A> wrote:
<BR />
<P>yes, but this would be impractical for large list of columns<CODE class=" language-jsl">
Ceci est une réponse à ... ?