Aktualisieren von JMP-Datentabellen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe eine Excel-Tabelle, mit der ich zwei- bis dreimal pro Woche eine JMP-Datentabelle aktualisiere.Nach dem Abrufen der Excel-Datei wird jedoch das Quellskript geändert, wenn ich die Tabellenplattform zum Durchführen der Aktualisierung verwende.Das Quellskript ändert sich zu den Schritten, die in der Tabellenaktualisierungsplattform ausgeführt werden.Warum passiert das?Übersehe ich einen Schritt?
Betreff: JMP-Datentabellen aktualisierenIch habe das Problem mit der Schleife herausgefunden, um den Prozess des Abrufens der Skriptnamen aus der Liste zu automatisieren. Jetzt wird die aktualisierte Tabelle dynamisch erstellt und alle in der Originaltabelle enthaltenen Skripts werden in die neue Tabelle verschoben.
Ich habe die endgültige Version kommentiert und sie unten eingefügt, falls jemand anderes diese Lösung verwenden muss.
Danke für deine Hilfe.
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.Betreff: JMP-Datentabellen aktualisierenOK,
Vielen Dank für die schnellen Antworten. Mein Problem unterscheidet sich ein wenig von dem Konzept in den von Ihnen bereitgestellten Beispielen, aber Sie haben mir die Einblicke gegeben, die ich brauchte, um deutlich voranzukommen.
In Ihrer obigen Lösung kann ich jetzt den vollständigen Inhalt der neuen Datendatei zur alten Datendatei HINZUFÜGEN, ABER mein Problem hängt mit dem „Umstieg“ auf eine Leter-Version der aktualisierten Daten zusammen, da meine NEUE Datei darüber hinaus einfach zusätzliche Datenzeilen enthält der erste. Es geht nicht um die Verbindung/Korrelation zweier separater Datensätze.
Ihr Beispiel hat mir klar gemacht, dass ich eine neue Datentabelle erhalte, wenn ich das Skript „Quelle“ in der Originaltabelle ausführe (die tatsächlich auf die neue/aktualisierte Quelldatendatei mit demselben Namen und Speicherort wie die Originaldaten verweist). wobei nur das Skript „Source“ vorhanden ist. Ich war verloren, als ich nun wie gewünscht eine neue Tabelle mit den aktuellen/aktualisierten Daten hatte, aber keines meiner anderen Skripte.
In Ihrem Beispiel haben Sie die Datenzusammenführung mit „Kopieren Sie jetzt Ihre Skripts von der alten Tabelle in die neue Tabelle“ beendet.
Aha-Moment... kannst du das schaffen?
Als ich die Foren durchsuchte, fand ich einige Beispiele für die Auflistung der Skripte in einer Tabelle und deren Einfügen in eine andere. Irgendwann werde ich herausfinden, wie ich auf andere Diskussionen verlinken kann, damit ich auf Referenzen wie diese verweisen kann, aber hier ist zunächst der Code im Beispiel:
für ein einzelnes Skript:
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^ )
"
)
)
);
für alle Skripte in einer Tabelle:
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^ )" )
)
);
);
Jetzt habe ich eine Kopie des „Source“-Skripts erstellt, Zuordnungen der Tabellen zu dt-Variablen hinzugefügt und dann versucht, dem Open-Befehl mit der Schleife zu folgen, um alle Skripte zu kopieren. Ich konnte die Werte „scriptName“ und „scriptDef“ nicht korrekt laden. scriptName scheint die richtige Liste von Skripten in die aktuelle Tabelle zu laden, aber der scriptDef-Aufruf ruft die Definitionen nicht ab.
Deshalb habe ich jedes meiner Testskripte manuell mit wiederholten manuellen Einzelkopien hinzugefügt, was wunderbar funktioniert hat. Hier ist mein resultierender Code:
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^ )
"
)
)
);
Wenn meine ursprüngliche JMP-Tabellendatei geöffnet ist (erstellt mit der letzten Version der Quelldatendatei), kann ich jetzt dieses Skript ausführen, das eine NEUE TABELLE aus der aktualisierten Quelldatendatei erstellt und dann alle Skripte in die neue Tabelle kopiert. Ich habe dann ZWEI JMP-Tabellen geöffnet, beide mit den gleichen Titeln, beide mit den gleichen Skripten, aber eine mit den alten Daten und eine mit den neuen Daten (mehr Daten). Ich schließe jetzt die alte Tabelle und SPEICHERE die neue Tabelle direkt darüber am selben Ort.
BOOM! Aktualisierte Daten mit allen zur Ausführung verfügbaren Skripten. Gleicher Dateispeicherort und -name, sodass der Vorgang bei Bedarf bei jeder wöchentlichen oder monatlichen Berichtsaktualisierung wiederholt werden kann.
Ich möchte wirklich, dass die automatisierte Schleife zum dynamischen Laden aller Skripte funktioniert, damit ich dasselbe Skript für andere Datensätze verwenden kann, ohne Skriptnamen im eigentlichen Code verwalten zu müssen. Im Moment mache ich mit der manuellen Version weiter, bis ich das Problem mit der Schleife herausgefunden habe.
Vielen Dank für Ihre schnelle Antwort und die Beispiele, die mich letztendlich zu einer Lösung geführt haben.
Betreff: JMP-Datentabellen aktualisierenDa Sie JMP 13 haben, können Sie es auch so machen:
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];
Betreff: JMP-Datentabellen aktualisierenDave,
Abhängig von Ihren spezifischen Anforderungen kann die Update-Plattform die Lösung sein. Mit JSL können Sie jedoch nahezu alles tun, was Sie benötigen, und erhalten dann am Ende diese ursprünglichen Skripte in Ihrer reformierten Datentabelle. Es wäre ein ziemlich einfacher Code, der die eingebetteten Skripte aus Ihrer ursprünglichen Tabelle in Ihre neu erstellte Tabelle kopiert.
Betreff: JMP-Datentabellen aktualisierenIch sehe, dass dies ein alter Thread ist, aber es scheint der einzige zu sein, den ich finden kann, der sich auf das Problem bezieht, auf das ich stoße.
Ich bin ein neuer JMP-Benutzer und habe 13.1. Während ich den Umgang mit JMP erlerne, importiere ich Datensätze, die ich zur Metrikverfolgung und Berichterstellung verwende.Ich kann die Excel-Dateien importieren und Skripte erstellen, um die Analyse durchzuführen.Funktioniert super!
Nun das Problem:
Die Quelldaten für diesen Aufwand werden wöchentlich bis monatlich aktualisiert.Mein Ziel ist es, JMP so einzurichten, dass ich jeden Monat die gleiche anfängliche Analyse der Daten durchführe, jedoch nachdem ich die JMP-Tabelle auf die neuesten Excel-Daten aktualisiert habe.Ich habe versucht, das „Quell“-Skript zu verwenden, aber dadurch wird lediglich eine neue JMP-Tabelle erstellt, die nicht die Skripts enthält, die ich in der ursprünglichen JMP-Tabelle speichere.
Ich habe von der Funktion „Aktualisieren“ gelesen, aber das scheint eine Funktion zum Aktualisieren der Tabelle zu sein, wenn sich Daten in der Tabelle geändert haben.Ist die Funktion „Aktualisieren“ die einzige verfügbare Methode, um den Quelldatensatz „erneut zu synchronisieren“ oder zu „importieren“ und zu aktualisieren bzw. im Laufe der Zeit zu vergrößern?
Jede Hilfe wäre sehr dankbar.
Dave
Betreff: JMP-Datentabellen aktualisierenAufgrund Ihrer ersten beiden Beiträge in diesem Thread hatte ich keine Ahnung, dass Sie sich auf die Tabellenaktualisierungsfunktion in JMP beziehen. Ich habe Update in letzter Zeit tatsächlich ziemlich oft verwendet und hatte nie den Eindruck, dass es mit etwas anderem als JMP-Datentabellen funktionieren würde; Der Zugriff erfolgt tatsächlich entweder über die Symbolleiste (Daten-)Tabelle oder über das Menü (Daten-)Tabelle. Außerdem enthielten Ihre ursprünglichen Beiträge keine detaillierte Beschreibung Ihrer Tätigkeit, weshalb niemand geantwortet hat.
In Ihrer Situation, in der Sie regelmäßig eine Tabelle in JMP mit neuen Daten aus Excel aktualisieren, würde ich ein Skript schreiben, das Daten aus der Excel-Arbeitsmappe in JMP importiert und dann Ihre gepflegte Datentabelle mit der aus der Excel-Arbeitsmappe erstellten Datentabelle aktualisiert. Allerdings kann es eine interessante Funktion sein, Verknüpfungen mit externen Datenquellen durchzuführen – was die Funktionen „Verknüpfen“, „Aktualisieren“ und „Verketten“ tun. JMP verfügt mit seiner SQL-Unterstützung bereits über diese Funktion bei externen Datenbanken, funktioniert aber nur mit SQL-Datenbanken. Excel ist keine Datenbank, geschweige denn eine SQL-Datenbank, daher können SQL-Abfragen in Ihrem Fall nicht ausgenutzt werden. JMP verfügt derzeit definitiv nicht über eine Ein-Klick-Funktion zur direkten Abfrage von Arbeitsblättern in einer Excel-Arbeitsmappe für eine Datenverknüpfung.
Betreff: JMP-Datentabellen aktualisierensaitcopuroglu, am Ende habe ich den technischen Support von JMP angerufen.Es stellt sich heraus, dass der oben beschriebene „Workaround“ derzeit die einzige Lösung für die Situation der Aktualisierung aus einer Excel-Tabelle ist.Mir wurde gesagt, dass die Aktualisierungsfunktion für die Aktualisierung von einer JMP-Datentabelle auf eine andere ausgelegt ist.Das Problem wird jedoch als Idee für eine zukünftige Version von JMP eingereicht.
Betreff: JMP-Datentabellen aktualisierenKönnten Sie zum besseren Verständnis Excel/jmp/jsl-Dateien bereitstellen? Ich bin auch neugierig
Betreff: JMP-Datentabellen aktualisierenIrgendjemand...jemand...jemand?
Ich habe ein wenig mit der Update-Funktion experimentiert.Es scheint, dass JMP das als „Quelle“ in der Datentabelle gespeicherte Skript überschreibt.Beim ERSTEN Update funktioniert alles einwandfrei.Wenn jedoch die Aktualisierung aufgerufen wird, wird das als „Quelle“ gespeicherte Skript sofort von JMP mit dem Skript überschrieben, um die ursprüngliche Tabelle anhand der neuen Tabelle zu aktualisieren.Wenn Sie das nächste Mal versuchen, über das „Source“-Skript zu aktualisieren, passiert nichts.Also habe ich Folgendes versucht: Ich habe das „Quelle“-Skript in der Datentabelle in „Aktualisieren“ umbenannt und es erneut versucht.Diesmal wurde das „Update“-Skript nicht geändert, sondern ein neues Skript namens „Source“ zur Datentabelle hinzugefügt.Dieser „Workaround“ ist offensichtlich NICHT effizient und sollte nicht notwendig sein.