如何根据公式或 For-Loop 中的分组列调用聚合值(平均值/最大值等)大家好,
我试图找出警报触发的次数。 我基于简单的逻辑创建了一个“发生次数”列——如果数据在行()> 行()+1,触发器重新设置。 但是我收到了很多误报,如图所示。 我要实现的新登录 -
如果 (
(Row() - Row()+1) >= Abs(Max(Data))/10, 重置触发器,否则按原样生活
)
类似的东西。
我可以用一点日志的方式来做,比如制作汇总表,然后从汇总表中添加列,然后将每个值与新列进行比较。 它工作正常,但使我的脚本变慢。
有没有更好的方法在公式或 For 循环中实现它?
任何帮助。
谢谢。

脚本编写回复:如何根据公式或 For-Loop 中的分组列调用聚合值(平均值/最大值等)您可以使用 Col Max() 函数获取组内的最大值,并使用 Lag() 来比较列中的行。
您能否提供具有“正确”结果的数据表,以便更容易理解警报背后的逻辑? 或者只是想检查当前数据值是否大于组(ID 和子集)中的先前值?
回复:如何根据公式或 For-Loop 中的分组列调用聚合值(平均值/最大值等)你好@jthi
我添加了一个列 - “发生次数 - 更正”。这显示了正确的(期望的)结果。

回复:如何根据公式或 For-Loop 中的分组列调用聚合值(平均值/最大值等)您可以直接使用公式计算 10% Max:
Col Max(:Data, :ID, :"Sub-set"n)*0.1
我仍然不确定应该如何计算出现次数,因为它似乎永远不会重置,但可能会后移 1 个值。 要检查“当前行”之后的值数据列值,您可以使用 Lag(:Data, - 1)

您拥有的规则看起来像这样作为一个公式:
If(:Data - Lag(:Data, -1) >= Abs(Col Max(:Data, :ID, :"Sub-set"n)) / 10,
1,
0
)
回复:如何根据公式或 For-Loop 中的分组列调用聚合值(平均值/最大值等)它不工作。 不知何故,我无法实现 - “Col Max(:Data , Group by{ID, Sub-set})”这样的东西。
我可以将汇总表中的值调用到主表的列公式中,这比我原来的解决方案要好。
谢谢。
回复:如何根据公式或 For-Loop 中的分组列调用聚合值(平均值/最大值等)我想出了一个似乎有效的公式.........

与您的发生次数存在差异 - 已更正。在第 32 行,我相信 .13 - 08 导致 0.05 大于 0.034,这应该会增加出现次数。

您对额外事件的实现也不会应用到它被发现之后的行。因此,使用您的公式必须有一些技巧,在处理下一行之前不要应用更改。下面是我用于“吉姆的计算”列的公式
If( Row() == 1 | :ID != Lag( :ID ) | :"Sub-set"n != Lag( :"Sub-set"n ),
hold = :Number of Occurance;
applyRow = 0;
);
If( :Data - Lag( :Data, -1 ) >= Abs( Col Max( :Data, :ID, :"Sub-set"n ) ) / 10,
applyRow = Row() + 1
);
If( Row() == applyRow,
applyRow = 0;
hold = hold + 1;
);
hold;
回复:如何根据公式或 For-Loop 中的分组列调用聚合值(平均值/最大值等)你好@txnelson , 有效。非常感谢。
一些事情 -
1. 你的公式有效。 但它将“出现次数”作为第 2 行中“保持”的输入。 有什么办法可以绕过该列。 (比如说,我没有原来的“出现次数”列!)。 我们可以仅根据前 3 列获得正确的出现次数吗? 我不想依赖那些专栏,如果明天我发现了一些其他类型的误报,这里就不介绍了!

2.“子集”旁边的“n”是什么——“子集”n? 我也没有从吉姆的建议中得到它。 有什么参考吗?
3. 在第 32 行,出现次数应增加。 我确实手动更改了几个值,这是我的错误。
再次感谢。