Ciao Salvatore,
mi era sfuggito il tuo messaggio di 5 giorni fa.
Effettivamente è una questione di contesto in cui si utilizzano le espressioni.
L’espressione che avevi indicato inizialmente nel tuo messaggio e poi nell’issue report in realtà funziona correttamente nella decorazione Title Label anche con QGIS 3.34 e QGIS 3.40.
L’altra espressione, quella che contiene la funzione is_selected()
senza parametri come filtro all’interno della funzione aggregate
, indicata in un tuo commento all’issue report, invece non da i risultati attesi nella decorazione Title Label con QGIS 3.34 e QGIS 3.40, ma ciò avveniva anche con QGIS 3.22.
aggregate(
layer:='World Map',
aggregate:='sum',
expression:= "fid" ,
filter:=is_selected())
Viceversa tale espressione da i risultati attesi, per esempio, nel calcolatore di campi, quando eseguita per il layer World Map, ma non se eseguita per un altro layer.
Questo perché il calcolatore di campi viene eseguito sempre per un determinato layer e quindi può applicare all’espressione il “contesto” relativo a tale layer e quindi la funzione is_selected()
- senza parametri - evidentemente può “sapere” a quale layer far riferimento.
Se tale espressione viene eseguita nel calcolatore di campi per il layer World Map, is_selected()
considererà le feature selezionate in tale layer. Se tale espressione viene eseguita nel calcolatore di campi per un altro layer, essa restituirà un risultato diverso e probabilmente non atteso in quanto aggregate
cercherà di aggregare le feature del layer World Map filtrandole in base alle feature selezionate nell’altro layer in base al loro id.
Invece nel Title Label non c’è un particolare layer a cui poter fare riferimento in quanto il Title Label è collegato alla mappa e non ad un particolare layer. Quindi in questo caso la funzione is_selected()
usata senza parametri non “saprebbe” a quale layer far riferimento.
Ci sarebbe da chiedersi perché is_selected()
usata senza parametri all’interno della funzione aggregate
, in cui un layer viene già specificato, non possa far automaticamente riferimento a tale layer.
Per esempio, nel calcolatore di campi, dovrebbe far riferimento al layer al quale viene applicato il calcolatore di campi, come avviene adesso, o al layer indicato in aggregate
?
Non sono esperto di espressioni e quindi non so se il comportamento di is_selected()
usata all’interno di aggregate
sia diverso da quello di altre funzioni simili. In questo caso sarebbe sicuramente un bug.
Infatti avevo lasciato aperto il tuo issue report anche se avevo indicato il modo per scrivere l’espressione affinché essa restituisse il risultato da te atteso, cioè utilizzando i parametri appositi di is_selected e quindi rendendo esplicito il layer a cui dovesse far riferimento
aggregate(
layer:='World Map',
aggregate:='sum',
expression:= "fid" ,
filter:=is_selected('World Map', @feature))
in quanto non ero e non sono sicuro che il comportamento di is_selected()
sia corretto / voluto / conforme al funzionamento di aggregate
e delle funzioni all’interno di aggregate
, oppure no e quindi volevo che sviluppatori esperti di espressioni potessero valutare la situazione.