Chooseを使用して列に値を設定するChoose 関数を使用して列に値を設定するときに、単純な問題が発生していると思います。以下は、テスト スクリプトと、必要な出力を示す表です。
Names Default To Here( 1 );
startTime = 3742070400;
endTime = 3742074000;
dt = New Table( "Test",
Add Rows( 60 ),
New Column( "Timestamp", Format( "m/d/y h:m", 19 ), Set Display Width( 175 ) )
);
For Each Row( :Timestamp[] = Sequence( startTime, endTime, 60 ) );
aggOption = 1; // This will eventually be a pulldown menu with choices
New Column( "Agg Minute",
Numeric,
"Ordinal",
Format( "Best", 12 ),
Set Display Width( 116 )
);
// Script below is the problem. I tried For Each Row and Set Values and a combination
// of both but the column always is blank. See Interpolated Data table for what it
// should look like.
dt:"Agg Minute"n << For Each Row(
Choose( aggOption,
If(
Minute( :Timestamp ) < 15, 15,
Minute( :Timestamp ) < 30, 30,
Minute( :Timestamp ) < 45, 45,
0
),
If(
Minute( :Timestamp ) < 14, 0,
Minute( :Timestamp ) < 29, 15,
Minute( :Timestamp ) < 44, 30,
45
),
If(
0 < Minute( :Timestamp ) <= 15, 15,
15 < Minute( :Timestamp ) <= 30, 30,
30 < Minute( :Timestamp ) <= 45, 45,
0
)
)
);
スクリプトを実行すると、Agg Minute 列が空白になることに注意してください。Set Values と For Each Row および両方の組み合わせを試しましたが、うまくいかないようです。
いつものように、どんな援助でも大歓迎です。
ありがとう。
自動化とスクリプトmacOSRe: Choose を使用して列に値を設定するローカル変数を設定すると、列の数式として機能させることができます。ただし、その場合、コンボ ボックスの結果は使用できません。
これがそのコードです。JSL について学ぶべきことはまだまだたくさんあります。コードを自動生成するのはとても簡単です。しかし、カスタマイズしようとすると、コードが壊れてしまうことがよくあります。まだ修正するのに十分な知識がありません。
ああ。
New Column( "Agg Minute",
Numeric,
"Ordinal",
Format( "Best", 12 ),
Set Display Width( 116 ),
Formula(
Local( {aggOption = 1},
Choose( aggOption,
If(
Minute( :Timestamp ) < 15, 15,
Minute( :Timestamp ) < 30, 30,
Minute( :Timestamp ) < 45, 45,
0
),
If(
Minute( :Timestamp ) < 15, 0,
Minute( :Timestamp ) < 30, 15,
Minute( :Timestamp ) < 45, 30,
45
),
If(
0 < Minute( :Timestamp ) <= 15, 15,
15 < Minute( :Timestamp ) <= 30, 30,
30 < Minute( :Timestamp ) <= 45, 45,
0
)
)
)
)
);Re: Choose を使用して列に値を設定するFor Each Rowの使い方が間違っています。列に送信するのではなく、(オプションの) データ テーブルと本体引数を指定して関数を作成し、本体内で列に値を設定できます。
修正版はこちら
Names Default To Here(1);
startTime = 3742070400;
endTime = 3742074000;
dt = New Table("Test",
Add Rows(60),
New Column("Timestamp", Format("m/d/y h:m", 19), Set Display Width(175))
);
For Each Row(:Timestamp[] = Sequence(startTime, endTime, 60));
aggOption = 1;
New Column("Agg Minute", Numeric, "Ordinal", Format("Best", 12), Set Display Width(116));
For Each Row(dt,
:"Agg Minute"n = Choose(aggOption,
If(
Minute(:Timestamp) < 15, 15,
Minute(:Timestamp) < 30, 30,
Minute(:Timestamp) < 45, 45,
0
),
If(
Minute(:Timestamp) < 14, 0,
Minute(:Timestamp) < 29, 15,
Minute(:Timestamp) < 44, 30,
45
),
If(
0 < Minute(:Timestamp) <= 15, 15,
15 < Minute(:Timestamp) <= 30, 30,
30 < Minute(:Timestamp) <= 45, 45,
0
)
)
);Re: Choose を使用して列に値を設定するありがとう、Jarmo。見事にうまくいきました。