fórmula de suma acumulativa finalTengo lo que probablemente sea una necesidad de fórmula muy fácil. Tengo un conjunto de datos de temperatura y necesito calcular una suma acumulada final durante los últimos 120 días (conocida como "semanas de calentamiento de grados", ya que convertiré esta suma en semanas dividiéndola por 7). Sé cómo obtener un promedio final y sé cómo obtener una suma acumulativa, pero ¿es posible obtener una suma acumulativa de 120 días al final? En este caso, cuando la temperatura sobrepasa los 31,3 ° C, se da una "puntuación" de 0,25 (consulte la fórmula en la columna "DH-6 h"). Básicamente, quiero la suma acumulada de estos 0,25 valores en una ventana de 120 días, pero solo sé cómo particionar por fecha / mes / año, etc. (ver el script "#DHWs" por ejemplo), no por una ventana real de tiempo. ¡Estoy seguro de que esto debe ser factible!
AnalíticaTabla de datosScriptingRe: fórmula de suma acumulativa finalSi estoy interpretando correctamente lo que desea, creo que la fórmula siguiente calculará una suma acumulada final de 120
If( Row() == 1,
holdMatrix = []
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || Matrix( 0.25 ),
holdMatrix = holdMatrix || Matrix( . )
);
If( N Cols( holdMatrix ) == 121,
holdMatrix[1] = []
);
Sum( holdMatrix ) / 7;
Re: fórmula de suma acumulativa final¡Excelente! Eso hizo el truco. Simplemente lo modifiqué para reflejar el hecho de que había ocho tiempos de medición por día (es decir, cada fila no es un día único, por lo que multipliqué 121 x 8 = 968 en la evaluación). Los datos tienen sentido porque el valor alcanza el máximo anual que había calculado antes, antes de caer. Muchas gracias. Ojalá hubiera una suma acumulativa final en el editor de fórmulas que tenga entradas similares a la media móvil de la columna (que uso TODO el tiempo): peso y N antes. Quizás lo agregue a la lista de deseos.
Re: fórmula de suma acumulativa finalTengo una pregunta que surge de una peculiaridad molesta en el conjunto de datos: necesito evaluar la suma acumulada en horas (no semanas, como mencioné antes) durante el período final de 120 días. Sin embargo, los intervalos de tiempo son inconsistentes (ver tabla adjunta). En la MAYORÍA de los casos, hay 8 mediciones / día, pero a veces es menos. Básicamente, cada vez que la temperatura es> 31,3, quiero agregar la diferencia de tiempo a la columna. Esto es bastante fácil con la función "dif". Sin embargo, donde lucho es cómo agregar los "120 días" a la fórmula matricial. Entonces, en la tabla adjunta, quiero hacer la suma acumulativa de los "DHH" durante el período final de 120 días. En lugar de tener el número de "filas" en la fórmula, lo necesito para rastrear la fecha. ¿Es eso posible?
Re: fórmula de suma acumulativa finalNo estoy exactamente seguro de qué divisor está buscando usar, pero usé la cantidad de horas en el rango de la matriz de datos.Aquí está la fórmula que se me ocurrió
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || 0.25;
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
);
If( N Cols( dateMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ),
holdMatrix[1] = [];
dateMatrix[1] = [];
);
x = Sum( holdMatrix ) / ((dateMatrix[N Cols( dateMatrix )] - dateMatrix[1]) / In Hours( 1 ));
,
x = .
);
x;
Re: fórmula de suma acumulativa finalJim, gracias por volver a leer mi pregunta, aunque parece que los valores resultantes de tu nueva fórmula son demasiado bajos (a pesar de que la fórmula parece tener sentido). Pero tal vez debería haber expresado mi necesidad de manera diferente, en cuyo caso puede haber una solución más simple (o al menos más sencilla): quiero saber el número total de HORAS en un período final de 120 días en el que la temperatura fue SUPERADA 31,3C. Esto generalmente equivale a bloques de 3 horas ya que la temperatura solo se mide cada tres horas (en la mayoría de los casos), por lo que básicamente es una serie de sumas de 3 (consulte la columna "DHH" en la tabla adjunta). Por lo tanto, los valores podrían ser de cientos para los meses más cálidos. Entonces, básicamente, necesito una suma final de 120 días de la columna DHH, ¡pero es complicado dado el problema de diferentes números de mediciones / día!
Re: fórmula de suma acumulativa finalSi solo quiere la suma, no divida la suma por nada
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || 0.25;
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
);
If( N Cols( dateMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ),
holdMatrix[1] = [];
dateMatrix[1] = [];
);
x = Sum( holdMatrix ) ;
,
x = .
);
x;