ラグ 24 行の合計を計算する列を作成しようとしています。 この例では、時間ごとの降水量の合計を含む「Precip」列があります。 2 番目の列「降水観測所」は、各値がどの場所から記録されたかを示しています。 「日付時刻」と「降水観測所」に基づいて列を並べ替えました。 Precip 列の前の 24 個の値を合計して、過去 24 時間に降った雨の量を示す新しい列を作成する効率的な方法を探しています。 この 24 時間の合計はステーション固有であるため、ラグ 24 の降水量が一致しない場合はラグ 24 の値を計算できません。
私はこれを自分で理解することになりました。これは単純な合計関数です。 他の誰かがこのようなことをする必要がある場合に備えて投稿すると思いました。
If( :Precipitation Station == Lag( :Precipitation Station, 1 ),
Summation( i = 1, 24, Lag( :Precipitation, i ) ),
:Precipitation
);
実際には、特定のステーション/日付の合計降水量を計算しようとしているのではなく、ステーション/過去 24 時間の合計降水量を計算しようとしています。したがって、たとえば、指定された for の DateTime が 1/3/2020 09:00:00 AM である場合、precip 列の前の 24 個の値を取得し、それらを合計したいと考えます。 つまり、2020 年 1 月 3 日の午前 8:00:00 から始まり、2020 年 1 月 2 日の午前 9:00:00 まで遡ります。基本的には 24 時間の移動時間枠です。 したがって、この列には、データ テーブルの各行の過去 24 時間の雨が表示されます。
特定の日/観測点の降水量の合計を計算しようとしている場合は、日時の日付部分だけを含む新しい列を作成します。次に、日付と駅ごとに集計を行い、Precip を真ん中に置きます。
このプログラムは、日付の数式列を含むサンプル データセットと、日付/観測所ごとの降水量を計算するための表作成プログラムを作成します。
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 ) )
)
);