Aggiornamento delle tabelle dati JMP<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ho una tabella Excel che utilizzo per aggiornare una tabella dati JMP 2-3 volte a settimana.Tuttavia, dopo aver recuperato il file Excel, lo script di origine viene modificato quando utilizzo la piattaforma Tables per eseguire l'aggiornamento.Lo script di origine cambia in base ai passaggi eseguiti nella piattaforma di aggiornamento delle tabelle.Perché sta succedendo?Mi sto perdendo un passaggio?
Ri: Aggiornamento delle tabelle dati JMPHo risolto il problema con il ciclo per automatizzare il processo di estrazione dei nomi degli script dall'elenco e ora creerà dinamicamente la tabella aggiornata e sposterà qualsiasi script contenuto nella tabella originale nella nuova tabella.
Ho commentato la versione finale e l'ho inclusa di seguito se qualcun altro ha bisogno di utilizzare questa soluzione.
Grazie per tutto il vostro aiuto.
Dave
//
// The purpose of this script is to create an updated JMP data table based on the same source
// data file used to create the JMP data table currently open.
//
// This script is used when you have created a JMP data table from a source data file that is
// updated over time and will continue to "grow" with new data as time progresses. Examples of
// this type of file is a monthly time accounting record or a periodic production report.
//
// This script is focused on source data that is "added to" as time progresses and is not intended
// for source data that contains only data for the given period with no historical data retained.
//
// The script utilzes the original "Open" command found within the "Source" script of the JMP data table
// and then copies over all of the scripts from the original data table into the new "updated" data table.
dtCurrent = Current Data Table();
// copy the Open command from the "Source" script of the main data table
// this is only required once as long as the name and location of the source data file remains unchanged
dtUpdate = Open(
"Z:\JMP Data Analysis\SLOC Metrics\Data Update Testing\Project_Metrics.xlsx",
Worksheets( "Code_Change_Metrics" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
// end of the Open command from the "Source" script of the main data table
// don't forget to add the semicolon after the closing ")" above since we are added more commands below
// Get the list of scripts that are contained within the main data table
lstScriptNames = dtCurrent << Get Table Script Names;
// Loop through all the script names and move them to the updated dat table
For( i = 1, i <= N Items( lstScriptNames ), i++,
// pull each script name from the list of scripts
scriptName = lstScriptNames[ i ];
// By opening the updated data file with the copied Open command, we already created the "Source" script
IF(scriptName != "Source",
// Get the "contents" of this script from the main data table
scriptDef = dtCurrent << get table variable( scriptName );
// Insert this script into the updated data table
Eval(
Parse(
Eval Insert( "dtUpdate << New Script( \!"^scriptName^\!", ^scriptDef^ )" )
) // end Parse statement
); // end Eval statement
) // end IF statement
); // continue For Loop until all scripts in the main data table have been copied
// At the completion of this script, you will have two data tables open with exactly the same name.
//
// The first table is the "main" table that contains the old data and all the source scripts.
// When you attempt to close this table you will NOT be prompted to "save" the table since we made
// no changes to it. The "main" table must be closed prior to closing and saving the "updated" table since
// we are going to save the "updated" table in the same location with the same name as the original "main"
// table since we are "replacing" the old table with the update version.
//
// The second table is the "updated" table which we created with the above script.
// This table has been loaded with the "updated" data file found in the "Source" script. It now also
// contains all of the scripts that were contained in the "main" data table for continued use with the
// updated source data. You will note that is has exactly the same table name as the "main" table, but if you
// inspect the rows of data you will find the only difference between the two table is that the "updated" table
// contains the additional rows of data from the updated source data file.
//
// The objective is to close the "main" table which should not prompt for a save, then close the "updated" table
// save it at the prompt over the original "main" table. When closing the "updated" table, you do have the option
// save it to any location you desire with any name you desire. My goal for creating this script was to replace
// the original table with the updated table.
//
// I will note here that I assumed I could not add the close of the main table and the save
// of the updated table to this script since by closing the main table (which must be done first)
// I would be closing the table in which this executing script is located. As such I assume the close action
// would stop the script.Ri: Aggiornamento delle tabelle dati JMPOK,
Grazie per le risposte rapide Il mio problema è leggermente diverso dal concetto presente negli esempi che hai fornito, ma mi hai fornito le informazioni di cui avevo bisogno per andare avanti in modo significativo.
Nella tua soluzione sopra, ora posso AGGIUNGERE il contenuto completo del nuovo file di dati al vecchio file di dati, MA il mio problema è legato allo "spostamento" in una versione letterale dei dati aggiornati in quanto il mio NUOVO file ha semplicemente righe di dati aggiuntive oltre il primo. Non è una questione di connessione/correlazione di due set di dati separati.
Il tuo esempio mi ha fatto capire che quando eseguo lo script "Sorgente" nella tabella originale (che in realtà punta al file di dati di origine nuovo/aggiornato con lo stesso nome e posizione dei dati originali) ottengo una nuova tabella di dati con solo lo script "Sorgente" presente. Mi ero perso quando ora avevo una nuova tabella con i dati correnti/aggiornati come desiderato, ma nessuno dei miei altri script.
Nel tuo esempio, hai terminato l'unione dei dati con "ora copia i tuoi script dalla vecchia tabella alla nuova tabella".
Momento della lampadina....puoi farlo?
Quindi, cercando nei forum ho trovato alcuni esempi di elenco degli script in una tabella e inserimento in un'altra. Ad un certo punto capirò come collegarmi ad altre discussioni in modo da poter indicare riferimenti come questo, ma per ora ecco il codice nell'esempio:
per un singolo script:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
scriptName = "Oneway";
scriptDef = dt << get table variable( scriptName );
dt2 = New Table( "little class" );
Eval(
Parse(
Eval Insert(
"
dt2 << New Script( \!"^scriptName^\!", ^scriptDef^ )
"
)
)
);
per tutti gli script in una tabella:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = New Table( "little class" );
Wait( 3 );
lstScriptNames = dt << Get Table Script Names;
Wait( 3 );
j = N Items( lstScriptNames );
For( i = 1, i <= N Items( lstScriptNames ), i++,
// scriptName = lstScriptNames;
scriptName = lstScriptNames( i );
scriptDef = dt << get table variable( scriptName );
Eval(
Parse(
Eval Insert( "dt2 << New Script( \!"^scriptName^\!", ^scriptDef^ )" )
)
);
);
Ora: ho creato una copia dello script "Sorgente", ho aggiunto le assegnazioni delle tabelle alle variabili dt e quindi ho tentato di seguire il comando open con il ciclo per copiare tutti gli script. Non sono riuscito a caricare correttamente i valori scriptName e scriptDef. scriptName sembra caricare l'elenco corretto di script nella tabella corrente, ma la chiamata scriptDef non inserisce le definizioni.
Ho quindi aggiunto manualmente ciascuno dei miei script di test con singole copie manuali ripetute che hanno funzionato meravigliosamente. Ecco il mio codice risultante:
dtCurrent = Current Data Table();
dtUpdate = Open(
"Z:\JMP Data Analysis\SLOC Metrics\Data Update Testing\Project_Metrics.xlsx",
Worksheets( "Code_Change_Metrics" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
scriptName = "Mod vs Unmod Code Change Sample";
scriptDef = dtCurrent << get table variable( scriptName );
Eval(
Parse(
Eval Insert(
"
dtUpdate << New Script( \!"^scriptName^\!", ^scriptDef^ )
"
)
)
);
scriptName = "Individual & Moving Range chart of % Code Change";
scriptDef = dtCurrent << get table variable( scriptName );
Eval(
Parse(
Eval Insert(
"
dtUpdate << New Script( \!"^scriptName^\!", ^scriptDef^ )
"
)
)
);
scriptName = "Total Lines vs. Asset / Code Analyzed";
scriptDef = dtCurrent << get table variable( scriptName );
Eval(
Parse(
Eval Insert(
"
dtUpdate << New Script( \!"^scriptName^\!", ^scriptDef^ )
"
)
)
);
scriptName = "% Code Change vs. Asset / Code Analyzed";
scriptDef = dtCurrent << get table variable( scriptName );
Eval(
Parse(
Eval Insert(
"
dtUpdate << New Script( \!"^scriptName^\!", ^scriptDef^ )
"
)
)
);
scriptName = "UpdateDataTable";
scriptDef = dtCurrent << get table variable( scriptName );
Eval(
Parse(
Eval Insert(
"
dtUpdate << New Script( \!"^scriptName^\!", ^scriptDef^ )
"
)
)
);
scriptName = "TestingTableUpdateScript";
scriptDef = dtCurrent << get table variable( scriptName );
Eval(
Parse(
Eval Insert(
"
dtUpdate << New Script( \!"^scriptName^\!", ^scriptDef^ )
"
)
)
);
scriptName = "CopySingleScriptFromOldTable";
scriptDef = dtCurrent << get table variable( scriptName );
Eval(
Parse(
Eval Insert(
"
dtUpdate << New Script( \!"^scriptName^\!", ^scriptDef^ )
"
)
)
);
scriptName = "CopyAllScriptsFromOldTable";
scriptDef = dtCurrent << get table variable( scriptName );
Eval(
Parse(
Eval Insert(
"
dtUpdate << New Script( \!"^scriptName^\!", ^scriptDef^ )
"
)
)
);
Con il mio file di tabella JMP originale aperto (creato con l'ultima versione del file di dati di origine) ora posso eseguire questo script che crea una NUOVA TABELLA dal file di dati di origine aggiornato e quindi copia tutti gli script nella nuova tabella. Quindi ho DUE tabelle JMP aperte, entrambe con gli stessi titoli, entrambe con gli stessi script, ma una con i vecchi dati e una con i nuovi dati (più dati). Ora chiudo la vecchia tabella e SALVO la nuova tabella sopra di essa nella stessa posizione.
BOOM! Dati aggiornati con tutti gli script disponibili per l'esecuzione. Stesso percorso e nome del file in modo che il processo possa ripetersi con ogni aggiornamento del report settimanale o mensile, a seconda delle necessità.
Mi piacerebbe davvero che il ciclo automatizzato per il caricamento di tutti gli script funzioni dinamicamente in modo da poter utilizzare lo stesso script su altri set di dati senza dover gestire i nomi degli script nel codice effettivo. Per ora sto andando avanti con la versione manuale finché non risolvo il problema con il loop.
Grazie mille per la risposta rapida e i campioni che alla fine mi hanno portato a una soluzione.
Ri: Aggiornamento delle tabelle dati JMPDato che hai JMP 13, potresti anche farlo in questo modo:
NamesDefaultToHere(1);
// Make some 'new data' (imported from Excel)
dt2 = New Table( "New Data",
Add Rows( 10 ),
New Column( "x",
Numeric,
"Continuous",
Formula( Random Normal() )
),
New Column( "y",
Numeric,
"Continuous",
Formula( Random Integer(10, 20 ) )
)
);
dt2 << runFormulas;
Column(dt2, "x") << deleteFormula;
Column(dt2, "y") << deleteFormula;
// Make some 'old data' containing a saved script (stored as a JMP table)
dt1 = New Table( "Old Data",
Add Rows( 20 ),
New Script(
"y vs. x",
Graph Builder(
Variables( X( :x ), Y( :y ) ),
Elements( Points( X, Y, Legend( 5 ) ), Smoother( X, Y, Legend( 6 ) ) )
)
),
New Column( "x",
Numeric,
"Continuous",
Formula( Random Normal() )
),
New Column( "y",
Numeric,
"Continuous",
Formula( Random Integer(1, 10 ) )
)
);
dt1 << runFormulas;
Column(dt1, "x") << deleteFormula;
Column(dt1, "y") << deleteFormula;
// Update dt1 from dt2 using data table subscripting (requires JMP 13 or later)
Wait(3);
firstNewRow = NRows(dt1) + 1;
dt1 << addRows(NRows(dt2));
dt1[firstNewRow::NRow(dt1), 0] = dt2[0, 0];
Ri: Aggiornamento delle tabelle dati JMPDave,
A seconda delle tue esigenze specifiche, la piattaforma Update potrebbe essere la soluzione. Tuttavia, JSL ti consentirà di fare praticamente tutto ciò di cui hai bisogno e di ritrovarti con gli script originali nella tabella dati riformata. Sarebbe un pezzo di codice abbastanza semplice, che copia gli script incorporati dalla tabella originale nella tabella appena formata.
Ri: Aggiornamento delle tabelle dati JMPVedo che questo è un vecchio thread, ma sembra essere l'unico che riesco a trovare correlato al problema che sto riscontrando.
Sono un nuovo utente di JMP e ho la versione 13.1. Mentre sto imparando a utilizzare JMP, ho importato set di dati che utilizzo per il monitoraggio e il reporting delle metriche.Posso importare i file Excel e creare script per eseguire l'analisi.Funziona alla grande!
Ora il problema:
I dati di origine per questo sforzo vengono aggiornati ovunque, da settimanale a mensile.Il mio obiettivo è configurare JMP in modo da eseguire la stessa analisi iniziale sui dati ogni mese, ma dopo aver aggiornato la tabella JMP ai dati Excel più recenti.Ho provato a utilizzare lo script "sorgente", ma questo crea semplicemente una nuova tabella JMP che non contiene gli script che salvo nella tabella JMP originale.
Ho letto della funzione "aggiorna", ma sembra essere una funzione per aggiornare la tabella se i dati all'interno della tabella sono cambiati.La funzione "aggiornamento" è l'unico metodo disponibile per "risincronizzare" o "importare" e aggiornare/aumentare nel tempo il set di dati di origine?
Qualsiasi aiuto sarebbe molto apprezzato.
Dave
Ri: Aggiornamento delle tabelle dati JMPSulla base dei tuoi primi due post in questo thread, non avevo idea che ti riferissi alla funzione di aggiornamento delle tabelle in JMP. In realtà ho utilizzato Update per un bel po' di recente e non ho mai avuto l'impressione che avrebbe funzionato con qualcosa di diverso dalle tabelle di dati JMP; è infatti possibile accedervi tramite la barra degli strumenti Tabella (Dati) o il menu Tabella (Dati). Inoltre, i tuoi post originali non fornivano una descrizione dettagliata di ciò che stavi facendo, da qui il motivo per cui nessuno ha risposto.
Nella tua situazione in cui aggiorni regolarmente una tabella in JMP con nuovi dati da Excel, scriverei uno script che importi i dati dalla cartella di lavoro di Excel in JMP, quindi aggiorni la tabella dei dati mantenuta con la tabella dei dati creata dalla cartella di lavoro di Excel. Detto questo, avere la possibilità di eseguire unioni, che è ciò che eseguono le funzioni Unisci, Aggiorna e Concatena, con origini dati esterne potrebbe essere una funzionalità interessante da aggiungere. JMP dispone già di questa funzionalità con i database esterni grazie al supporto SQL, ma funziona solo con i database SQL. Excel non è un database, per non parlare di un database SQL, quindi le query SQL non possono essere sfruttate nel tuo caso. JMP attualmente non dispone attualmente di funzionalità con un clic per interrogare direttamente i fogli di lavoro in una cartella di lavoro Excel per un'unione di dati.
Ri: Aggiornamento delle tabelle dati JMPsaitcopuroglu, ho finito per chiamare il supporto tecnico JMP.Si scopre che la "soluzione alternativa" che ho delineato sopra è l'unica soluzione in questo momento per la situazione di aggiornamento da un foglio di calcolo Excel.Mi è stato detto che la funzione di aggiornamento è progettata per l'aggiornamento da una tabella dati JMP a un'altra.Tuttavia, il problema verrà presentato come idea per una futura versione di JMP.
Ri: Aggiornamento delle tabelle dati JMPPotresti fornire file Excel/jmp/jsl per capire meglio? Sono anche curioso
Ri: Aggiornamento delle tabelle dati JMPQualcuno....qualcuno....qualcuno?
Ho fatto alcuni esperimenti con la funzione di aggiornamento.Sembra che JMP sovrascriva lo script salvato come "Sorgente" nella tabella dati.La PRIMA volta che aggiorni, tutto funziona bene.TUTTAVIA, quando viene richiamato l'aggiornamento, lo script salvato come "Sorgente" viene immediatamente sovrascritto da JMP con lo script per aggiornare la tabella originale dalla nuova tabella.La prossima volta che provi ad aggiornare dallo script "Sorgente", non succede nulla.Quindi, ho provato questo: ho rinominato lo script "Sorgente" nella tabella dati in "Aggiorna" e ho riprovato.Questa volta lo script "Aggiornamento" non è stato modificato, ma è stato aggiunto un nuovo script chiamato "Sorgente" alla tabella dati.Questa "soluzione alternativa" ovviamente NON è efficiente e non dovrebbe essere necessaria.