Betreff: Tabellen/Aktualisierung beschleunigenZunächst könnte ein Fortschrittsbalken dem Benutzer helfen
... leicht: zu verstehen, dass Jmp nicht abstürzt, sondern etwas im Hintergrund tut.
Betreff: Tabellen/Aktualisierung beschleunigenProbieren Sie es einfach aus – 40 Schüler, N x:
Names Default to Here(1);
// adjust the size and check// +1 means: data table size x 2// ... and update time x 4
mySize=12;
dt0 = Open( "$SAMPLE_DATA/Big Class.jmp" );
increaseSize= Function({dt,cycles},
for(i=1,i<=cycles,i++,
dt << Concatenate(dt, Append to first table))
);
increaseSize(dt0,mySize);
show(nrows (dt0));
dt2 = subset(dt0);
//if you are brave, enable this:
/*for (i=1,i<5,i++,
dt2 << new column("new", set each value (random uniform()))
);*/
//generate a list of columns which should be added
Cols = dt2 << get column names();
remove from (cols, {1,2,3} );
dt0 << Delete Columns( :height, :weight );
t1=hptime();
Eval(Eval Expr(dt0 << Update(
With( dt2 ),
Match Columns( :name = :name, :sex = :sex ),
Add Columns from Update Table(
Expr(Cols)
),
Replace Columns in Main Table( None )
)));
show((hptime()-t1)/1000000); // on my notebook: ~ 15s per column
close(dt0, noSave);
close(dt2, noSave);Betreff: Tabellen/Aktualisierung beschleunigenInteressant: Deaktivieren des
remove from (cols, {1,2,3} );kostet zusätzlich 10s mit Tabellen/Update.
Scheint, dass der Zeilenabgleich nicht nur für jede hinzugefügte Spalte erfolgt.
In gewissem Umfang wird dies auch für Spalten durchgeführt, die bereits vorhanden sind.
Betreff: Tabellen/Aktualisierung beschleunigenMan könnte das ersetzen Tabellen/Update Plattform mit einer benutzerdefinierten.
- Es setzt „Spalten hinzufügen/ersetzen“ auf Ausgewählt/Keine (anstatt Alles alles ) --> Es werden weniger Spalten für die Vorschau ausgewertet
- eine benutzerdefinierte Schaltfläche OK (hohe Geschwindigkeit) kann Tabellen/Join nach der Konvertierung der Einstellungen auslösen
über UpdateHS()

