Re: Acelerar tablas/ActualizarEn primer lugar, una barra de progreso podría ayudar al usuario
... un poco: entender que Jmp no está bloqueado, sino que está haciendo algo en segundo plano.
Re: Acelerar tablas/Actualizarsolo intente esto - 40 estudiantes, 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: Acelerar tablas/ActualizarInteresante: deshabilitar el
remove from (cols, {1,2,3} );cuesta 10s adicionales con Tables/Update.
Parece que la coincidencia de filas no solo se realiza para cada columna que se agrega.
También se hace hasta cierto punto para las columnas que ya están allí.
Re: Acelerar tablas/ActualizarUno podría reemplazar el Tablas/Actualizar plataforma con una definida por el usuario.
- establece Agregar/Reemplazar columnas en Seleccionado/Ninguno (en lugar de Todo todo ) --> se evalúan menos columnas para la vista previa
- un botón definido por el usuario Bien (alta velocidad) puede activar Tablas/Unirse después de convertir la configuración
a través de 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: Acelerar tablas/ActualizarParece que se podría lograr una gran mejora si UPDATE no usara su propia función
... pero acaba de activar JOIN en segundo plano.
Re: Acelerar tablas/ActualizarCon respecto a las diferencias de velocidad entre Tables/Join y Tables/Update, recibí los comentarios de Jmp Support (TS-00044631) que
por diseño, Actualizar y Unirse hacen cosas diferentes cuando hay varias coincidencias.[...] Join usa el primero coincidencia, por lo que tan pronto como encuentre una coincidencia, habrá terminado.
[...] Update [mira] a través de todos esos partidos, aplicando cada uno, y solo el el último palos *)
Esto explica la gran diferencia de tiempo para el caso especial anterior debido a las muchas copias de los datos.
Por lo tanto, tenga cuidado al usar Actualizar si tiene tablas con valores no únicos y muchas columnas.
Por otro lado, el problema se solucionará fácilmente si Jmp verifica la presencia de valores no únicos y muchas columnas antes de que decida calcular la vista previa 
*) La diferencia entre Tables/Join y Tables/Update se ilustra muy bien con este ejemplo de Jmp Support:
Note que el Unido la mesa tiene todo 1 's en col2, mientras que el Actualizado la mesa tiene todo 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: Acelerar tablas/Actualizar
@hogi escribió:
Pero me temo que la función sólo comprueba la longitud de la tabla y no el número de columnas.
En realidad, parece que Tables/Update comprueba el número de columnas.
- si hay > 100 columnas, la actualización automática está deshabilitada.
Pero parece que Jmp simplemente verifica el número de filas/columnas de la tabla principal.
no de la segunda mesa.
Por lo tanto, si el número de columnas de la tabla principal es demasiado grande, la vista previa se desactiva, aunque el número de columnas (tabla principal) no tiene ningún impacto en la velocidad.
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>
Editar:
A veces vale la pena el esfuerzo de agregar una condición de coincidencia adicional (por ejemplo, clasificación en la tabla fuente).
Esto reduce la cantidad de coincidencias y acelera enormemente la vista previa y la actualización real.
Acelerar tablas/actualizar¿Qué inspiró esta solicitud de lista de deseos?
☐ Nueva característica interesante
☑ ¡podría ayudar a muchos usuarios!
☑ elimina un "error"
☐ Es bueno tenerlo
☐ nadie lo necesita
#MiTop10_2023
(ya sea esta o la opción Unir tablas: para actualizar la tabla principal )
Tenemos una solución alternativa -> ya no la necesitamos
Tables Update es una plataforma muy útil que puede utilizarse para fusionar columnas en una tabla de datos o para actualizar columnas con los datos de otra tabla de datos.
Pero a veces el usuario tiene que esperar mucho tiempo hasta que Jmp finalice una actualización de una tabla de datos, incluso con tablas de datos medianas y grandes.
A veces, Jmp ya se queda bloqueado al editar configuraciones en la GUI de actualización.
Entonces parece que Jmp falló, pero después de algunos minutos (o a veces: horas), Jmp finaliza el cálculo para la vista previa de los datos y le da al usuario nuevamente la oportunidad de editar la configuración.
Está claro que lleva un tiempo hacer coincidir cientos de miles de valores de una tabla con valores de otra tabla.
Pero me sorprende que fusionar dos columnas lleve el doble de tiempo que fusionar una sola columna.
¿Se activa nuevamente el paso de coincidencia para cada columna que se fusiona o en realidad es la clasificación de los valores lo que lleva tanto tiempo?
A menudo, no tengo identificadores únicos en la tabla de origen: un único valor coincidente aparece varias veces en una columna, con valores idénticos también en la columna que se va a fusionar. En este caso, me pregunto si el valor de la primera coincidencia se ingresa en la tabla de datos de destino y luego se reemplaza por el segundo, y así sucesivamente...
Esto se podría acelerar buscando el último valor coincidente en la tabla de origen y simplemente insertando ese valor.
Un gran inconveniente de la Plataforma de Actualización:
Comienza con agregar columnas y reemplazar columnas activadas.
Si una tabla tiene, por ejemplo, 1000 columnas, llevará un tiempo hasta que todas las columnas se agreguen a la ventana de vista previa.
El problema se escala con filas_principales x filas_2das x columnas_2das.
Y por estúpido que sea, a menudo empiezo definiendo las columnas de coincidencia... lo que me permite dar un largo paseo hasta que me permitan elegir la(s) (1-2) columna(s) que realmente quiero agregar a la tabla.
Hay una funcionalidad que desactiva la vista previa si la tabla es demasiado grande.
Pero me temo que la función sólo comprueba la longitud de la tabla y no el número de columnas.
¿O el umbral es demasiado grande?
Comparta su experiencia: ¿con qué frecuencia tuvo que completar el tiempo hasta que su sesión de Jmp volviera a estar disponible después de una actualización de la pestaña de vista previa?
Otro problema es el botón de recuperación
(tratado aquí: Deshabilitar la vista previa mientras se llena la GUI a través de Recuperar )
Después de hacer clic en Recuperar, el menú Actualizar se llena con las configuraciones guardadas y, después de cada cambio de una configuración de la GUI, parece haber una actualización de la pestaña de vista previa.
Entonces, si desea unir tablas de datos grandes (incluso si solo desea agregar una sola columna), no se atreva a presionar "Retirar"... antes de deshabilitar la vista previa.
¿Cuál es la mejora que le gustaría ver?
¿Podrías mejorar el rendimiento de Tablas/Actualizar?
¿Por qué es importante esta idea?
Tablas/Actualizar es una función maravillosa. La pestaña Vista previa es increíblemente útil, no quiero trabajar sin ella.
Pero estoy empezando a sentir paranoia: ¿cuánto tiempo tomará la próxima vez que intente agregar columnas a una tabla de datos?
Combinación y limpieza de datosRe: Acelerar tablas/actualizarBaja prioridad de nuestra parte: implementamos una solución alternativa según la idea de https://community.jmp.com/t5/JMP-Wish-List/Speed-up-Tables-Update/idc-p/653334/highlight/true#M4531