Domanda sui riferimenti del tavolo (da Russel)
Questa domanda è emersa nel thread su " Re: Sessione pratica 2022Q1 - Principianti" - e vorrei che anche altri si unissero alla discussione, quindi l'ho inserito nel forum di discussione.
Domanda sui riferimenti alle tabelle che hai mostrato oggi: se elabori più tabelle in sequenza come parte di uno script, ripeti i riferimenti alle tabelle all'infinito (dt1, dt2, dt3,...) o esiste una soluzione più intelligente?
Sfondo: manipolo frequentemente le tabelle (unire, concatenare, dividere, ecc.) e talvolta ho un bel po' di tabelle che apro, elaboro e chiudo in sequenza prima di passare al tavolo successivo nello stesso script finché non ho il tavolo finale che desidero .
Re: Domanda sui riferimenti del tavolo (da Russel)Ciao @Ressel ,
dipende davvero da cosa vuoi fare finalmente. Se diciamo 100 tabelle di dati che vuoi elaborare allo stesso modo e poi essere chiuse, un ciclo (per aprire, elaborare, chiudere ogni tabella) farebbe meglio il lavoro che aprire tutte le 100 tabelle e poi elaborarlo uno dopo l'altro. Uno dei motivi è che non crei tanti handle di Windows che potrebbero provocare un altro problema sul lato del sistema.
In generale, sarei un po' più descrittivo nel nome della variabile della tabella, quindi capisco meglio di cosa si tratta, se ha senso. "dt" è principalmente per l'hack sporco;)
Puoi anche ottenere tutte le tabelle di dati aperte e quindi scorrerle utilizzando
Get Data Table List();
Questa probabilmente sarebbe una mossa intelligente.
Come si sentono gli altri al riguardo?
Re: Domanda sui riferimenti del tavolo (da Russel)Sono d'accordo con @martindemel , dipende da dove si trovano i file, dall'ordine in cui li elabori e da cosa vuoi farne. JSL ha molte funzioni integrate al di fuori del registro avanzato che possono aiutare. Per esempio, File nella directory ti dà un elenco di tutti i file in una directory. Scegli File consente di selezionare interattivamente uno o più file da una directory. Sebbene il registro avanzato esegua un buon lavoro nell'acquisizione di operazioni interattive, si desidera comunque sostituire i riferimenti ai nomi delle tabelle codificati con riferimenti variabili alle tabelle. @martindemel ha mostrato alcuni di questi utilizzando dt = Apri(... Nella maggior parte dei casi un'operazione JSL che apre un file restituirà un handle alla tabella di dati che viene creata. Gli handle della tabella dati vengono creati anche quando si invia un messaggio a una tabella con un'operazione da Tabelle menù. Ad esempio, se stai creando un sottoinsieme, la sintassi
subsetDT = dt << Subset(...
ti permetterà di catturare il riferimento alla tabella appena creata. Le altre operazioni sulla tabella funzionano in modo simile.
Re: Domanda sui riferimenti del tavolo (da Russel)Grazie per le risposte. Un po' di più sullo sfondo di ciò con cui sto lavorando.
Carico le tabelle dalla nostra implementazione di Google Cloud Platform tramite ODBC. Queste tabelle vengono regolarmente aggiornate con i dati di produzione recenti. Ad esempio, la prima tabella che carico (la riferimento come dt ) dispone di ID batch, nomi di parametri per diversi parametri QC, risultati di misurazione e unità di misura in colonne separate. L'ho diviso per nome del parametro QC (e riferimento all'output come dt2 , chiusura dt ). Quindi, ad esempio, carico un'altra tabella che incrocia gli ID batch con le ubicazioni di produzione (a cui faccio riferimento come dt3 ). Dopo di che posso unirmi dt2 insieme a dt3 , creando dt4 e così via e così via, finché non ho una tabella che contiene tutte le informazioni di cui penso di aver bisogno prima di procedere con qualsiasi analisi. In alcuni script sto elaborando quasi 10 tabelle, tutte indicate come dt(n) . Questo è ciò che il mio attuale livello di abilità mi permette.
Ho un piano a medio termine per utilizzare uno script del genere per i grafici di controllo. Al momento valuto solo visivamente le tendenze e invio screenshot o grafici esportati in html a diversi stakeholder.
Quello che prendo da questa conversazione è usare riferimenti a tabelle più descrittivi. Questi sono anche quelli che vengono chiamati maniglie?
Re: Domanda sui riferimenti del tavolo (da Russel)I nomi descrittivi degli handle/riferimenti aiuteranno te (o qualcun altro che deve modificare il tuo codice) a un certo punto. Questo rende anche più facile la stampa di debug, quando puoi usare Show(dt_batchid_loc); ad esempio per vedere il nome delle tabelle create.
Potrebbe anche essere utile usare Output table("name of table") durante la creazione di tabelle. Questo ti aiuterà se devi (quando) eseguire il debug del codice. Se non lo fai (tendo a saltarlo e di tanto in tanto mi perseguita) è molto più facile vedere quale tabella è aperta da un nome come "BatchID_with_Loc" rispetto a "Riepilogo 3041 senza titolo di QC , Loc" o qualcosa del genere.
Re: Domanda sui riferimenti del tavolo (da Russel)C'è anche la possibilità di fare la manipolazione delle tabelle nel database (definizione di query ad es. Query Builder o in SQL nativo). Ciò è vantaggioso per set di dati di grandi dimensioni, poiché si evita il traffico e si carica pesantemente il server. Quindi devi anche gestire meno tabelle in JMP.
Re: Domanda sui riferimenti del tavolo (da Russel)Ho già provato a utilizzare il generatore di query. Era incredibilmente lento e continuava a bloccarsi costantemente. Quindi ho contattato il supporto tecnico SAS, ma non sono riusciti a risolvere il problema. Di conseguenza mi sono limitato a gestire le singole tabelle in uno script, che; date le pessime prestazioni del generatore di query; è molto più comodo ed efficiente. Potrebbe essere che ciò sia dovuto al fatto che le tabelle che sto caricando hanno circa 100.000 righe - questa era almeno la conclusione del supporto tecnico. Purtroppo, non ho praticamente nessun altro posto a cui rivolgermi che questi "massicci" tavoli.
Inoltre, penso di aver bisogno di familiarizzare urgentemente con il debug. Anche se riesco a "dibattere" alcune utili righe di codice, non sto considerando l'architettura, l'estetica o; infatti; come creare uno script di cui è possibile eseguire il debug. Purtroppo per me è ancora un concetto estraneo.