Opción o función para evaluar una fórmula de columna personalizada a la vez o almacenar en caché valores entre filasAlgunas fórmulas de columna integradas como Col Mean() son muy rápidas porque solo calculan valores costosos una vez y los devuelven o modifican para cada fila.Con fórmulas personalizadas esto es más difícil de lograr porque cada fila se evalúa por separado.A veces, usar una columna separada para almacenar valores intermedios puede acelerar las cosas (por ejemplo, almacenar la fila de números que cumplen con ciertos criterios, en lugar de volver a calcularlos en cada fila), pero eso se vuelve complicado y difícil de seguir. Si existiera algún concepto de contexto de columna tal que la evaluación de una fila pudiera acceder a los valores intermedios calculados en la fila anterior, entonces un script podría calcular los resultados para todas las filas a la vez y luego devolverlos rápidamente y pasar los resultados intermedios a la siguiente. fila. La fórmula también necesitaría acceso a toda la columna en lugar de solo a la fila actual, por lo que la referencia de la columna debe pasarse sin evaluar.
Automatización y secuencias de comandosRe: Opción o función para evaluar una fórmula de columna personalizada a la vez o almacenar en caché valores entre filasEsta opción o función simplificaría la creación de una transformación de columna personalizada para resolver el problema descrito por @hogi en una de las respuestas posteriores a contar único
Re: Opción o función para evaluar una fórmula de columna personalizada a la vez o almacenar en caché valores entre filasLa investigación de este problema está en curso y lo actualizaremos si llegamos a una solución.
Re: Opción o función para evaluar una fórmula de columna personalizada a la vez o almacenar en caché valores entre filasOtro ejemplo: escribir una función personalizada más fluida como un filtro Savitzky-Golay que ignora las filas excluidas.Esto se puede calcular de manera eficiente para toda la columna a la vez cuando se evalúa la primera fila. Me gustaría almacenar en caché los valores de toda la columna en la primera evaluación y luego simplemente devolver el resultado precalculado en cada fila en lugar de volver a calcularlo. cada vez.
Re: Opción o función para evaluar una fórmula de columna personalizada a la vez o almacenar en caché valores entre filasSí, también me di cuenta de eso, pero seguro si lo estuvieras usando de esa manera. Parece que se está tomando demasiado en serio la parte "constante" para lo que me gustaría. Tendremos que investigar, pero probablemente necesite nueva funcionalidad para el reconocimiento de dependencia/reejecución.
Para casos como el suyo, normalmente hago que la fórmula dependa de una variable de la tabla y actualizo la variable de la tabla cada vez que recorre el ciclo para tener un nuevo valor aleatorio.
Re: Opción o función para evaluar una fórmula de columna personalizada a la vez o almacenar en caché valores entre filasHola @XanGregg ,
Podría faltarme algo, pero parece que no logro que As Constant se vuelva a evaluar cuando se vuelven a ejecutar las fórmulas de la tabla.Parece almacenar en caché (probablemente correctamente) su valor siempre que la tabla esté abierta. Aquí hay ejemplos más completos que resuelven este problema usando una variable global.
Ver más...
here:dt = New Table( "Single Evaluation in Column Formula Example",
Add Rows( 1000 ),
New Column( "Timestamp",
Numeric,
"Continuous",
Format( "ddMonyyyy h:m:s", 22, 0 ),
Input Format( "ddMonyyyy h:m:s", 0 ),
Formula( Today() - (1000 + In Days( Row() )) )
),
New Column( "Local With As Constant",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Local( {startofweek},
startofweek = As Constant(
Random Uniform(
Col Min( :Timestamp ),
Col Max( :Timestamp ) - In Days( 7 )
)
);
If(
:Timestamp > startofweek & :Timestamp < startofweek
+In Days( 7 ),
1,
0
);
)
)
),
New Column( "Global With Evaluation in Row 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1,
::: startofweek = Random Uniform(
Col Min( :Timestamp ),
Col Max( :Timestamp ) - In Days( 7 )
)
);
If(
:Timestamp > ::: startofweek & :Timestamp < ::: startofweek
+In Days( 7 ),
1,
0
);
)
)
);
here:dt << Graph Builder(
Size( 833, 456 ),
Show Control Panel( 0 ),
Variables(
X( :Timestamp ),
Y( :Local With As Constant ),
Y( :Global With Evaluation in Row 1 )
),
Elements( Position( 1, 1 ), Line( X, Y, Legend( 7 ) ) ),
Elements( Position( 1, 2 ), Line( X, Y, Legend( 6 ) ) )
);
for each( {i}, 1::10,
wait(1);
here:dt << Rerun Formulas;
);
Re: Opción o función para evaluar una fórmula de columna personalizada a la vez o almacenar en caché valores entre filas¿Has visto la función As Constant(x)? Eso debería manejar la parte única de la solicitud.
Local(
{startofweek = As Constant(
Random Uniform(
Col Min( :Timestamp ),
Col Max( :Timestamp ) - In Days( 7 )
)
)},
If( :timestamp > startofweek & :timestamp < startofweek + In Days( 7 ),
1,
0
)
)Re: Opción o función para evaluar una fórmula de columna personalizada a la vez o almacenar en caché valores entre filasGracias por el ejemplo y la información adicional. @ih . Se cambió el estado a investigando.
Re: Opción o función para evaluar una fórmula de columna personalizada a la vez o valores en caché entre filas - Estado cambiado a: InvestigandoRe: Opción o función para evaluar una fórmula de columna personalizada a la vez o almacenar en caché valores entre filasAquí hay un par de posibles casos de uso, sé que hay otros que estoy olvidando en este momento.Muchos de estos se pueden resolver fácilmente para tablas pequeñas o mediante el uso de múltiples columnas o variables de tabla, pero proporcionar una variable de contexto de columna los haría más fáciles.
- Utilice un valor aleatorio en la fórmula de la columna para poder intercambiarlo en una simulación
// this value should be cached and re-used for all rows,
// but it should change each time the column is recalculated
startofweek = Random Uniform(
Col Min( :Timestamp ),
Col Max( :Timestamp ) - In Days( 7 )
);
If( :Timestamp > startofweek & :Timestamp < startofweek + In Days( 7 ),
1,
0
);
- El número de filas desde el inicio de la última muestra fuera de especificación.
- El tiempo hasta que finalice esta campaña
- Promedio móvil de las últimas 10 muestras para este código de producto
Re: Opción o función para evaluar una fórmula de columna personalizada a la vez o almacenar en caché valores entre filasCreo que esta publicación podría demostrar el problema. Creación de una función estadística personalizada (fórmula) que tiene byVar
Re: Opción o función para evaluar una fórmula de columna personalizada a la vez o valores en caché entre filas - Estado cambiado a: Necesita información@ih ¿Podrías compartir un ejemplo de una tabla de datos que ilustre el problema que describe?