formule de somme cumulative de finJ'ai ce qui est probablement un besoin de formule très facile. J'ai un ensemble de données de température et j'ai besoin de calculer une somme cumulative de fin au cours des 120 derniers jours (connus sous le nom de «semaines de degrés de chauffage» puisque je vais convertir cette somme en semaines en divisant par 7). Je sais comment obtenir une moyenne de fin et je sais comment obtenir une somme cumulative, mais est-il possible d'obtenir une somme cumulative de 120 jours? Dans ce cas, lorsque la température dépasse 31,3 ° C, un «score» de 0,25 est donné (voir la colonne «DH-6 heures» pour la formule). Fondamentalement, je veux la somme cumulée de ces 0,25 valeurs sur une fenêtre de 120 jours, mais je ne sais comment partitionner que par date / mois / année, etc. (voir le script "#DHWs" par exemple), pas par une fenêtre réelle de temps. Je suis convaincu que cela doit être faisable!
AnalytiqueTableau de donnéesScriptingRe: formule de somme cumulative de finSi j'interprète correctement ce que vous voulez, je pense que la formule ci-dessous calculera une somme cumulative de 120 en fin de course
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: formule de somme cumulative de finGénial! Cela a fait l'affaire. Je viens de le modifier pour refléter le fait qu'il y avait huit heures de mesure par jour (c'est-à-dire que chaque ligne n'est pas un jour unique, j'ai donc multiplié les 121 x 8 = 968 dans l'évaluation). Les données ont du sens car la valeur atteint le maximum annuel que j'avais calculé auparavant, avant de chuter. Merci beaucoup. Je souhaite qu'il y ait une somme cumulative de fin dans l'éditeur de formule qui a des entrées similaires à la moyenne mobile de la colonne (que j'utilise TOUT le temps): poids et N avant. Je vais peut-être l'ajouter à la liste de souhaits.
Re: formule de somme cumulative de finJ'ai une question qui découle d'une bizarrerie ennuyeuse dans l'ensemble de données: je dois évaluer la somme cumulée en heures (et non en semaines, comme je l'ai déjà mentionné) sur la période de 120 jours. Cependant, les intervalles de temps sont incohérents (voir tableau ci-joint). Dans la PLUPART des cas, il y a 8 mesures / jour, mais parfois c'est moins. Fondamentalement, chaque fois que la température est> 31,3, je veux ajouter le décalage horaire à la colonne. C'est assez simple en utilisant la fonction "dif". Cependant, là où je lutte, c'est comment ajouter les «120 jours» à la formule matricielle. Donc, dans le tableau ci-joint, je veux faire la somme cumulée des «DHH» sur la période de 120 jours. Plutôt que d'avoir le nombre de "lignes" dans la formule, j'en ai besoin pour suivre la date à la place. Est-ce possible?
Re: formule de somme cumulative de finJe ne sais pas exactement quel diviseur vous envisagez d'utiliser, mais j'ai utilisé le nombre d'heures sur la plage de la matrice de données.Voici la formule que j'ai trouvée
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: formule de somme cumulative de finJim, merci d'avoir relu ma question, bien qu'il semble que les valeurs résultant de votre nouvelle formule soient trop faibles (même si la formule semble logique). Mais peut-être aurais-je dû énoncer mon besoin différemment, auquel cas il y a peut-être une solution plus simple (ou du moins plus simple): je veux connaître le nombre total d'heures dans une période de 120 jours pendant laquelle la température était SUPÉRIEURE. 31.3C. Cela équivaut généralement à des blocs de 3 heures puisque la température n'est mesurée que toutes les trois heures (dans la plupart des cas), il s'agit donc essentiellement d'une série de sommes de 3 (voir la colonne "DHH" dans le tableau ci-joint). Par conséquent, les valeurs pourraient être des centaines pour les mois les plus chauds. Donc, fondamentalement, j'ai besoin d'une somme de 120 jours de la colonne DHH, mais c'est délicat étant donné le problème des nombres différents de mesures / jour!
Re: formule de somme cumulative de finSi vous voulez juste la somme, ne divisez pas la somme par quoi que ce soit
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;