Sto cercando di creare una colonna che calcoli la somma delle 24 righe di ritardo. In questo caso ho una colonna "Precip" che contiene i totali delle precipitazioni orarie. C'è una seconda colonna "stazione di precipitazione" che indica da quale posizione è stato registrato ciascun valore. Ho ordinato le colonne in base a "DateTime" e "Precipitation Station". Sto cercando un modo efficiente per sommare i precedenti 24 valori nella colonna Precip creando così una nuova colonna che mi dica quanto ha piovuto nelle precedenti 24 ore. Questo totale di 24 ore è specifico della stazione, quindi non può calcolare i valori del ritardo 24 se le precipitazioni del ritardo 24 non corrispondono.
Ho finito per capirlo da solo, è una semplice funzione di sommatoria. Ho pensato di pubblicarlo nel caso in cui qualcun altro avesse bisogno di fare qualcosa del genere.
If( :Precipitation Station == Lag( :Precipitation Station, 1 ),
Summation( i = 1, 24, Lag( :Precipitation, i ) ),
:Precipitation
);
In realtà non sto cercando di calcolare la precipitazione totale per una data stazione/data, ma piuttosto stazione/periodo di 24 ore precedente. quindi, ad esempio, se DateTime per un dato for è 1/3/2020 09:00:00 AM, vorrei prendere i 24 valori precedenti nella colonna precip e sommarli. Quindi a partire dal 3/1/2020 08:00:00 e tornando indietro fino al 2/1/2020 09:00:00. Essenzialmente una finestra temporale in movimento di 24 ore. Questa colonna mi darebbe quindi la pioggia precedente nelle 24 ore precedenti per ogni riga nella mia tabella di dati.
Se stai cercando di calcolare la somma delle precipitazioni per un dato giorno/stazione, crea una nuova colonna che sia solo la parte della data di datetime.Quindi fai una tabulazione per data e stazione e metti Precip nel mezzo.
Questo programma crea un set di dati di esempio con una colonna formula per la data e un programma Tabula per calcolare la precipitazione per data/stazione.
New Table( "Example", Add Rows( 20 ),
New Script( "Tabulate",
Tabulate(
Show Control Panel( 0 ),
Add Table(
Column Table( Analysis Columns( :Precip ) ),
Row Table( Grouping Columns( :Precip Date, :Station ) )
)
)
),
New Column( "Precip Datetime", Numeric, "Continuous", Format( "ddMonyyyy h:m:s", 22, 0 ),
Input Format( "ddMonyyyy h:m:s", 0 ),
Set Values(
[3660710400, 3660714000, 3660717600, 3660721200, 3660724800, 3660710400,
3660714000, 3660717600, 3660721200, 3660724800, 3660796800, 3660800400,
3660804000, 3660807600, 3660811200, 3660796800, 3660800400, 3660804000,
3660807600, 3660811200]
),
Set Display Width( 186 )
),
New Column( "Station", Character, "Nominal",
Set Values(
{"A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "A", "A", "A", "A",
"A", "B", "B", "B", "B", "B"}
)
),
New Column( "Precip", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 2, 3, 4, 5, 3, 4, 5, 1, 1, 4, 5, 6, 7, 5, 4, 5, 6, 7, 8] )
),
New Column( "Precip Date", Character, "Nominal",
Formula( Short Date( :Precip Datetime ) )
)
);