@Var è il nome generico della variabile utilizzata negli esempi.
Esempi di KPI semplici
Espressioni condizionali (CASE e IIF)
CASE @Var
WHEN 30 THEN 1
ELSE 0
END;
La stessa formula può essere scritta come:
IIF(@Var = 30, 1, 0);
Example 2:
CASE
WHEN @Var = 30 THEN 1
WHEN @Var = 60 THEN 2
WHEN @Var >= 90 THEN 3
ELSE 0
END;
Operatori logici AND e OR
CASE
WHEN (@Var1 = 1) OR (@Var2 = 50 AND @Var3 = 100) THEN 1
ELSE 0
END;
Espressioni condizionali annidate (CASE in un CASE)
CASE
WHEN @Var1 = 0 THEN 0
WHEN @Var1 < 10 THEN
CASE
WHEN @Var2 = 100 THEN 1000
ELSE 2000
END
ELSE
CASE
WHEN @Var2 = 200 THEN 2000
ELSE 4000
END
END;
Coefficiente di correlazione
@@CALCULATE_EVERY = 15 MINUTES;
@@DATA_COVERAGE = 1 HOUR;
hstats.cor(@Var1, @Var2);
Media
@@CALCULATE_EVERY=1 HOUR;
@@DATA_COVERAGE=1 HOUR;
hstats.avg(@Var);
@@CALCULATE_EVERY = 1 DAY;
@@DATA_COVERAGE = 1 DAY;
hstats.avg(IIF(@Status = 1, @Var, NULL);
Rapporto tra medie su periodi differenti
@@CALCULATE_EVERY = 1 WEEK;
@@DATA_COVERAGE = 2 DAYS;
@@DATA2_COVERAGE = 2 DAYS;
@@DATA2_TIMESHIFT = 1 WEEKS;
hstats.avgratio(@Var);
Pendenza
stats.slope(@Var, 1 HOUR);
Media mobile esponenziale
stats.ema(@Var,0.5);
OR
CASE
WHEN 1 IN (@Var1, @Var2, @Var3)
THEN 1
ELSE 0
END;
Calcolo su orari durante la giornata
Vengono effettuati dei calcoli diversi a seconda dell’orario della giornata in cui arriva il dato.
@@TIMESTAMP_POSITION = END;
@@CALCULATE_EVERY = 1 MINUTE;
CASE
WHEN @Var = 1 THEN
CASE
WHEN CAST(@@EndOfPeriod_local AS TIME) BETWEEN ’00:00:00′ AND ’07:30:00′ THEN 1
WHEN CAST(@@EndOfPeriod_local AS TIME) BETWEEN ’08:00:00′ AND ’16:30:00′ THEN 1
WHEN CAST(@@EndOfPeriod_local AS TIME) >= ’17:00:00′ THEN 1
ELSE 0
END
ELSE 0
END;
Commento: il KPI è valorizzato a 1 se ci troviamo tra mezzanotte e le 7:30, tra le 8:00 e le 16:30 e tra le 17:00 e mezzanotte, altrimenti viene valorizzato a 0.
Il fuso orario utilizzato è quello locale, ossia quello dell’impianto in cui è presente il KPI.
Calcolo media condizionale
L’obiettivo è quello di calcolare la media del tag @Var, solo quando il tag @Status vale 4.
NOTA: i valori a null vengono ignorati quando si calcolano funzioni aggregate, come ad esempio la media.
@@CALCULATE_EVERY = 1 DAY;
@@DATA_COVERAGE = 1 DAY;
hstats.avg(
CASE
WHEN @Status = 4 THEN @Var
ELSE NULL
END
);
Contatempo
Questa formula calcola il totale del tempo, in secondi, in cui la variabile @Var è rimasta a ON (valore 1).
@@CALCULATE_EVERY = 2 HOURS;
hstats.digitaltime_on(@Var);
Bitmask
CASE
WHEN @Var & 0x00 > 0 THEN 1
WHEN @Var & 0x01 > 0 THEN 2
ELSE 0
END;
Somma degli incrementi nel periodo
@@CALCULATE_EVERY = 1 DAY;
@@DATA_COVERAGE = 1 DAY;
@@SKIP_WHEN_NULL = 1;
hstats.sum_of_increments(@Var);
Contatore del numero di uscite/rientri soglia
Questa formula conta il numero di volte in cui il tag @Var ha sorpassato una determinata soglia (10 in questo esempio):
@@SKIP_WHEN_NULL = 1;
CASE
WHEN @@PreviousValue(@Var) < 10 AND @Var >= 10 THEN ISNULL(@@THIS, 0) + 1
ELSE NULL
END;
Questa formula conta invece il numero di volte in cui il tag @Var rientra sotto quella soglia:
@@SKIP_WHEN_NULL = 1;
CASE
WHEN @@PreviousValue(@tagCounter) >= 10 AND @tagCounter < 10 THEN ISNULL(@@THIS, 0) + 1
ELSE NULL
END;
Was this helpful?
0 / 0