Supongamos que en JSL creo una matriz asociativa, luego creo una nueva columna en una tabla de datos con una fórmula que usa esa matriz para completar la columna en función de las entradas en otra columna.
Cuando se guarda la tabla de datos, parece retener esa matriz asociativa en algún lugar, ¿dónde está almacenada? ¿Dentro de la tabla de datos en alguna parte? ¿Hay alguna forma de verlo o editarlo más tarde?
La matriz asociativa se guarda en la memoria RAM hasta que se borra la variable, se cierra el espacio de nombres en el que se encuentra o se cierra la sesión JMP.Lo que podría estar viendo que le hace pensar que la matriz se está guardando, son un par de cosas.
- Cuando abra la tabla de datos, mostrará los valores en la columna de fórmula que existían cuando se guardó la tabla de datos.La fórmula no se ejecuta para lograr esto, parece que los últimos valores se guardan con la columna.Pero si intenta agregar una nueva fila a la tabla de datos, lo que forzará la ejecución de la fórmula, se mostrará un error.
- Si guarda y cierra la tabla de datos y luego la vuelve a abrir, sin cerrar la sesión de JMP, la fórmula puede encontrar que la matriz aún permanece en la memoria RAM.Por lo tanto, permite que la fórmula se ejecute.
La forma en que normalmente manejo las fórmulas que necesitan elementos como una matriz asociativa es agregar la creación de la matriz en la fórmula, ejecutándola solo cuando la fórmula se ejecuta por primera vez.Un ejemplo muy simple sería:
Si la matriz asociativa se crea con esta fórmula.
myArray = associative array(:age << get values);
Luego, para que funcione en una fórmula, solo debe especificar que se ejecute este código solo cuando la fórmula se ejecuta en la primera fila, de modo que esté disponible para todas las filas.
If( Row() == 1,
myArray = Associative Array( :age << get values )
);
Con este JSL como el primer elemento de su fórmula, la fórmula funcionará.