[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