Come richiamare un valore aggregato (media/Max ecc.) in base a una colonna raggruppata in Formula o in For-LoopCiao a tutti,
Sto cercando di scoprire il numero di volte in cui è scattato l'allarme. Ho creato una colonna "Numero di occorrenze" basata su una logica semplice: se Dati in Riga () > Riga () + 1, trigger reimpostato. Ma sto ricevendo molti falsi allarmi, come si vede nell'immagine. Il nuovo accesso che voglio implementare -
Se (
(Row() - Row()+1) >= Abs(Max(Data))/10, Resetta il trigger, altrimenti vivilo così com'è
)
Qualcosa del genere.
Sono in grado di farlo in un modo un po' log, come creare una tabella di riepilogo e quindi aggiungere una colonna dalla tabella di riepilogo e quindi confrontare ciascun valore con una nuova colonna. Funziona bene ma rallenta il mio script.
C'è un modo migliore per implementarlo all'interno della formula o nel ciclo For?
Qualsiasi aiuto.
Grazie.

ScriptingRe: Come richiamare un valore aggregato (media/Max ecc.) in base a una colonna raggruppata in Formula o in For-LoopÈ possibile utilizzare la funzione Col Max() per ottenere il valore massimo all'interno dei gruppi e Lag() per confrontare le righe nella colonna.
Potresti fornire datatable con risultati "corretti" per rendere un po' più semplice la comprensione della logica alla base degli allarmi? O vuoi solo controllare se il valore attuale dei dati è maggiore del valore precedente all'interno del gruppo (ID e sottoinsieme)?
Re: Come richiamare un valore aggregato (media/Max ecc.) in base a una colonna raggruppata in Formula o in For-LoopCiao @jthi
Ho aggiunto una colonna - "N. di occorrenza - Corretto".Che mostra i risultati corretti (desiderati).

Re: Come richiamare un valore aggregato (media/Max ecc.) in base a una colonna raggruppata in Formula o in For-LoopPuoi calcolare il 10% Max direttamente con la formula:
Col Max(:Data, :ID, :"Sub-set"n)*0.1
Non sono ancora sicuro di come dovrebbero essere contate le occorrenze, perché sembra non ripristinarsi mai, ma potrebbe tornare indietro di 1 valore. Per controllare i valori della colonna dei dati dei valori che si trovano dopo la "riga corrente" è possibile utilizzare Lag(:Data, - 1)

La regola che hai sarebbe simile a questa come una formula:
If(:Data - Lag(:Data, -1) >= Abs(Col Max(:Data, :ID, :"Sub-set"n)) / 10,
1,
0
)
Re: Come richiamare un valore aggregato (media/Max ecc.) in base a una colonna raggruppata in Formula o in For-LoopNon funziona. In qualche modo non sono in grado di implementare - "Col Max(:Data , Group by{ID, Sub-set})" qualcosa del genere.
Sono in grado di chiamare il valore dalla tabella di riepilogo alla formula della colonna della tabella principale, è meglio della mia soluzione originale.
Grazie.
Re: Come richiamare un valore aggregato (media/Max ecc.) in base a una colonna raggruppata in Formula o in For-LoopHo trovato una formula che sembra funzionare.........

C'è una discrepanza con il tuo numero di occorrenza - corretto.Nella riga 32, credo che 0,13 - 08 risulti in 0,05 che è maggiore di 0,034, il che dovrebbe aumentare il numero di occorrenze.

Anche l'implementazione di un'occorrenza aggiuntiva non viene applicata fino alla riga successiva al rilevamento.Pertanto, l'utilizzo della tua formula deve avere un piccolo trucco, per non applicare la modifica fino a quando non viene elaborata la riga successiva.Di seguito è la mia formula che ho usato per la colonna "Calcolo di Jim"
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;