Names Default to Here(1);
dt = Current Data Table();
If(isempty(dt) | N rows(dt )==0, stop());
Try( myDTUpdate << close window() );
myDTUpdate = New Window( "Update - high speed", dt << update() );
myDTUpdate[Lineup Box( 1 )] << Prepend( mb = MouseBox( Button Box( "OK (HS)", updateHS() ) ) );
mb << settooltip( "high speed via Tables/join" );
//DtUpdateHS:myDTUpdate["Preview", CheckboxBox( 1 )] << set( 1, 0 );
myDTUpdate["Add Columns from Update Table", Radio Box( 1 )] << set( 3 );
myDTUpdate["Replace Columns in Main Table", Radio Box( 1 )] << set( 2 );
Betreff: Tabellen/Aktualisierung beschleunigenEs scheint, dass eine enorme Verbesserung erreicht werden könnte, wenn UPDATE nicht seine eigene Funktion verwenden würde
... aber gerade JOIN im Hintergrund ausgelöst.
Betreff: Tabellen/Aktualisierung beschleunigenBezüglich der Geschwindigkeitsunterschiede zwischen Tables/Join und Tables/Update habe ich die Rückmeldung vom Jmp-Support (TS-00044631) erhalten
Wenn es mehrere Übereinstimmungen gibt, führen Update und Join konstruktionsbedingt unterschiedliche Aktionen aus.[...] Join verwendet die Erste match, also ist es fertig, sobald es eine Übereinstimmung findet.
[...] Update durchsucht alle diese Übereinstimmungen und wendet jede einzelne an, und zwar nur die Letzter Stöcke. *)
Dies erklärt den großen Zeitunterschied für den oben genannten Sonderfall aufgrund der vielen Kopien der Daten.
Seien Sie daher vorsichtig, wenn Sie „Update“ verwenden, wenn Sie Tabellen mit nicht eindeutigen Werten und vielen Spalten haben.
Andererseits lässt sich das Problem leicht beheben, wenn Jmp das Vorhandensein von überprüft nicht eindeutige Werte und viele Spalten bevor es sich entscheidet, die Vorschau zu berechnen 
*) Der Unterschied zwischen Tables/Join und Tables/Update wird durch dieses Beispiel vom Jmp-Support gut veranschaulicht:
Beachten Sie, dass die Beigetreten Tisch hat alles 1 ist in Spalte 2, während die Aktualisiert Tisch hat alles 3 steht in Spalte 2.
dt0 = New Table( "MyTable",
Add Rows( 3 ),
New Column( "col1",
Character, "Nominal",
Set Values({"a", "a", "a"})
),
New Column( "col2",
Numeric,
"Continuous",
Set Values([1, 2, 3])
)
);
dt2 = subset( dt0 );
Cols = dt2 << get column names();
Remove From( cols, {1} );
dt0 << Delete Columns( :col2 );
Eval(Eval Expr(dt0 << Join(
With( dt2 ),
Select( :col1 ),
SelectWith(Expr( Cols) ),
By Matching Columns( :col1 = :col1 ),
Drop multiples( 0, 1 ),
Preserve main table order( 1 ),
)));
Eval(
Eval Expr(
dt0 << Update(
With( dt2 ),
Match Columns( :col1 = :col1 ),
Add Columns from Update Table( Expr( Cols ) ),
Replace Columns in Main Table( None )
)
)
);Betreff: Tabellen/Aktualisierung beschleunigen
@hogi schrieb:
Ich befürchte aber, dass die Funktion nur die Länge der Tabelle prüft – und nicht die Anzahl der Spalten.
Tatsächlich scheint Tables/Update die Anzahl der Spalten zu überprüfen
- Wenn mehr als 100 Spalten vorhanden sind, ist die automatische Aktualisierung deaktiviert.
Aber es scheint, dass Jmp nur die Anzahl der Zeilen/Spalten der Haupttabelle überprüft
nicht von der zweiten Tabelle.
Wenn also die Anzahl der Spalten der Haupttabelle zu groß ist, wird die Vorschau deaktiviert – obwohl die Anzahl der Spalten (Haupttabelle) keinen Einfluss auf die Geschwindigkeit hat
Names Default to Here(1);
// adjust the size and check// +1 means: data table size x 2//
mySize1=7;
dt0 = Open( "$SAMPLE_DATA/Big Class.jmp" );
new column ("one", set each value(1));
increaseSize= Function({dt,cycles},
for(i=1,i<=cycles,i++,
dt << Concatenate(dt, Append to first table))
);
increaseSize(dt0,mySize1);
numberRows0 = Nrows(dt0);
dt2 = dt0 << Subset( All rows, columns( :name, :age ) );
for (i=1,i<1000,i++,
dt2 << new column("new", set each value (random uniform()))
);
numberRows2 = Nrows(dt2);
dt2Name = dt2 << get name();
New Column( "Rank", Formula( Col Rank( Row(), :name ) ));
Try(updateWindow << close window());
updateWindow = New window("are you brave?",
dt 0 << update()
);
updateWindow[Text Box(1)] << background color (Orange) << text color (white )<< set font ("Arial Black", 10)
<< set text("The tables have <10k rows. \!nBut the second table has > 1000 columns. \!nSo I deactivated the preview for you.\!nIf you have some time, activate it again ...");
updateWindow["Preview", CheckboxBox( 1 )] << set( 1, 0 );
updateWindow[ListBoxBox( 1 )] << set selected (loc(updateWindow[ListBoxBox( 1 )] <<GET items=""></GET>
Bearbeiten:
Manchmal lohnt es sich, eine zusätzliche Übereinstimmungsbedingung hinzuzufügen (z. B. Rang in der Quelltabelle).
Dies reduziert die Anzahl der Übereinstimmungen und beschleunigt die Vorschau und das eigentliche Update enorm.
Tabellen beschleunigen/aktualisierenWas hat Sie zu dieser Wunschliste inspiriert?
☐ cooles neues Feature
☑ könnte vielen Benutzern helfen!
☑ behebt einen „Bug“
☐ schön zu haben
☐ niemand braucht es
#meineTop10_2023
(entweder dieses oder Tabellen verbinden: Option zum Aktualisieren der Haupttabelle )
wir haben einen Workaround -> wir brauchen ihn nicht mehr
Tables Update ist eine wirklich nette Plattform, die zum Zusammenführen von Spalten in eine Datentabelle oder zum Aktualisieren von Spalten mit den Daten aus einer anderen Datentabelle verwendet werden kann.
Aber manchmal muss der Benutzer lange warten, bis Jmp eine Datentabellenaktualisierung abgeschlossen hat – selbst bei mittelgroßen Datentabellen.
Manchmal bleibt Jmp bereits beim Bearbeiten von Einstellungen in der Update-GUI hängen.
Dann scheint es, als sei Jmp abgestürzt – aber nach einigen Minuten (oder manchmal: Stunden) beendet Jmp die Berechnung für die Datenvorschau und gibt dem Benutzer erneut die Möglichkeit, die Einstellungen zu bearbeiten.
Es ist klar, dass es eine Weile dauert, Hunderttausende von Werten in einer Tabelle mit Werten in einer anderen Tabelle abzugleichen.
Aber ich bin überrascht, dass das Zusammenführen von zwei Spalten doppelt so lange dauert wie das Zusammenführen einer Spalte
Wird der Matching-Schritt für jede zusammengeführte Spalte erneut ausgelöst – oder ist es tatsächlich das Sortieren der Werte, das so lange dauert?
Oft habe ich keine eindeutigen Kennungen in der Quelltabelle: Ein einzelner Übereinstimmungswert taucht in einer Spalte mehrmals auf – mit identischen Werten auch in der zusammenzuführenden Spalte. In diesem Fall frage ich mich, ob der Wert der ersten Übereinstimmung in die Zieldatentabelle eingetragen und dann durch den zweiten ersetzt wird – und so weiter …
Dies könnte beschleunigt werden, indem in der Quelltabelle nach dem letzten übereinstimmenden Wert gesucht und nur dieser Wert eingefügt wird.
Ein großer Nachteil der Update-Plattform:
Es beginnt mit der Aktivierung der Funktionen „Spalten hinzufügen“ und „Spalten ersetzen“ .
Wenn eine Tabelle beispielsweise 1000 Spalten hat, dauert es eine Weile, bis alle Spalten zum Vorschaufenster hinzugefügt werden.
Das Problem skaliert mit Hauptzeilen x 2. Zeilen x 2. Spalten.
Und dumm wie ich bin, beginne ich oft mit der Definition der Übereinstimmungsspalten ... was mir einen langen Spaziergang ermöglicht, bis ich die (1-2) Spalte(n) auswählen kann, die ich tatsächlich zur Tabelle hinzufügen möchte.
Es gibt eine Funktion, die die Vorschau deaktiviert, wenn die Tabelle zu groß ist.
Ich befürchte allerdings, dass die Funktion lediglich die Länge der Tabelle prüft – und nicht die Anzahl der Spalten.
Oder ist die Hürde zu groß?
Bitte teilen Sie Ihre Erfahrungen mit – wie oft mussten Sie die Zeit totschlagen, bis Ihre Jmp-Sitzung nach einer Aktualisierung der Registerkarte „Vorschau“ wieder wiederhergestellt war.
Ein weiteres Problem ist die Rückruftaste
(hier behandelt: Vorschau beim Füllen der GUI über „Recall“ deaktivieren )
Nach einem Klick auf „Abrufen“ wird das Update-Menü mit den gespeicherten Einstellungen gefüllt – und nach jeder Änderung einer GUI-Einstellung scheint es eine Aktualisierung des Vorschau-Tabs zu geben.
Wenn Sie also große Datentabellen verbinden möchten – selbst wenn Sie nur eine einzelne Spalte hinzufügen möchten – wagen Sie es nicht, auf „Erinnern …“ zu drücken, bevor Sie die Vorschau deaktiviert haben.
Welche Verbesserung würden Sie gerne sehen?
Könnten Sie bitte die Leistung von Tabellen/Update verbessern.
Warum ist diese Idee wichtig?
Tabellen/Aktualisieren ist eine wunderbare Funktion. Die Registerkarte „Vorschau“ ist unglaublich nützlich, ich möchte nicht ohne sie arbeiten.
Aber ich werde langsam paranoid – wie lange wird es das nächste Mal dauern, wenn ich versuche, Spalten zu einer Datentabelle hinzuzufügen?
Datenzusammenführung und -bereinigungBetreff: Tabellen beschleunigen/aktualisierenniedrige Priorität von unserer Seite - wir haben einen Workaround nach der Idee von https://community.jmp.com/t5/JMP-Wish-List/Speed-up-Tables-Update/idc-p/653334/highlight/true#M4531 implementiert