使用选择设置列中的值我确信在使用 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 以及两者的组合,但似乎无法使其正常工作。
与往常一样,我们非常感谢任何帮助。
谢谢。
自动化和脚本macOS回复:使用选择设置列中的值如果我设置局部变量,我可以让它作为列公式工作。但是我不能使用组合框结果。
这是代码。显然,我还需要学习更多关于 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
)
)
)
)
);回复:使用选择设置列中的值您错误地使用了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
)
)
);回复:使用选择设置列中的值非常感谢,Jarmo。效果非常好。