FormulaまたはFor-Loopのグループ化された列に基づいて集計値(平均/最大など)を呼び出す方法こんにちは、みんな、
アラームがトリガーされた回数を調べようとしています。 単純なロジックに基づいて「発生数」列を作成しました。行()>行()+1のデータの場合、トリガーが再設定されます。 しかし、画像に見られるように、私は多くの誤警報を受け取っています。 実装したい新しいログイン-
もしも (
(Row()-Row()+ 1)> = Abs(Max(Data))/ 10、トリガーをリセットします。それ以外の場合はそのままにします。
)。
そんな感じ。
サマリーテーブルを作成し、サマリーテーブルから列を追加して、各値を新しい列と比較するなど、ビットログの方法でそれを行うことができます。 正常に動作しますが、スクリプトが遅くなります。
数式内またはForループでそれを実装するためのより良い方法はありますか?
どんな助けでも。
ありがとう。

スクリプティングRe:数式またはForループのグループ化された列に基づいて集計値(平均/最大など)を呼び出す方法Col Max()関数を使用してグループ内の最大値を取得し、Lag()を使用して列の行を比較できます。
アラームの背後にあるロジックを少し理解しやすくするために、データテーブルに「正しい」結果を提供できますか? または、現在のデータ値がグループ(IDおよびサブセット)内の以前の値よりも大きいかどうかを確認したいだけですか?
Re:数式またはFor-Loopのグループ化された列に基づいて集計値(平均/最大など)を呼び出す方法こんにちは@jthi
「発生数-修正済み」という列を追加しました。これは正しい(望ましい)結果を示しています。

Re:数式またはForループのグループ化された列に基づいて集計値(平均/最大など)を呼び出す方法次の式を使用して、最大10%を直接計算できます。
Col Max(:Data, :ID, :"Sub-set"n)*0.1
リセットされることはないようですが、1値戻る可能性があるため、発生をどのようにカウントするかはまだわかりません。 「現在の行」の後にある値データ列の値を確認するには、Lag(:Data、-1)を使用できます。

あなたが持っているルールは、1つの式として次のようになります。
If(:Data - Lag(:Data, -1) >= Abs(Col Max(:Data, :ID, :"Sub-set"n)) / 10,
1,
0
)
Re:数式またはForループのグループ化された列に基づいて集計値(平均/最大など)を呼び出す方法動作していません。 どういうわけか私は実装できません-"ColMax(:Data、Group by {ID、Sub-set})"このようなもの。
サマリーテーブルからメインテーブルの列式に値を呼び出すことができます。これは、元のソリューションよりも優れています。
ありがとう。
Re:数式またはForループのグループ化された列に基づいて集計値(平均/最大など)を呼び出す方法私はうまくいくように見える式を思いついた.........

発生数との不一致があります-修正されました。行32では、.13-08の結果が.05になり、.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;