Fórmulas de columna para reducir la velocidad: cómo esperar hasta que terminen de calcularSaludos, me he encontrado con situaciones en las que importo datos sin procesar en una tabla de datos (dt1) y luego abro otra tabla de datos que tiene, por ejemplo, límites de especificación (dt2).La tabla de límites de especificaciones solo tiene un USL y un LSL.Inserto una nueva columna calculada en dt2 que es el límite de especificación de destino (media (USL, LSL)).Luego recorro todas las filas de mi dt1 de datos sin procesar y si obtengo una coincidencia del nombre de la prueba y los límites de especificación, luego establezco las propiedades de la columna con los límites de especificación (p. ej., col << Establecer propiedad ("Límites de especificación", { LSL( myLSLx ),USL( myUSLx ),Target( mytargetx ), );)... Luego cierre el archivo de especificaciones dt2, no guarde.
Creo que el problema que tengo es que la columna calculada (dt2:_Target) no es lo suficientemente rápida y obtengo todos los valores vacíos cuando intento leerlos, justo después de crear la nueva columna calculada ("_Target"...).Si mantengo abierto el archivo dt2, veo los valores correctos en la columna calculada "_Target".He jugado con el dt2<< Begin data Update; y eso tampoco funciona, pero ¿tal vez lo estoy poniendo en una ubicación incorrecta en el script?La única solución que tengo es no usar una fórmula para la nueva columna, sino calcular en un script el valor objetivo y colocarlo en el archivo de especificaciones indexando todas las filas.
La raíz de mi pregunta es, ¿puedo esperar a que todas las columnas se completen con cálculos antes de intentar leer un valor específico en una fila/columna?
No funciona
P.ej,
New Column( "_Target",Numeric,"Continuous",Format( "Best", 12 ),Formula(If( Is Missing( :_LSL ) | Is Missing( :_USL ),
Empty(),
Mean( :_LSL, :_USL )
)
Solución alterna
P.ej,
dt2 = current data table();
New Column( "_Target", Numeric, "Continuous");
dt2_rows = nrows();
for (i=1, i<=dt2_rows, i++,
if(or(!is missing(dt2:_LSL[i]),!is missing(dt2:_USL[i])),
dt2:_Target[i] = ((dt2:_LSL[i]) + (d2t:_USL[i])) / 2;
,
);
Re: Fórmulas de columna para reducir la velocidad: cómo esperar hasta que terminen de calcularEste es un simple comentario de "amontonamiento".@txnelson La fórmula de ejecutará más grasa que la que proporcionó.Las fórmulas de columna se ejecutan más rápido que un bucle for. Además, la declaración condicional no es necesaria, ya que JMP devuelve un valor vacío () en cualquier cálculo que tenga un valor vacío. Por lo tanto, (:USL + :LSL)/2 estará vacío si uno o ambos valores están vacíos.
Esto es solo un FYI.
Re: Fórmulas de columna para reducir la velocidad: cómo esperar hasta que terminen de calcularTiene razón en que este mensaje no se describe en la Guía de secuencias de comandos. Se describe en la Guía de sintaxis de JSL. El primer libro no es una descripción completa de cada función y mensaje en JSL, pero el segundo libro debería estar completo. Los dos libros están destinados a complementarse y usarse juntos.
El mensaje también está cubierto por el índice de secuencias de comandos, con un enlace a la ayuda correspondiente. Una búsqueda de 'fórmula' devolvería una lista que incluye los mensajes << Ejecutar fórmulas y << Volver a ejecutar fórmulas.
Re: Fórmulas de columna para reducir la velocidad: cómo esperar hasta que terminen de calcularTampoco estaba al tanto de la "repetición". Parece que hace que las fórmulas se vuelvan a evaluar, ya sea que lo necesiten o no. Si usa números aleatorios en sus fórmulas, puede ver la diferencia. Recomendaría <
Re: Fórmulas de columna para reducir la velocidad: cómo esperar hasta que terminen de calcularBien, esto también funciona. Las fórmulas de repetición no están en la guía de secuencias de comandos de JMP V13, mientras que las fórmulas de ejecución sí lo están. Ambos funcionan en este caso.Re: Fórmulas de columna para reducir la velocidad: cómo esperar hasta que terminen de calcular¡Impresionante! ¡Funciona!Re: Fórmulas de columna para reducir la velocidad: cómo esperar hasta que terminen de calcularA continuación se muestra una modificación simple que debería funcionar para usted.Primero, al deshacerse de la cláusula If() acelerará el procesamiento, y segundo, el
dt << volver a ejecutar fórmulas;
obligará a JMP a completar el procesamiento de las fórmulas antes de continuar
dt = Current Data Table();
dt << New Column( "_Target",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( (:LSL + :USL) / 2 )
);
dt << rerun formulas;
Re: Fórmulas de columna para reducir la velocidad: cómo esperar hasta que terminen de calcularIntente enviar a su tabla un mensaje de "ejecutar fórmulas":
dt << runFormulas;