[QGIS-it-user] Stile basato sulle relazioni 1-n
Andrea Giudiceandrea
andreaerdna a libero.it
Mer 10 Mar 2021 07:54:52 PST
Alberto Poggi wrote
> qui sotto la funzione che ho provato
>
> if(relation_aggregate(relation:='erogazione',aggregate:='range',expression:="consumo")<-1000,
> 'red','ciano')
Ciao Alberto,
quello che mi viene in mente è di usare l'aggregatore array_agg che genera
una lista dei valori di consumo di acqua, e ordinarli in base al campo
numerico con l'anno a cui si riferisce il consumo
relation_aggregate(relation:='erogazione',aggregate:='array_agg',expression:="consumo",order_by:="anno")
questo genera la lista [1000, 2500] se nel 2018 il consumo è stato 1000 e
nel 2019 è stato 2500 e se ad ogni feature del layer "genitore" sono
associati solo due record della tabella con i consumi
a questo punto si possono ottenere il primo valore e il secondo valore della
lista con relation_aggregate(...)[0] e relation_aggregate(...)[1]
per evitare di far calcolare inutilmente due volte la lista si può usare la
funzione with_variable, che permette di assegnare il risultato di un
espressione ad una variabile (che quindi conterrà la lista di valori) e poi
usare la variabile per calcolare la differenza e da usare nella condizione
if
per esempio così:
with_variable(
'consumi',
relation_aggregate(relation:='erogazione',aggregate:='array_agg',expression:="consumo",order_by:="anno"),
if((@consumi[0]- a consumi[1])<-1000,'red','cyan'))
Potrebbe esserci un'espressione più elegante o concisa da usare...
A presto.
Andrea
--
Sent from: http://osgeo-org.1560.x6.nabble.com/QGIS-Italian-User-f5250612.html
Maggiori informazioni sulla lista
QGIS-it-user