Re : Accélérer les tableaux/Mettre à jourEn premier lieu, une barre de progression pourrait aider l'utilisateur
... légèrement : pour comprendre que Jmp n'est pas planté, mais fait quelque chose en arrière-plan.
Re : Accélérer les tableaux/Mettre à jouressayez ceci - 40 étudiants, 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);Re : Accélérer les tableaux/Mettre à jourIntéressant : désactiver le
remove from (cols, {1,2,3} );coûte 10s supplémentaires avec Tables/Mise à jour.
Il semble que la correspondance des lignes ne se fasse pas uniquement pour chaque colonne ajoutée.
C'est aussi fait dans une certaine mesure pour les colonnes qui sont déjà là.
Re : Accélérer les tableaux/Mettre à jourOn pourrait remplacer le Tableaux/mise à jour plate-forme avec une plate-forme définie par l'utilisateur.
- il définit Ajouter/Remplacer des colonnes sur Sélectionné/Aucun (au lieu de Tout/Tous ) --> moins de colonnes sont évaluées pour l'aperçu
- un bouton défini par l'utilisateur OK (haute vitesse) peut déclencher Tables/Join après la conversion des paramètres
via 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 );
Re : Accélérer les tableaux/Mettre à jourIl semble qu'une amélioration considérable pourrait être obtenue si UPDATE n'utilisait pas sa propre fonction
... mais vient de déclencher JOIN en arrière-plan.
Re : Accélérer les tableaux/Mettre à jourConcernant les différences de vitesse entre Tables/Join et Tables/Update, j'ai reçu le retour du support Jmp (TS-00044631) qui
de par leur conception, Update et Join font des choses différentes lorsqu'il y a plusieurs correspondances.[...] Join utilise le d'abord match, donc dès qu'il trouve un match, c'est fait.
[...] Mettre à jour [looks] à travers tous ces matchs, en appliquant chacun, et seulement le le dernier des bâtons. *)
Cela explique l'énorme différence de temps pour le cas particulier ci-dessus en raison des nombreuses copies des données.
Soyez donc prudent lorsque vous utilisez Update si vous avez des tables avec des valeurs non uniques et de nombreuses colonnes.
D'autre part, le problème sera facilement résolu si Jmp vérifie la présence de valeurs non uniques et plusieurs colonnes avant qu'il ne décide de calculer l'aperçu 
*) La différence entre Tables/Join et Tables/Update est bien illustrée par cet exemple du support Jmp :
Remarquez que le Rejoint la table a tout 1 est dans col2, tandis que le Mis à jour la table a tout 3 est en col2.
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 )
)
)
);Re : Accélérer les tables/mettre à jour
@hogi a écrit:
Mais je crains que la fonction vérifie simplement la longueur du tableau – et non le nombre de colonnes.
En fait, il semble que Tables/Update vérifie le nombre de colonnes
- s'il y a > 100 colonnes, la mise à jour automatique est désactivée.
Mais il semble que Jmp vérifie simplement le nombre de lignes/colonnes de la table principale
pas de la deuxième table.
Ainsi, si le nombre de colonnes de la table principale est trop grand, l'aperçu est désactivé - bien que le nombre de colonnes (table principale) n'ait aucun impact sur la vitesse.
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>
Modifier:
Parfois, cela vaut la peine d'ajouter une condition de correspondance supplémentaire (par exemple, le classement dans la table source)
Cela réduit le nombre de correspondances et accélère considérablement l'aperçu et la mise à jour réelle.
Accélérer les tables/Mise à jourQu'est-ce qui a inspiré cette demande de liste de souhaits ?
☐ nouvelle fonctionnalité intéressante
☑ pourrait aider de nombreux utilisateurs !
☑ supprime un « bug »
☐ agréable à avoir
☐ personne n'en a besoin
#monTop10_2023
(soit celui-ci, soit Tables join : option pour mettre à jour la table principale )
nous avons une solution de contournement -> nous n'en avons plus besoin
Tables Update est une plate-forme vraiment intéressante qui peut être utilisée pour fusionner des colonnes dans une table de données ou pour mettre à jour des colonnes avec les données d'une autre table de données.
Mais parfois, l'utilisateur doit attendre longtemps avant que Jmp termine la mise à jour d'une table de données, même avec des tables de données de taille moyenne ou grande.
Parfois, Jmp se bloque déjà lors de la modification des paramètres dans l'interface graphique de mise à jour.
Ensuite, il semble que Jmp a planté - , mais après quelques minutes (ou parfois : heures), Jmp termine le calcul pour l'aperçu des données et donne à nouveau à l'utilisateur la possibilité de modifier les paramètres.
Il est clair qu’il faut du temps pour faire correspondre des centaines de milliers de valeurs d’une table avec des valeurs d’une autre table.
Mais je suis surpris que la fusion de deux colonnes prenne deux fois plus de temps que la fusion d'une seule colonne
L'étape de correspondance est-elle déclenchée à nouveau pour chaque colonne fusionnée - ou est-ce en fait le tri des valeurs qui prend autant de temps ?
Souvent, je n'ai pas d'identifiants uniques dans la table source : une même valeur de correspondance apparaît plusieurs fois dans une colonne - avec des valeurs identiques également dans la colonne à fusionner. Dans ce cas, je me demande si la valeur de la première correspondance est saisie dans la table de données cible, puis remplacée par la seconde - et ainsi de suite...
Cela pourrait être accéléré en recherchant la dernière valeur correspondante dans la table source - et en insérant simplement cette valeur.
Un gros inconvénient de la plateforme de mise à jour :
Cela commence par ajouter des colonnes et remplacer les colonnes activées.
Si un tableau contient par exemple 1 000 colonnes, il faut un certain temps pour que toutes les colonnes soient ajoutées à la fenêtre d'aperçu.
Le problème s'étend avec rows_main x rows_2nd x columns_2nd.
Et aussi stupide que je sois, je commence souvent par définir les colonnes de correspondance... ce qui me permet de faire une longue marche jusqu'à ce que je sois autorisé à choisir la ou les (1-2) colonnes que je souhaite réellement ajouter au tableau.
Il existe une fonctionnalité qui désactive l'aperçu si le tableau est trop grand.
Mais je crains que la fonction ne vérifie que la longueur du tableau - et non le nombre de colonnes.
Ou le seuil est trop grand ?
Veuillez partager votre expérience : à quelle fréquence avez-vous dû remplir le temps jusqu'à ce que votre session Jmp revienne après une mise à jour de l'onglet d'aperçu.
Un autre problème est le bouton de rappel
(adressé ici : Désactiver l'aperçu lors du remplissage de l'interface graphique via Rappel )
Après avoir cliqué sur Rappeler, le menu Mettre à jour est rempli avec les paramètres enregistrés - et après chaque modification d'un paramètre de l'interface graphique, il semble y avoir une mise à jour de l'onglet d'aperçu.
Donc, si vous souhaitez joindre de grandes tables de données, même si vous souhaitez simplement ajouter une seule colonne, n'osez pas appuyer sur Rappeler... avant de désactiver l'aperçu.
Quelle est l’amélioration que vous aimeriez voir ?
Pourriez-vous s'il vous plaît améliorer les performances de Tables/Update.
Pourquoi cette idée est-elle importante ?
Tables/Update est une fonction formidable. L'onglet Aperçu est incroyablement utile, je ne veux pas travailler sans lui.
Mais je commence à devenir paranoïaque : combien de temps cela prendra-t-il la prochaine fois que j'essaierai d'ajouter des colonnes à une table de données.
Fusion et nettoyage des donnéesRe: Accélération des tables/Mise à jourfaible priorité de notre côté - nous avons mis en œuvre une solution de contournement selon l'idée de https://community.jmp.com/t5/JMP-Wish-List/Speed-up-Tables-Update/idc-p/653334/highlight/true#M4531