10.6. Timegraphs

10.6.1. Espressioni per le serie calcolate

All'interno dei timegraph le serie "calcolate" sono delle serie calcolate on-demand utilizzando i valori delle altre serie definite nello stesso timegraph.

Ipotizziamo di avere un datagroup cosi' definito:

datagroup prova

        datasource ds1
        exit

        datasource ds2
        exit

        timegraph grafico

                serie serie1
                        var-value ds1
                        legend "Prima serie"
                        render-order 0
                exit

                serie serie2
                        var-value ds2
                        legend "Seconda serie"
                        render-order 0
                exit

                serie calcolata
                        computed-value  serie1 + serie2
                        legend "Serie calcolata"
                        render-order 1
                exit

                serie calcolata2
                        computed-value  calcolata * 2
                        legend "Serie calcolata 2"
                        render-order 2
                exit
        exit

exit

In questo datagroup e' definito un timegraph chiamato "grafico" che grafica 3 serie: serie1, serie2 e calcolata.

I valori delle prime due (serie1 e serie2) vengono estratti da dati reali, piu' precisamente dai due datasource ds1 e ds2 definiti all'interno del datagroup.

I valori della serie "calcolata" vengono calcolati prendendo sommando i valori corrispondenti delle altre due serie gia' definite.

Esempio:

            t0    t1    t2    t3    t4

serie1       1     2     3     4     5

serie2      25    -3    45    34    23

calcolata   26    -1    48    38    25

10.6.1.1. Operatori ammessi

L'espressione deve essere un'espressione matematica valida. Esempio:

1 + 2 / 3 * abs(-3)

Gli operatiri matematici disponibili sono:

Operatore

Descrizione

a + b

a - b

a * b

a / b

a % b

a ** b

All'interno dell'espressione possono essere usate le seguenti funzioni:

funzione

Descrizione

abs(x)

divmod(x)

int(x)

pow(x,e)

float(x)

long(x)

max(x)

min(x)

log(n,e)

sqrt(x)

sin(x)

cos(x)

radians(x)

Funzioni speciali:

funzione

Descrizione

iftrue(c,t,e)

If "c" is "true" returns "t" else returns "e"

ifnull(x,d)

10.6.1.2. Variabili disponibili

All'interno delle espressione di una serie possono essere sempre usate come variabili:

  • I nomi delle serie calcolate subito prima (in base al parametro "render-order"), che definiscono il parametro "var-value".

  • Simboli / costanti aggiuntive calcolate al tempo dell'elaborazione.

Questi sono i simboli/costanti disponibili:

funzione

Descrizione

NONE o None

Costante nulla

__ts_start__

timestamp di inizio serie (x0)

__ts_end__

timestamp di fine serie (xn)

__step__

delta temporale tra i valori della serie

__t__

timestamp corrente all'interno della serie

__i__

indice dell'elemento calcolato nella serie

Esempio:

datagroup test
        ...
        datasource ds1                 <--+
        exit                              | referenzia "ds1"
        ...                               |
        timegraph grafico1                |
                serie v                   |           <--+
                        var-value ds1  ---+              | utilizza "v"
                exit                                     |
                serie x                                  |
                        computed-value v * __i__ * 3  ---+          <--+
                exit                                                   | utilizza x
                serie y                                                |
                        computed-value x + 10                       ---+
                exit
        exit
exit

10.6.1.3. Valori nulli nelle serie

Se all'interno di una espressione viene usata una serie che contiene i valori nulli, il singolo valore della serie viene considerato equivalente alla costante "NONE".

Il valore "NONE" e' un valore speciale e quando viene usato all'interno di una espressione aritmetica provoca come risultato sempre "NONE".

L'unico modo per evitare questo comportamento e' usare la funzione isnull().

Esempio:

datagroup prova
        ...
        datasource ds1
                ...
        exit
        ...
        timegraph grafico1
                serie x
                        var-value ds1
                exit
                serie y1
                        computed-value "x * 3"
                exit

                serie y2
                        computed-value "ifnull(x, 0) * 3"
                exit
        exit
        ...
exit

10.6.1.4. Ordine di valutazione delle serie

Quando vengono calcolate le serie l'ordine di valutazione e' il seguente:
  • estrazione dei valori per tutte le serie "reali" (con parametro 'var-value')

  • per ogni serie con parametro "computed-value" calcolo valori in base alle serie "reali" e "calcolte" processate al giro precedente in ordine di valutazione.