[QGIS-it-user] comportamento strano di alcune espressioni di QGIS 3.x

Ho notato un comportamente strano su questa espressione:

array_to_string(
array_filter(map_avals(attributes()), @element NOT IN (“fid”))
)

in particolare nella funzione ‘array_filter’, che NON filtra in modo corretto se nella tabella attributi ci fossero due campi (con nomi diversi) ma con identici valori, sotto un esempio:

image.png

in questa espressione: array_filter(map_avals(attributes()), @element NOT IN (“fid”)) mi aspetterei un array con tutti i valori, per ogni riga, tranne per il campo “fid”;

esempio (vedi screen),
riga 1:
nel campo ‘lista’ non c’è traccia né del campo ‘fid’ né del campo ‘id’ (comportamente errato);
riga 2:
nel campo ‘lista’ non c’è traccia, come mi aspetterei, solo del campo ‘fid’;

noto che questo comportamento si presenta solo se ‘fid’ e ‘id’ hanno stessi valori; per dimostrare quanto appena detto, ho modificato i valori del campo ‘id’, ecco il risultato:

image.png

l’espressione funziona correttamente.

secondo voi faccio un uso errato della funzione array_filter?
oppure segnalo anomalia nel repo di QGIS?

OSGeo4W v2 Network Installer, Win 10 Pro
test effettuati su: QGIS 3.16.14 e 3.22.1

allego file:
https://gist.githubusercontent.com/pigreco/14af2c16a75668c114e1e8754e8a0102/raw/2b2a12038c0bc1735af4963b0faaa2e46791a529/testone.csv

···

Ing. Salvatore Fiandaca
mobile.:+39 327.493.8955
m: pigrecoinfinito@gmail.com
C.F.: FNDSVT71E29Z103G
P.IVA: 06597870820
membro QGIS Italia - http://qgis.it/
socio GFOSS.it - http://gfoss.it/
blog:**** https://pigrecoinfinito.com/
FB: Co-admin - https://www.facebook.com/qgis.it/****
TW: ****https://twitter.com/totofiandaca

43°51’0.54"N 10°34’27.62"E - EPSG:4326

“Se la conoscenza deve essere aperta a tutti,
perchè mai limitarne l’accesso?”
R. Stallman

Questo documento, allegati inclusi, contiene informazioni di proprietà di FIANDACA SALVATORE e deve essere utilizzato esclusivamente dal destinatario in relazione alle finalità per le quali è stato ricevuto. E’ vietata qualsiasi forma di riproduzione o divulgazione senza l’esplicito consenso di FIANDACA SALVATORE. Qualora fosse stato ricevuto per errore si prega di informare tempestivamente il mittente e distruggere la copia in proprio possesso.

Il 29/11/2021 11:37, Totò Fiandaca ha scritto:

Ho notato un comportamente strano su questa espressione:

array_to_string(
array_filter(map_avals(attributes()), @element NOT IN ("fid"))
)

in particolare nella funzione 'array_filter', che NON filtra in modo corretto se nella tabella attributi ci fossero due campi (con nomi diversi) ma con identici valori, sotto un esempio:

image.png
in questa espressione: array_filter(map_avals(attributes()), @element NOT IN ("fid")) mi aspetterei un array con tutti i valori, per ogni riga, tranne per il campo "fid";

a prima vista mi pare che il filtro faccia quello che gli chiedi: ti restituisce il valore del campo (@element) ciclato su tutti i campi (ovviamente tranne fid che è il termine di paragone) se questo non è uguale al valore che c'è in fid. i valori 1 e 3 gialli sono quelli del campo id. negli altri casi il campo id ha valore uguale a fid, quindi li scarta.
non gli stai dicendo: dammi tutti i campi tranne fid.
mg

--
Marco Guiducci - 055 4383194
SITA - Sistema informativo territoriale e ambientale
Regione Toscana - Via di Novoli 26 - 50127 Firenze

giusta osservazione, grazie Marco.

per eliminare il campo dalla lista occorre utilizzare la funzione ‘map_delete’, quindi l’espressione da utilizzare è:

array_to_string(map_avals(map_delete(attributes(),‘fid’)))

grazie

···

Ing. Salvatore Fiandaca
mobile.:+39 327.493.8955
m: pigrecoinfinito@gmail.com
C.F.: FNDSVT71E29Z103G
P.IVA: 06597870820
membro QGIS Italia - http://qgis.it/
socio GFOSS.it - http://gfoss.it/
blog:**** https://pigrecoinfinito.com/
FB: Co-admin - https://www.facebook.com/qgis.it/****
TW: ****https://twitter.com/totofiandaca

43°51’0.54"N 10°34’27.62"E - EPSG:4326

“Se la conoscenza deve essere aperta a tutti,
perchè mai limitarne l’accesso?”
R. Stallman

Questo documento, allegati inclusi, contiene informazioni di proprietà di FIANDACA SALVATORE e deve essere utilizzato esclusivamente dal destinatario in relazione alle finalità per le quali è stato ricevuto. E’ vietata qualsiasi forma di riproduzione o divulgazione senza l’esplicito consenso di FIANDACA SALVATORE. Qualora fosse stato ricevuto per errore si prega di informare tempestivamente il mittente e distruggere la copia in proprio possesso.