¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?Tengo una tabla de datos con aproximadamente 100.000 filas y 2000 columnas.Docenas de estas columnas contienen fórmulas.Cuando hago un cambio en algún lugar, noto que la barra de estado dice "evaluando ##column_xyz" y procede a evaluar cada fórmula en la tabla de datos.Dado que se trata de una tabla bastante grande y hay muchas fórmulas, se necesitan hasta 60 segundos para evaluarlas todas.En consecuencia, soy muy sensible a realizar acciones que activen la evaluación de fórmulas, porque la interfaz de usuario dejará de responder hasta que finalice y esto puede resultar bastante molesto cuando sucede inesperadamente.Por otro lado, no quiero "Suprimir la evaluación de fórmula" todo el tiempo porque a veces lo olvidaré y los datos no se actualizarán cuando deberían.
Entonces, en esta gran tabla de datos tengo un script JSL que genera un conjunto de gráficos usando la plataforma Graph Builder, aplica algunos filtros de datos locales y realiza un resaltado selectivo de los datos.Básicamente, el propósito del script es generar gráficos dinámicamente y prepararlos para cortarlos y pegarlos en un correo electrónico o informe.
Noté que este script parece tardar mucho en ejecutarse.Más de lo que debería.La interfaz de usuario deja de responder durante casi 60 segundos antes de que finalmente aparezcan los gráficos.Pasé algún tiempo tratando de descubrir qué sucede durante esos 60 segundos.Entonces me di cuenta de que de alguna manera este script activa la evaluación de fórmulas.Esto no fue inmediatamente obvio porque la barra de estado de la tabla de datos no muestra el mensaje normal "evaluando..."; permanece en blanco, presumiblemente porque la evaluación la activa un script en lugar de una acción del usuario.Cuando ejecuté el script mientras la ventana Registro de script estaba abierta, la barra de estado del registro decía "evaluando ##columna_con_fórmula".La barra de estado del registro se congeló en ese mensaje, aunque la duración del retraso me lleva a creer que, de hecho, estaba evaluando cada columna de fórmula de la tabla.Y luego confirmé que la evaluación de fórmulas era la culpable al habilitar "Suprimir evaluación de fórmulas" para toda la tabla y ejecutar el script nuevamente; los gráficos aparecieron casi al instante.
A través de prueba y error, lo reduje a una línea en el script: se utiliza "Seleccionar dónde" para resaltar algunos de los datos en los gráficos generados.Se parece a esto:
myDT << Select Where( :Name("##column_with_formula") == "value" );Pensé que esto era extraño; tal vez tuvo algo que ver con la parte del "dónde".Entonces reemplacé esta línea con algo más simple:
myDT << Select Rows( {1,3,5,7} );Incluso esta línea todavía parece desencadenar la evaluación de fórmulas entre bastidores.Luego hice un poco más de experimentación:
- Con el administrador de tareas abierto, activé evaluaciones de fórmulas de la manera normal (cambiar un valor en una columna).La barra de estado mostraba las fórmulas que se estaban evaluando y al instante el uso de mi CPU se disparó hasta un 30% (un núcleo de CPU maximizado).
- Esperé a que se detuviera la actividad e intenté seleccionar una fila en la tabla de datos usando la interfaz de usuario.La barra de estado no cambió; todavía mostraba "evaluaciones realizadas".Pero el administrador de tareas mostró exactamente la misma actividad de la CPU que si estuviera ocurriendo la evaluación de fórmulas.
- Habilité "Suprimir evaluación de fórmula" para la tabla de datos y seleccioné una fila diferente en la tabla de datos.El uso de la CPU no aumentó.
En resumen, a través de la experimentación he demostrado lo siguiente:
- JMP realiza la evaluación de fórmulas de columnas de manera superflua; Las interacciones básicas con la interfaz de usuario hacen que el cálculo se realice en segundo plano aunque ninguno de los datos de entrada haya sido modificado.
- JMP no es transparente en cuanto a cuándo realiza estas evaluaciones de fórmulas.La barra de estado a veces muestra un mensaje, pero la mayoría de las veces no da ninguna indicación de que esto esté ocurriendo.Esto a menudo se manifiesta como un retraso, tartamudeo o falta de respuesta en la interfaz de usuario sin motivo aparente.
- Parece que si se activa una columna para su evaluación, TODAS las columnas se evalúan, independientemente de si lo necesitan o no.
Con conjuntos de datos más pequeños y menos fórmulas y menos complejas, la evaluación excesiva de fórmulas no parece ser un problema.Pero con fórmulas suficientemente complejas y un gran conjunto de datos, esto realmente se convierte en un obstáculo.En mi caso, supongo que tendré que adaptarme a dejar la evaluación de fórmulas suprimida todo el tiempo y solo evaluar las fórmulas manualmente.Pero esto es propenso a errores, al igual que en Excel cuando el recálculo del libro de trabajo está configurado en manual.Al menos Excel tiene un árbol de dependencia que le permite evaluar sólo las fórmulas necesarias para los datos que han cambiado, y si el usuario diseña las fórmulas adecuadamente, el cálculo se puede dejar en Automático todo el tiempo con una sobrecarga mínima.Es cierto que no estoy tan familiarizado con JMP como con Excel, por lo que puede haber formas de abordar esto en JMP que aún no he aprendido.
¿Alguien tiene alguna sugerencia sobre cómo gestionar una gran cantidad de fórmulas complejas SIN suprimir eval todo el tiempo?
Además, como se indica en el título de mi publicación, me interesaría saber POR QUÉ un cambio en la selección de filas activa la evaluación de la fórmula.Y también, ¿por qué JMP a veces le dice que está evaluando fórmulas y otras veces lo oculta?
Re: ¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?@Chris_Rodrigues escribió:
Además, la parte más sorprendente para mí fue que el mero selección de una fila desencadenó una reevaluación completa de la tabla (como lo demuestran el uso de la CPU y la capacidad de respuesta de la interfaz de usuario).Si una fórmula podría verse afectada al excluir una fila, ¿por qué no activar la evaluación cuando el usuario realmente excluye una fila ?Supongo que es teóricamente posible que un usuario pueda escribir una fórmula de columna que dependa del estado de selección de fila actual, pero me parece un caso extremo poco común.
Esto también me confunde. ¿Por qué Jmp no distingue entre los estados de las filas? excluido y seleccionado ?
Incluso si el Estado de fila fue cambiado - podría haber una verificación posterior para ver si el excluido() los estados cambiaron.
estoy de acuerdo con @Chris_Rodrigues - la mayoría de las fórmulas de columna utilizarán Excluido() y no Seleccionado() .
[Sin embargo, los que tienen Seleccionado() son los más geniales
]
No parece una cuestión de nicho. Para datos de muestra con entre 5 y 1000 filas de datos, esto no es un gran problema.
Pero para conjuntos de datos más grandes, un usuario que utiliza Excluido() ¡En las fórmulas de columna tiene que pagar una multa enorme!
Names Default to Here(1);
dt = new table("test", add rows(5),
New Column( "again"),
New Column( "excluded",
Formula(
:again[1] = 1;
Excluded();
),
));
Re: ¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?Bueno, es bueno saber que finalmente no soy el único que tuvo problemas con esto.Casi cuatro años después, esto todavía no ha mejorado.Hay todo tipo de situaciones extrañas que desencadenan la evaluación de fórmulas en toda la tabla de datos, incluso cuando supuestamente la evaluación de fórmulas se suprime en toda la tabla.Suprimir la evaluación de fórmulas en columnas individuales no es viable porque no hay forma de manejar las dependencias.Se deben activar todas las columnas para que JMP las evalúe en el orden correcto.Además, en JMP16 el motor de evaluación de fórmulas parece haberse vuelto aún más lento.Ahora lleva una cantidad excesiva de tiempo evaluar mi tabla completa.
Entre esto y las constantes sugerencias en estos foros de simplemente eliminar todas las fórmulas y almacenar solo valores fijos, he llegado a la conclusión de que JMP simplemente no está diseñado para manejar fórmulas dinámicas, solo datos estáticos.Las fórmulas son buenas al principio, cuando su tabla es pequeña y todavía funcionan correctamente, pero cuando el recuento de la fórmula, la complejidad de la fórmula o el recuento de filas exceden un cierto límite, se encontrará con una pared de ladrillos.Tendré que reelaborar completamente este proyecto usando alguna otra herramienta y usar JMP solo para gráficos/presentaciones/estadísticas.
Voy a marcar esto como solucionado.La solución es que no hay solución.Si tiene este problema, JMP no es la herramienta adecuada para el trabajo.Elimine sus fórmulas dinámicas y almacene solo datos estáticos.
Re: ¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?Tuve problemas similares con una tabla de datos grande.
Las evaluaciones de fórmulas se activaron una y otra vez.
Después de guardar la tabla y volver a abrirla, todo estuvo bien.
Entonces, tal vez la reevaluación fue provocada por un conflicto de nombre de variable. Y el problema desapareció después de restablecer el nombre de la variable.
Si otros usuarios tienen problemas similares, deseamos habilitar y deshabilitar rápidamente fórmulas individuales:
forma rápida de habilitar/deshabilitar cálculos de fórmulas
Otra idea: deshabilitar las evaluaciones de fórmulas de forma predeterminada, para tener un Jmp fluido sin reevaluaciones de fórmulas tan espurias.
Si agrega algunos datos a la tabla de datos, simplemente active una evaluación de fórmula única. Aquí está el deseo:
forma rápida de activar una evaluación de fórmula única para una fórmula específica
Re: ¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?Esta tabla no se creó en una versión anterior de JMP.Quizás tenga un año, por lo que era JMP 13 o 14.
Utilicé el menú del triángulo rojo para marcar la casilla de suprimir evaluación de la tabla, luego la guardé y la cerré.Al volver a abrir la tabla, la casilla suprimir evaluación ya no está marcada, por lo que aparentemente la configuración de toda la tabla no se conservó al guardar la tabla.Cuando se abre la tabla, la barra de estado muestra inmediatamente "evaluando xyz...".No estoy seguro de qué está provocando que esto suceda.
Tenía un script OnOpen que se usaba para completar datos en algunas matrices asociativas que se usan en algunas funciones de búsqueda de datos.Cambié el nombre de OnOpen a otro para desactivarlo y que no se active cuando abro la tabla, pero las evaluaciones aún ocurren.
Escribí un script JSL para acceder a las propiedades de las columnas de la mayoría de las columnas de fórmula y suprimir la evaluación allí, porque sé que esta opción se conserva cuando se guarda la tabla. Así que ahora la evaluación de la tabla completa no lleva tanto tiempo.Supongo que así es como lo manejaré a partir de ahora: suprimir la evaluación en columnas individuales, y cuando importe nuevos datos que necesiten que se ejecuten las fórmulas, anular la supresión temporalmente usando un script.
Re: ¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?No he podido hacer una tabla que tenga fórmulas evaluando cuando se abre.@chungwei
La preferencia podría tener un efecto en las tablas JMP creadas en JMP 5 aproximadamente.No veo que haga nada actualmente.
Es posible utilizar las opciones del triángulo rojo de la tabla de datos para suprimir la evaluación de fórmulas y guardar una tabla en ese estado (con columnas parcialmente evaluadas). Puede usar rerunFormulas desde el mismo triángulo rojo para forzar la actualización (o desde JSL). (Esto podría ser lo que estás pidiendo).
La razón por la que dice el preferido no recomendado Se vuelve muy confuso cuando las tablas tienen configurado el bit de supresión... o lo hizo en algún momento.
Si recurre al soporte técnico, ellos ingresarán y rastrearán un defecto (o descubrirán por qué existe la preferencia y qué hizo/hace para las tablas de formato más antiguas).
No existe un marco de depuración/registro.
Re: ¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?Craige, es una buena idea escribir en el registro cuando se evalúa una fórmula.Usaré esta técnica para solucionar aún más los retrasos en la interfaz de usuario y los retrasos en mi proyecto relacionados con la evaluación de fórmulas.Mi método no fue tan preciso.Pero tengo una pregunta: ¿hay algún modo de 'depuración' o función de 'registro detallado' en JMP que pueda activar?Sería bueno si no tuviera que poner tantas declaraciones de escritura en mi código solo para descubrir qué está haciendo JMP en un momento dado.
Sin embargo, por ahora, todavía necesito usar este proyecto tal como está para mi trabajo actual.Solo quiero suprimir por completo la evaluación de fórmulas y volver a ejecutar las fórmulas manualmente según sea necesario.Aunque habilité "Suprimir evaluación al abrir" en el menú de preferencias, JMP aún evalúa las fórmulas inmediatamente cuando abro la tabla.¿Existe alguna manera de evitar por completo toda evaluación automática de fórmulas en esta tabla?Si se supone que esta preferencia hace esto pero no funciona, ¿hay alguna manera de enviar un informe de error?
Para su información, estoy usando JMP PRO 14.1 en Windows 10 x64.
Re: ¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?¿Qué versión de JMP estás ejecutando?
Hasta donde puedo decir, 14 está haciendo lo que espero; aquí está mi prueba JSL
New Table( "Untitled", add rows(3),
// EVERYTHINGCOL depends on everything. it evaluates last.
New Column( "EVERYTHINGCOL", Formula( Write( "\!nEVERYTHINGCOL,row" || Char( Row() ) ); :ROWSTATECOL + :INDEPCOL + :DEPONINDEP; ) ),
// DEPONINDEP depends on INDEPCOL, but not ROWSTATECOL.
New Column( "DEPONINDEP", Formula( Write( "\!nDEPONINDEP,row" || Char( Row() ) ); :INDEPCOL + 1; ) ),
// INDEPCOL is independent. It evaluates early, maybe first.
New Column( "INDEPCOL", Formula( Write( "\!nINDEPCOL,row" || Char( Row() ) ); 17; ) ),
// ROWSTATECOL is directly dependent on row state information. It evaluates early, maybe first.
New Column( "ROWSTATECOL", Formula( Write( "\!nROWSTATECOL,row" || Char( Row() ) ); Selected( Row State() ); ) ),
)
Mire el registro; las columnas informan a medida que evalúan. Al seleccionar filas, se evalúan dos de las columnas, pero las otras dos no.
Re: ¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?En el menú Preferencias, en "Tablas", hay una opción para "Suprimir evaluación de fórmula al abrir (no recomendado)".Activé esta opción pero no parece funcionar.Cuando abro una tabla de datos, comienza con la evaluación de fórmula no suprimida y todavía tengo que suprimirla manualmente.¿Esta opción no funciona o no entiendo bien lo que se supone que debe hacer?
Re: ¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?Craige, mi punto era que todas las fórmulas se recalculan si dependen o no del estado de la fila .La gran mayoría de fórmulas no tienen nada que ver con el estado de la fila, pero un cambio en el estado de la fila hace que se vuelvan a calcular de todos modos.Supongo que JMP calcula todo, todo el tiempo, si sucede algo que pueda afectar cualquier tipo de fórmula que pueda existir.En mi opinión, eso es innecesario e ineficiente.Como usar un hacha de batalla cuando un bisturí sería suficiente.Estoy seguro de que es más fácil codificar el programa de esa manera; simplemente parece un enfoque poco sofisticado y me sorprendió cuando supe que así es como JMP maneja la evaluación de fórmulas.
Ahora que entiendo mejor cómo se calculan las fórmulas, ciertamente puedo solucionarlo manteniendo suprimida la evaluación de fórmulas e insertando dt << runFormulas; y Esperar(0); declaración a lo largo de mis guiones.No será bonito, pero funcionará, supongo.
Re: ¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?Sí, si alguna fórmula depende de la información del estado de la fila, cambiar la selección de la fila reevaluará esa columna y cualquier columna que dependa de ella.
Es posible que pueda acelerar mucho la evaluación utilizando dt<
Re: ¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?Jim, gracias por la respuesta.Esta tabla contiene datos de series temporales y importo periódicamente los datos más actuales.Me gustaría conservar las fórmulas para que se calculen a partir de los nuevos datos una vez que se hayan agregado a la tabla.
Para la mayoría de estas fórmulas, el valor sólo dependería de los demás datos de esa misma fila.Excluir datos anteriores en la tabla no tendría ningún efecto en los valores siguientes, por lo que no es necesario volver a calcular toda la columna, pero ocurre de todos modos.Sería bueno si esto solo sucediera si la fórmula contuviera Col Maximum() o Lag() u otra función similar que hiciera que la fórmula se viera afectada por valores en otras filas.
Además, la parte más sorprendente para mí fue que el mero selección de una fila desencadenó una reevaluación completa de la tabla (como lo demuestran el uso de la CPU y la capacidad de respuesta de la interfaz de usuario).Si una fórmula podría verse afectada al excluir una fila, ¿por qué no activar la evaluación cuando el usuario realmente excluye una fila ?Supongo que es teóricamente posible que un usuario pueda escribir una fórmula de columna que dependa del estado de selección de fila actual, pero me parece un caso extremo poco común.
Re: ¿Por qué la selección/deseleccionación de filas activa la reevaluación de las fórmulas de las columnas?La recalculación se realiza porque una fórmula podría verse afectada por un cambio en la selección/exclusión de una celda para una columna determinada.Dado el tamaño de su tabla de datos, consideraría cambiar las columnas donde los valores de la fórmula no cambiarán y luego eliminaría la propiedad "Fórmula", convirtiéndolas en una columna numérica típica.