改变配方如附件所示,列 ROW(3)的公式有效,但只针对一行。
公式列“使用 For 循环”如下图颜色所示,我知道公式中不能包含 For 循环,所以把 For 循环部分去掉,将“ :Scan input[i]”改为其他表达式或者其他函数来实现,从“ :扫描输入[1] ”改为“ : Scan input[结束行号] ”,然后根据“Scan input”列的每一行自动更新。请帮忙修改一下,谢谢!
For(i = 1, i <= N Rows(), i++,
If(Is Missing(:Scan input),
"",
If(Col Sum(:Blacklist == :Scan input[i]) > 0,
"NG",
"OK"
)
)
)
自动化和脚本数据探索与可视化视窗回复:改变配方您说公式中不能有 For 循环。关于公式中 For 循环的实际说法是,不需要在公式中使用 For 循环来循环遍历数据表中的每一行,因为公式会自动应用于每一行。
但如果需要在每一行上运行 For 循环,那么当然可以使用它。
以下是编写公式的 3 种方法,我相信这些公式可以实现你想要的结果

If( Is Missing( :Scan input ),
theResult = "",
theResult = "OK";
For( i = 1, i <= N Rows( Current Data Table() ), i++,
If( :Blacklist == :Scan input[i],
theResult = "NG";
Break();
)
);
);
theResult;
If( Is Missing( :Scan input ),
"",
curBlacklist = :Blacklist;
If( N Rows( Current Data Table() << get rows where( :Scan input == curBlacklist ) ) > 0,
"NG",
"OK"
);
)
As Constant( Summarize( ScanList = by( :Scan input ) ) );
If( Is Missing( :Scan input ),
"",
If( N Rows( Loc( ScanList, :Blacklist ) ) > 0,
"NG",
"OK"
)
);
回复:改变配方谢谢!但是第 3、4、5 行的正确结果应该显示 NG。这个问题还没有解决。
回复:改变配方谢谢!但第3行和第5行的正确结果应该是NG,还没解决。
回复:改变配方如何确定“NG”或“OK”结果(用文字,而不是 JSL)?
回复:改变配方我提供的所有公式都会查看给定行的黑名单值,然后查看扫描输入的所有行,看是否有任何行具有相同的值。
我肯定误解了您要做的事情。我以为这就是您提供的 JSL 想要做的事情。您能描述一下您想要的结果吗?
回复:改变配方Blacklist列的结果全部为NG,实际场景是某夹具生产的产品已知为NG,需要用条码枪找出来扫描到Scan input列,只要“Scan input”列的值在Blacklist列任意一行,就会显示NG,比如第1行完全相等就显示NG,第3行不完全相等,但Blacklist列第1行出现了“X1”,就显示NG。
回复:改变配方将所有黑名单值收集到列表/关联数组中,并将当前行值与该值进行比较
As Constant(
bl = :Blacklist << get values;
);
If(!IsMissing(:Scan input),
If(Contains(bl, :Scan input),
"NG"
,
"OK"
);
,
""
);

回复:改变配方Blacklist所有列的结果都是NG,不分先后顺序,只要“扫描输入”列的值出现在Blacklist列的任意一行,就会显示NG,利用公式可以很方便的在扫描过程中找出不良品。