Estoy tratando de crear una columna que calcule la suma del retraso de 24 filas. En este caso, tengo una columna "Precip" que contiene los totales de precipitación por hora. Hay una segunda columna "estación de precipitación" que indica desde qué ubicación se registró cada valor. He ordenado las columnas según "Fecha y hora" y "Estación de precipitación". Estoy buscando una forma eficiente de sumar los 24 valores anteriores en la columna Precip creando así una nueva columna que me dice cuánto llovió en las 24 horas anteriores. Este total de 24 horas es específico de la estación, por lo que no puede calcular los valores de retraso 24 si las precipitaciones de retraso 24 no coinciden.
Si está tratando de calcular la suma de precipitación para un día / estación determinados, cree una nueva columna que sea solo la parte de la fecha y hora. Luego haga una tabulación por fecha y estación, y coloque Precip en el medio.
Este programa crea un conjunto de datos de ejemplo con una columna de fórmula para la fecha y un programa Tabular para calcular la precipitación por fecha / estación.
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 ) )
)
);En realidad no estoy tratando de calcular la precipitación total para una estación / fecha dada, sino más bien estación / período de 24 horas anterior. así, por ejemplo, si DateTime para un dado es 1/3/2020 09:00:00 AM, me gustaría tomar los 24 valores anteriores en la columna precip y sumarlos. Entonces, comenzando con el 1/3/2020 a las 08:00:00 a.m. y regresando hasta el 1/2/2020 a las 09:00:00 a.m. Esencialmente una ventana de tiempo en movimiento de 24 horas. Esta columna me daría la lluvia previa durante las 24 horas anteriores para cada fila en mi tabla de datos.
Terminé resolviendo esto por mi cuenta, es una función de suma simple. Pensé que lo publicaría en caso de que alguien más necesitara hacer algo como esto.
If( :Precipitation Station == Lag( :Precipitation Station, 1 ),
Summation( i = 1, 24, Lag( :Precipitation, i ) ),
:Precipitation
);