Column() vs As Column() vs datable:column vs dt:As name("column")JSL ha diversi modi per fare riferimento alle colonne. Apriamo prima una tabella di dati.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Bands data.jmp" );
Ora creiamo uno script di tabella che ha qualcosa di simile.
dt = current data table();
print(dt:timestamp == Column(dt, "timestamp"));
// 0
print(Column(dt, "timestamp")==As Column(dt, "timestamp"));
//0
Negli script automatizzati (ad esempio un grafico), quando un utente modifica il nome di una colonna, sembra adattare lo script al nuovo nome della colonna. Questo non è riuscito in JSL personalizzato, con qualcosa come Index() che appare.
In che modo si potrebbero utilizzare tutti questi metodi per rendere uno script JSL robusto per le modifiche al nome della colonna?
Saluti,
ScriptingRe: Column() vs As Column() vs datable:column vs dt:As name("column")Davvero sorprendente che a Pannello di controllo funziona ancora dopo aver rinominato le colonne
- se è memorizzato come Table Script;)
Grazie per aver implementato un algoritmo di correzione automatica così eccezionale.
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Ecco l'augurio 
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idi-p/556596
Dovrebbe essere facile da implementare ora per JSL Editor, poiché una funzionalità simile è stata appena introdotta con il nuovo generatore di flussi di lavoro di 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")Bel video tutorial sulle differenze tra column() e as column():
Errori JSL più comuni e come evitarli (2020-US-30MP-571)
(a partire dalle 5:18 min)
con l'esempio
dt << Select Where( Column( colName )[Row()] == 14 );
dt << Select Where( As Column( colName ) == 14 );
Per quanto riguarda
In che modo si potrebbero utilizzare tutti questi metodi per rendere uno script JSL robusto per le modifiche al nome della colonna?
Che ne dici di una funzione di gestione degli errori che rileva gli eventi di colonna mancanti dopo le modifiche al nome della colonna, con un'opzione per correggere automaticamente il codice.
L'idea:
In caso di colonna mancante, invece di mostrare un messaggio di errore, JMP potrebbe aprire una finestra con un elenco di colonne per selezionare quella corretta.
Quindi l'esecuzione del codice potrebbe continuare a funzionare e il codice sorgente potrebbe essere corretto automaticamente.
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Il miglior riferimento (al di fuori della mia esperienza e un sacco di prove ed errori) è dall'indice di scripting:


Le pagine di aiuto sono un altro posto Colonna(- , "nome", "formattato") E
Come Colonna(nome) . Questo ha anche alcune informazioni Guida allo scripting > Blocchi predefiniti JSL > Regole per la risoluzione dei nomi > Domande frequenti sulla risoluzione dei nomi E Guida per script > Tabelle dati > Colonne > Invia messaggi a oggetti colonna dati Anche Iterare sulle righe in una tabella , quindi fondamentalmente la documentazione (in particolare la Guida allo scripting).
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Potresti per favore includere nella tua risposta un riferimento che spieghi questo pezzo?
"As Column() "accede" a una colonna ( cosa significa dipende dai casi... )."
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Di solito non mi piacciono i post +1, ma @jthi questa è esattamente la stessa metodologia che uso per gli script di produzione.Di solito ci penso come
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")Questo è un post un po' lungo e salta qua e là, scusatemi..
Come Column(), Column(), :colname, ... non è semplice in JSL e quale usare dipende dal caso. Il mio metodo preferito è quello Sempre usa (tranne quando non posso o se voglio un aspetto un po' più pulito nello script) Column(datatable_reference, "stringa del nome della colonna"). :colname ha i suoi vantaggi che a volte possono essere usati a beneficio degli scripter (alcuni sono menzionati qui Guida per lo scripting > Blocchi predefiniti JSL > Regole per la risoluzione dei nomi > Regole per la risoluzione dei nomi nella sezione Eccezioni).
Mi piace anche usare stringhe di nomi di colonna invece di :colname sintassi per evitare alcuni problemi che potrebbero verificarsi qua e là. Ad esempio << Ottieni nomi colonne ("Stringa") invece di solo << Ottieni nomi colonne () e quindi ottengo il riferimento con Colonna (stringa) se necessario.
Colonna(- , "nome", "formattato") E
Come Colonna(nome) non sono uguali. Column() ti restituisce un riferimento alla colonna e As Column "accede" a una colonna (cosa significa dipende dal caso...). Quando si esegue questo script per la prima volta, dt:timestamp restituirà il valore mancante, poiché Row() non è stato definito correttamente per l'indicizzazione di JMP (è inizializzato come 0).
Visualizza altro...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
//Row() = 0;
Show(Row(), dt:name, Column(dt, "name"), As Column(dt, "name"));
Row() = 1;
Show(Row(), dt:name, Column(dt, "name"), As Column(dt, "name"), Column(dt, "name")[], Column(dt, "name")[Row()]);
Print(dt:name == Column(dt, "name"));
// 0
Print(Column(dt, "name") == As Column(dt, "name"));
//0
Print(dt:name == As Column(dt, "name"));
//1
stop();
//
Show(Column("name") << get values);
Show(As Column("name") << get values);
Show(:name << get values);
stop();
col1 = "name";
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(col1), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Eval(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(As Column(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Column(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Column(dt, col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
@ih ha alcuni buoni suggerimenti su come gestire i cambi di nome nelle colonne. Inoltre, quando si inseriscono colonne, ad esempio nel Costruttore di grafici, è possibile utilizzare Inserisci un'espressione in un'altra usando Eval Insert, Eval Expr, Parse e Substitute e talvolta Eval(). < @pauldeen suggerito).
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Intendi qualcosa di simile?
Dopo aver eseguito il codice, le prime due voci nel TABLE SCRIPT sono state automaticamente modificate con il nuovo nome.
Ha funzionato anche per il :"nome"n
Stesso comportamento per qualsiasi grafico ecc.: adattato automaticamente al nuovo nome della colonna.
Ma per As column() e Column() non ha funzionato.
Né lo ha fatto per nessun nome di colonna nello script originale 
Prima:

Dopo:

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Script(
"script",
:name;
:"name"n;<BR /> As Column( "name" );
Column("name");
);
dt:name << Set Name( "name_2" );
dt:name[1]
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Come sarebbe Voi sai a quale colonna dovrebbe fare riferimento lo script?Se hai davvero bisogno di monitorare le modifiche ai nomi delle colonne, puoi farlo iscrivendoti alle modifiche nella tabella e registrando i nomi delle colonne da qualche parte, ma penso che sarebbe piuttosto complesso.Potresti invece definire una proprietà di colonna e cercarla?
Esempio di sottoscrizione dalla Guida allo scripting:
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 );
Usa la proprietà della colonna
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")Indicizzare la colonna in base al numero column(dt, 1) o richiedere all'utente di selezionare una colonna o immettere un nome di colonna. Guarda in New Window () nei file della guida.