Re : Column() vs As Column() vs datable:column vs dt:As name("column")Bon tutoriel vidéo sur les différences entre column() et as column() :
Erreurs JSL les plus courantes et comment les éviter (2020-US-30MP-571)
(à partir de 5:18 min)
avec l'exemple
dt << Select Where( Column( colName )[Row()] == 14 );
dt << Select Where( As Column( colName ) == 14 );
Concernant
Comment utiliser toutes ces méthodes pour rendre un script JSL robuste aux changements de nom de colonne ?
Que diriez-vous d'une fonctionnalité de gestion des erreurs qui détecte les événements de colonne manquante après les changements de nom de colonne - avec une option pour corriger automatiquement le code.
L'idée :
En cas de colonne manquante, au lieu d'afficher un message d'erreur, JMP pourrait ouvrir une fenêtre avec une liste de colonnes pour choisir la bonne.
L'exécution du code pourrait alors continuer et le code source pourrait être corrigé automatiquement.
edit : lien direct vers la vidéo
https://community.jmp.com/t5/Abstracts/Most-Common-JSL-Mistakes-and-How-to-Avoid-Them-2020-US-30MP-571/ev-p/758506/redirect_from_archived_page/true#U281519
[le lien en haut ne s'affiche pas avec tous les navigateurs]
Re : Column() vs As Column() vs datable:column vs dt:As name("column")La meilleure référence (en dehors de ma propre expérience et de nombreux essais et erreurs) provient de l'index de script :


Les pages d'aide sont un autre endroit Colonne(- , "nom", "formaté") et
Comme colonne (nom) . Cela a aussi quelques informations Guide de script > Blocs de construction JSL > Règles pour la résolution de noms > Foire aux questions sur la résolution de noms et Guide de script > Tables de données > Colonnes > Envoyer des messages aux objets de colonne de données aussi Itérer sur les lignes d'un tableau , donc essentiellement la documentation (en particulier le Scripting Guide).
Re : Column() vs As Column() vs datable:column vs dt:As name("column")Pourriez-vous s'il vous plaît inclure dans votre réponse une référence qui explique ce bit?
"As Column() "accède" à une colonne ( ce que cela signifie dépend du cas... )."
Re : Column() vs As Column() vs datable:column vs dt:As name("column")Je n'aime généralement pas les messages +1, mais @jthi c'est exactement la même méthodologie que je fais pour les scripts de production.J'y pense généralement comme
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
col_name = "age";
show(ismissing(AsColumn(dt, col_name)) & ismissing(dt:age)); // these are both the same as far as I know
cols = dt << get column references; // these are the actual references
show(cols[2] == Column(dt, col_name)); // these are references
Re : Column() vs As Column() vs datable:column vs dt:As name("column")C'est un peu long et je saute ici et là, désolé pour ça..
Comme Column(), Column(), :colname, ... n'est pas simple en JSL et celui à utiliser dépend du cas. Ma méthode préférée est de toujours use (sauf quand je ne peux pas ou si je veux un look un peu plus propre dans le script) Column(datatable_reference, "chaîne du nom de la colonne"). :colname a ses avantages qui peuvent parfois être utilisés pour les scripteurs (certains sont mentionnés ici Guide de script > Blocs de construction JSL > Règles de résolution de noms > Règles de résolution de noms dans la section Exceptions).
J'aime aussi utiliser des chaînes de noms de colonnes au lieu de la syntaxe :colname pour éviter certains problèmes qui pourraient survenir ici et là. Par exemple << Get Column Names("String") au lieu de simplement << Get Column Names() puis j'obtiens la référence avec Column(string) si nécessaire.
Colonne(- , "nom", "formaté") et
Comme colonne (nom) ne sont pas les mêmes. Column() vous renvoie une référence à la colonne et As Column "accède" à une colonne (ce que cela signifie dépend du cas...). Lorsque vous exécutez ce script pour la première fois, dt:timestamp renverra la valeur manquante, car Row() n'a pas été correctement défini pour l'indexation de JMP (il est initialisé à 0).
Voir plus...
@ih a quelques bonnes suggestions sur la façon de gérer les changements de nom dans les colonnes. De plus, lors de l'insertion de colonnes dans Graph Builder, par exemple, vous pouvez utiliser Insérer une expression dans une autre en utilisant Eval Insert, Eval Expr, Parse et Substitute et parfois Eval(). << Get Name peut également être utile de temps en temps ou pour créer une interface utilisateur avec Filter Col Selector / Col List Box par exemple (comme @pauldeen suggéré).
Re : Column() vs As Column() vs datable:column vs dt:As name("column")Comment serait toi savoir à quelle colonne le script doit faire référence ?Si vous avez vraiment besoin de surveiller les changements de nom de colonne, vous pouvez le faire en vous abonnant aux changements dans le tableau et en enregistrant ces noms de colonne quelque part, mais je pense que ce serait assez complexe.Pourriez-vous plutôt définir une propriété de colonne et la rechercher ?
Exemple d'abonnement du guide de script :
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {dtab, col, oldname},
Print( dtab << getname() );
Print( "new column name", (col << getname()) );
Print( "old name", oldname );
);
sub = dt << Subscribe( "", OnRenameColumn( f ) );
Column( dt, 1 ) << set name( "test" );
Wait( 1 );
dt << unsubscribe( sub, on rename column );
Utiliser la propriété de colonne
Names Default To Here( 1 );
dt = Open( "$Sample_data/big class.jmp" );
dt:height << Set Property( "My Script Identifier", X );
XVar = Filter Each({c}, dt << Get Column References,
ident = char(c << Get Property( "My Script Identifier" ));
if( is empty(ident), 0, ident == "X", 1, 0)
)[1];Re : Column() vs As Column() vs datable:column vs dt:As name("column")Indexez la colonne par numéro de colonne (dt, 1) ou invitez l'utilisateur à sélectionner une colonne ou à entrer un nom de colonne. Regardez dans New Window() dans les fichiers d'aide.
Column() vs As Column() vs datable:column vs dt:As name("column")JSL a plusieurs façons de faire référence aux colonnes. Ouvrons d'abord une table de données.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Bands data.jmp" );
Maintenant, nous créons un script de table qui a quelque chose comme ça.
dt = current data table();
print(dt:timestamp == Column(dt, "timestamp"));
// 0
print(Column(dt, "timestamp")==As Column(dt, "timestamp"));
//0
Dans les scripts automatisés (par exemple, un graphique), lorsqu'un utilisateur modifie le nom d'une colonne, il semble adapter le script au nouveau nom de colonne. Cela a échoué dans JSL personnalisé, avec quelque chose comme Index() apparaissant.
Comment utiliser toutes ces méthodes pour rendre un script JSL robuste aux changements de nom de colonne ?
Salutations,
Automatisation et scriptPersonnalisation de masseRe : Column() vs As Column() vs datable:column vs dt:As name("column")Voici le souhait 
attraper l'erreur "colonne manquante" et fournir un menu de sélection
Cela devrait être facile à implémenter maintenant pour JSL Editor - car une fonctionnalité similaire vient d'être introduite avec le nouveau générateur de flux de travail de Jmp 17 :
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idc-p/561663/highlight/true#M2949
Re : Column() vs As Column() vs datable:column vs dt:As name("column")@brady_brady discute de ce sujet en détail dans Better JSL Smoother Migration: How To Fix Your Own Code @10min
modifier:
Malheureusement, la vidéo a été archivée.
https://community.jmp.com/t5/contentarchivals/contentarchivedpage/message-uid/537424#U537424
Re : Colonne() vs As Column() vs datable:column vs dt:As name("column")Étonnant qu'un Tableau de bord fonctionne toujours après avoir renommé les colonnes
- s'il est stocké sous forme de script de table
modifier:
ah, non... cela fonctionne même si le tableau de bord/l'application n'est PAS stocké en tant que script de table.
Intéressant .
modifier2 - limitation:
les "Scripts" JSL de l'application ne sont pas mis à jour automatiquement, juste le code en arrière-plan de l'application.

Re : Colonne() vs As Column() vs datable:column vs dt:As name("column")Tu veux dire quelque chose comme ca?
Après avoir exécuté le code, les deux premières entrées du TABLE SCRIPT ont été automatiquement remplacées par le nouveau nom *)
Même comportement pour n'importe quel graphique etc. : tout est automatiquement ajusté au nouveau nom de colonne.
trop cool!
Mais pour As column() et Column() cela n’a pas fonctionné.
Cela ne l'a pas non plus été le cas pour les noms de colonnes dans un script qui n'est PAS stocké en tant que script de table...
Re : Colonne() vs As Column() vs datable:column vs dt:As name("column")Étant donné que les noms de vos colonnes sont des nombres, cela ne se produira pas si vous utilisez des lettres anglaises pures.