#1 Wed 11 July 2018 18:44
- AHAquilex
- Participant occasionnel
- Date d'inscription: 10 Jul 2018
- Messages: 17
QGIS Agrégation: majority et minimum sur des strings ?
Bonjour,
Je débute encore avec Qgis (je travaille sur Qgis 3.0) et lors de mes recherches je me heurte au problème suivant :
Contexte :
Je possède une couche de points possédant plusieurs champs :
* "ABF" : champ de chaînes de caractères, il s'agit de la date de l'observation
* "ACB" : champ d'entiers, il s'agit du diamètre du tuyau à l'endroit de l'observation
* "ACD" : champ de chaînes de caractères, il s'agit du matériau du tuyau à l'endroit de l'observation
* "ACN" : champ de chaînes de caractères, il s'agit de la date de pose du tuyau à l'endroit de l'observation
* "id_tronço" : champ de chaînes de caractères, il s'agit de l'identifiant du tuyau à l'endroit de l'observation
Je cherche à agréger ces points par tronçon/tuyau et date d'observation. J'utilise donc l'outil agrégation. Dans le cadre "grouper par expression" j'utilise l'expression suivante : array ("id_tronço","ABF")
Pour chacun des champs, je choisis comment les agréger :
ABF : first_value (la première date rencontrée)
ACB : majority (la valeur apparaissant le plus grand nombre de fois)
ACD : majority (la valeur apparaissant le plus grand nombre de fois)
ACN : minimum (la date la plus ancienne)
id_tronço : first_value (le premier id rencontré)
problème(s) rencontré(s) :
Dans un premier temps voilà la réponse de Qgis :
Traceback (most recent call last):
File "C:/PROGRA~1/QGIS3~1.0/apps/qgis/./python/pluginsprocessingalgsqgisAggregate.py", line 244, in processAlgorithm
attrs.append(self.evaluateExpression(fields_expr, expr_context))
File "C:/PROGRA~1/QGIS3~1.0/apps/qgis/./python/pluginsprocessingalgsqgisAggregate.py", line 275, in evaluateExpression
.format(expr.expression(), expr.evalErrorString()))
_core.QgsProcessingException: Evaluation error in expression "majority("ACD", ARRAY ("id_tronço","ABF")
)": Impossible de calculer l'aggrégat pour: ACD
Ma couche n'est donc pas créée. Je comprends alors que majority ne fonctionne pas sur des string.
Je mets concatenate à la place, en attendant de voir s'il n'y pas d'autres problèmes.
Ma colonne ACD se concatène parfaitement mais là c'est la colonne ACN qui reste vide. Je suppose que c'est parce que ACN est un champ de chaîne de caractères.
mes questions :
1) Comment puis-je faire pour que Qgis puisse trouver la valeur majoritaire de ACD pour chaque nouvelle entité ? Sachant que ACD est un champ de string
2) Comment faire pour que Qgis me retourne la valeur minimum de ACN (dates sous format string) ?
Merci d'avance à tous ceux qui auraient une/des solution(s) ou une/des piste(s)
Hors ligne
#2 Thu 12 July 2018 11:20
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3947
Re: QGIS Agrégation: majority et minimum sur des strings ?
Bonjour,
Ma couche n'est donc pas créée. Je comprends alors que majority ne fonctionne pas sur des string.
Effectivement, cette fonction ne semble être dispo que pour du numérique. Requête déposée à https://issues.qgis.org/issues/19402; on verra si c'est corrigé ou s'il y a une raison qui justifie cette limitation
1) Comment puis-je faire pour que Qgis puisse trouver la valeur majoritaire de ACD pour chaque nouvelle entité ? Sachant que ACD est un champ de string
Peut-être en créant un champ numérique intermédiaire où chaque type d'ACD correspondra à un nombre et sur lequel l'agrégat sera ensuite calculé.
2) Comment faire pour que Qgis me retourne la valeur minimum de ACN (dates sous format string) ?
minimum marche, il me semble.
Hors ligne
#3 Thu 12 July 2018 14:16
- dominique.lys
- Participant assidu
- Date d'inscription: 5 Oct 2006
- Messages: 473
- Site web
Re: QGIS Agrégation: majority et minimum sur des strings ?
Merci beaucoup SANTANNA pour le rapport de bug ! Il me semble également que cette limitation est anormal.
Une solution en attendant pourrait être de passer par du SQL (mais de mémoire c'est un peu tordu à reproduire car la clause HAVING max(count(*)) ne fonctionne pas avec SQlite)
Hors ligne
#4 Fri 13 July 2018 16:39
- AHAquilex
- Participant occasionnel
- Date d'inscription: 10 Jul 2018
- Messages: 17
Re: QGIS Agrégation: majority et minimum sur des strings ?
Merci SANTANNA pour ta réponse, c'est dommage de devoir truander en passant par un nouveau champ, mais au moins ça me permettra de continuer.
Pour les dates, c'est peut-être à cause de valeurs nulles, je vérifie ça.
Merci aussi dominique, mais n'étant pas du tout familiarisé avec SQL, je préfère la petite manip précédente. Néanmoins si ça peut aider d'autres personnes, n'hésite pas à préciser la méthode !
Hors ligne