05 – KPI live

Tag specifici

Oltre a @nomeTag e @nomeMetadato sono disponibili i seguenti valori per poter essere utilizzati nelle formule.

@@PreviousValue(@nomeTag)

Indica il valore precedente del tag.

Esempio:

@temperatura – @@PreviousValue(@temperatura);

– 2022-12-31 09:00:00: temperatura 19.6°
– 2022-12-31 09:05:00: temperatura 20.1°
Quando scatta il calcolo del KPI alle 9:05, @temperatura vale 20.1 e @@PreviousValue(@temperatura) vale 19.6, e quindi il KPI vale 0.5.

NOTA: se al momento del calcolo del KPI, il tag non è stato aggiornato dal campo, il @@PreviousValue non viene aggiornato rispetto al calcolo precedente. A tal proposito vedi anche @@TagUpdated(@nomeTag), per gestire correttamente questi casi.

Esempio:

(@t1 – @@PreviousValue(@t1)) + (@t2 – @@PreviousValue(@t2);

I dati che arrivano dal campo sono i seguenti:

  • 2022-12-31 09:00:00: t1 = 10, t2 = 11
  • 2022-12-31 09:05:00: t1 = 12, t2 = 14
    Il KPI viene calcolato in questo modo:
    (12 – 10) + (14 – 11)
  • 2022-12-31 09:05:00: t1 = 15, t2 non è arrivato
    Il KPI viene calcolato in questo modo:
    (15 – 12) + (14 – 11)
    Si nota quindi che il @@PreviousValue di @t2 è rimasto a 11.

@@PreviousTS_UTC(@nomeTag)
@@PreviousTS_local(@nomeTag)

Rappresentano il timestamp relativo al datapoint precedente del tag, rispettivamente in UTC e nel fuso orario dell’impianto.
Esempio con impianto con fuso orario in ora italiana:
– 2022-12-31 09:00:00 ora italiana: temperatura 19.6°
– 2022-12-31 09:05:00 ora italiana: temperatura 20.1°
Quando scatta il calcolo delle 9:05:
@@PreviousTS_UTC vale ‘2022-12-31 08:00:00’
@@PreviousTS_local vale ‘2022-12-31 09:00:00’

@@TagUpdated(@nomeTag)

Indica se, rispetto al calcolo precedente del KPI, per il tag @nomeTag è arrivato un nuovo campione o meno.
ATTENZIONE: la funzione non entra nel merito dell’eventuale cambio di valore; se è arrivato un  nuovo campione con valore uguale a quello precedente, @@TagUpdated(@nomeTag) varrà comunque 1.

@@TagUpdated(@nomeTag) può quindi valere:

  • 0: per il tag non sono arrivati nuovi campioni, rispetto al calcolo KPI precedente.
  • 1: per il tag è arrivato un nuovo campione, rispetto al calcolo KPI precedente.

Esempio.
Ho due portate che sono sicuro che, in condizioni normali cambiano continuamente di valore; se due rilevazioni consecutive sono uguali, significa che c’è qualcosa che non va, e quindi devo inviare un allarme.

Devo però considerare che è possibile che in determinati momenti, solo una delle due portate venga aggiornata dal campo; in questo caso la seconda portata ovviamente non cambia di valore, ma devo non devo considerarlo un allarme.
Calcolo quindi un KPI digitale in questo modo:

/*
NOTA: ho definito un allarme Rilheva, legato a questo KPI, che scatta quando il KPI assume il valore 1, e che invia una mail, un SMS e una chiamata voce ai reperibili.
*/
CASE
    WHEN @@TagUpdated(@portata1) = 1
        AND (@portata1 – @@PreviousValue(@portata1) = 0)
        THEN 1 – alert!!!
    WHEN @@TagUpdated(@portata2) = 1
        AND (@portata2 – @@PreviousValue(@portata2) = 0)
        THEN 1 – alert!!!
    ELSE 0 – everything ok
END;

Direttive

Sono disponibili le direttive @@SKIP_WHEN_NULL e @@RECALCULATE_FROM (vedi il paragrafo riguardante le direttive comuni tra KPI Live e Periodici).

Funzioni custom

Nei KPI live è possibile utilizzare le seguenti funzioni custom realizzate da Rilheva, oltre ovviamente a quelle che fanno parte del linguaggio Transact SQL.

stats.ema(arg0, α)

Media mobile esponenziale.
Gli argomenti sono:

  • arg0: può essere una semplice variabile, o anche una formula direttamente calcolabile in Transact SQL
  • α: fattore di decadimento (smoothing factor). Più è alto il fattore di decadimento, meno peso viene dato ai dati più vecchi.

Esempio:

stats.ema(@temperatura – 32) × 5/9, 0.8)

Viene calcolata la media mobile della formula “@temperatura – 32) × 5/9” con un fattore di decadimento 0.8.

stats.slope(arg0, run_um)

Restituisce la pendenza tra il valore T-1 e il valore corrente, ovvero l’incremento/decremento assoluto per unità di misura nel tempo.
Gli argomenti sono:

  • arg0: può essere una semplice variabile, o anche una formula direttamente calcolabile in Transact SQL
  • run_um: unità di misura di tempo per calcolare la pendenza.
    Può valere: SECOND, MINUTE, HOUR, DAY

Esempio:

stats.slope(@temperatura, MINUTE)

– 2022-12-31 09:00:00: temperatura: 18.0
– 2022-12-31 09:05:00: temperatura: 20.5

Il KPI delle 9:05 calcola la pendenza al minuto rispetto al dato precedente. In questo caso la temperatura è aumentata di 2.5 in 5 minuti, e quindi il KPI vale 0.5.

Was this helpful?

0 / 0