如何根據公式或 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 行,出現次數應增加。 我確實手動更改了幾個值,這是我的錯誤。
再次感謝。