Vai al contenuto

Calcolo incrementi giornalieri di un attributo

Supponiamo di avere un campo (tot_att_pos) popolato con valori aggregati giornalieri, per esempio il numero totale di contagiati da CoronaVirus, ecco un tabella di esempio:

data tot_att_pos delta
2020-03-09 7985 1598
2020-03-08 6387 1326
2020-03-07 5061 1145
2020-03-06 3916 620
2020-03-05 3296 590
2020-03-04 2706 443
2020-03-03 2263 428
2020-03-02 1835 258
2020-03-01 1577 528
2020-02-29 1049 228
2020-02-28 821 233
2020-02-27 588 203
2020-02-26 385 74
2020-02-25 311 90
2020-02-24 221 221

come calcolare la colonna delta, popolata con gli incrementi giornalieri?

Per esempio, negli ultimi due giorni il campo tot_att_pos è passato da 6387 a 7985, il delta è 1598.

L'espressione usata per popolare il campo delta è la seguente:

with_variable( 'my_exp', 
                array_find(  
                array_agg( 
                expression:= "data" ,
                order_by:=  "data"),"data" ),
if( @my_exp = 0,  -- condizione
               (array_agg( 
                expression:= "tot_att_pos"  , 
                order_by:=  "data"  )[0]), -- se vero
                     ("tot_att_pos"  -
                     (array_agg( 
                      expression:=  "tot_att_pos"  , 
                      order_by:=  "data"  )[@my_exp-1])) -- altrimenti
                )
              )

In termini umani significa:

Se il primo elemento dell'array è 0 associa il primo elemento dell'array dell'attributo tot_att_pos ordinato per data, altrimenti fai la differenza tra il valore corrente e il valore precedente.

questo ci permette di creare questi due grafici:


Funzioni e variabili utilizzate: