Re: Column() vs As Column() vs datable:column vs dt:As name("column")Ottimo video tutorial sulle differenze tra column() e as column():
Gli errori più comuni in JSL e come evitarli (2020-US-30MP-571)
(a partire da 5:18 min)
con l'esempio
dt << Select Where( Column( colName )[Row()] == 14 );
dt << Select Where( As Column( colName ) == 14 );
Riguardo
Come si potrebbero utilizzare tutti questi metodi per rendere uno script JSL resistente alle modifiche dei nomi delle colonne?
Che ne dite di una funzionalità di gestione degli errori che rilevi gli eventi di colonna mancante dopo la modifica del 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 e il codice sorgente potrebbe essere corretto automaticamente.
modifica: collegamento diretto al video
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
[il collegamento in alto non viene visualizzato da tutti i browser]
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...
@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")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.
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,
Automazione e scriptingPersonalizzazione di massaRe: Column() vs As Column() vs datable:column vs dt:As name("column")Ecco l'augurio 
rilevare l'errore "colonna mancante" e fornire un menu di selezione
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")@brady_brady discute questo argomento in dettaglio in Better JSL Smoother Migration: How To Fix Your Own Code @10min
modificare:
Purtroppo il video è stato archiviato.
https://community.jmp.com/t5/contentarchivals/contentarchivedpage/message-uid/537424#U537424
Ri: Colonna() vs As Colonna() vs datable:colonna vs dt:As nome("colonna")Incredibile che a Pannello di controllo funziona ancora dopo aver rinominato le colonne
- se è memorizzato come script di tabella
modificare:
ah, no... funziona anche se la dashboard/applicazione NON è archiviata come script di tabella.
Interessante .
modifica2 - limitazione:
gli "script" JSL dell'applicazione non vengono aggiornati automaticamente, ma solo il codice in background dell'applicazione.

Ri: Colonna() vs As Colonna() vs datable:colonna vs dt:As nome("colonna")Intendi qualcosa di simile?
Dopo aver eseguito il codice, le prime due voci nello SCRIPT DELLA TABELLA sono state automaticamente modificate con il nuovo nome *)
Stesso comportamento per qualsiasi grafico ecc.: tutto viene automaticamente adattato al nuovo nome della colonna.
così bello!
Ma per As column() e Column() non ha funzionato.
Nemmeno per il nome di colonna in uno script che NON è archiviato come script di tabella...
Ri: Colonna() vs As Colonna() vs datable:colonna vs dt:As nome("colonna")Poiché i nomi delle colonne sono numeri, ciò non accadrà se utilizzi lettere inglesi pure.