banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Pour sécuriser votre compte sur les forums du GeoRezo, nous demandons de changer votre mot de passe.

Vous allez recevoir un message pour effectuer ce changement de mot de passe.

Merci de bien respecter les règles préconisées.

#1 Tue 01 March 2016 11:48

SamuelG
Juste Inscrit !
Date d'inscription: 6 Jan 2011
Messages: 6

QGIS 2.2 : Formule Calculatrice de champ : si colonne 1 >0, alors...

Objet: Formule Calculatrice de champ : si colonne 1 >0, alors colonne 20 text

Bonjour,

QGIS 2.2.0 Valmeira

travaillant sur une couche de données avec vingt types de surface, le type est renseigné de sa dimension dans un champ propre que lorsque que le polygone relève de ce type de surface. Au final, ma table se présente avec 20 champs pour autant de types de surfaces, mais à chaque ligne, un seul champ est renseigné.
Je souhaiterais créer un 21e champ, pour dire : "si le champ n°1 est supérieur à 0, alors le champ n°21 est intitulé du nom du type de la surface du champ n°1"... mais si le champ n°1 est égal à 0, alors j'interroge le champ n°2... ainsi de suite sur les 20 champs. Cette formule me serait bien utile pour la reproduire sur plus de 20 000 lignes.

Je suis certains que la calculatrice de champs doit permettre ce genre de formule, ou quelque chose de plus astucieux. Quelqu'un aurait-il une idée ?
Merci d'avance pour vos conseils

Samuel

Hors ligne

 

#2 Tue 01 March 2016 12:39

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3824

Re: QGIS 2.2 : Formule Calculatrice de champ : si colonne 1 >0, alors...

Bonjour,
En mode bourrin, des "case when" devrait, je pense, faire l'affaire

Code:

CASE
WHEN "champ1" >0 THEN 'nomduchamp1'
WHEN "champ2" >0 THEN 'nomduchamp2'
...
...
END

En plus astucieux, écrire une fonction Python qui parcourt la ligne (mais pas dispo en 2.2 je crois à part avec le plugin scriptrunner).

Par contre, je vois que tu es sous Valmiera; ça fait un moment que c'est sorti, on en est à la 2.14 soit 6 versions de différence. S'il n'y a rien qui t'en empêche, je te conseillerais de passer à un eplus récente, qui te garantit l'accès aux nouvelles fonctions mais aussi à l'aide de la communauté (on est nombreux à ne plus utiliser cette version et ne plus savoir ce qu'elle fait ou pas)

Dernière modification par SANTANNA (Tue 01 March 2016 14:42)

Hors ligne

 

#3 Tue 01 March 2016 12:45

Theos2000
Participant assidu
Date d'inscription: 15 Jun 2015
Messages: 221

Re: QGIS 2.2 : Formule Calculatrice de champ : si colonne 1 >0, alors...

Bonjour,

Dans la foulée il me semble que le sujet a été traité ici aussi !

http://georezo.net/forum/viewtopic.php?id=95213

Hors ligne

 

#4 Tue 01 March 2016 13:54

SamuelG
Juste Inscrit !
Date d'inscription: 6 Jan 2011
Messages: 6

Re: QGIS 2.2 : Formule Calculatrice de champ : si colonne 1 >0, alors...

Merci pour ces deux retours

J'ai testé la formule 'CASE WHEN THEN END"... elle fonctionne sur le principe, mais une seule valeur s'affiche par défaut - celle affectée au champ 1.

Petite précision, mes données en champs 1 à 20 sont des valeurs (propriétés du champ : type "double", nom "real"). J'ai donc testé (sans résultat) :
- CASE WHEN "champ1" > 0 THEN "champ1"
- CASE WHEN "champ1" > 0.1 THEN "champ1"

Solution de repli, je vais traiter champ après champ pour leur affecter une valeur texte au lieu d'une quantité (si > 0 = texte, sinon 'null'). Je vais concaténer ensuite les 20 colonnes dans une 21e, avec normalement un seul texte qui apparaîtra... normalement wink

Hors ligne

 

#5 Tue 01 March 2016 14:25

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3824

Re: QGIS 2.2 : Formule Calculatrice de champ : si colonne 1 >0, alors...

Quand il n'y a pas de valeur saisie dans le champ 1, qu'est-ce qui y est renseigné?

Hors ligne

 

#6 Tue 01 March 2016 14:32

SamuelG
Juste Inscrit !
Date d'inscription: 6 Jan 2011
Messages: 6

Re: QGIS 2.2 : Formule Calculatrice de champ : si colonne 1 >0, alors...

Les champs 0 à 20 semblent être un calcul automatique de surface. Donc la 'non-valeur' correspond à 0.00000

Hors ligne

 

#7 Tue 01 March 2016 14:41

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3824

Re: QGIS 2.2 : Formule Calculatrice de champ : si colonne 1 >0, alors...

Donc il n'y a pas de champ nulle. La valeur renseignée si non concernée par le type de surface, est 0.0000. Et avec "champ">0.1 ça ne marche pas?

PS: en relisant tes messages, je comprends que ce n'est pas la valeur du champ 1 que tu veux récupérer mais le nom du champ. Ma formule n'est pas bonne. Je la réadapte avec cette info (pour les futurs lecteurs).

Hors ligne

 

#8 Tue 01 March 2016 14:51

SamuelG
Juste Inscrit !
Date d'inscription: 6 Jan 2011
Messages: 6

Re: QGIS 2.2 : Formule Calculatrice de champ : si colonne 1 >0, alors...

J'ai testé avec 0.1 (message de 13h54)... mais ça ne marche pas

Pour être précis, je veux affecter dans le 21e champ une valeur au format texte à condition que ce champ 1 a une surface supérieure à 0.00000. Si ce champ 1 est égal à 0.00000 alors j'interroge le champ 2, ... et ainsi de suite sur 20 champs. L'objectif est de trouver dans le 21e champ une valeur texte.

Les intitulés de colonne sur les champs de 0 à 20 s'intitulent "surf_1" à "surf_20", alors que je veux leur donner des noms plus explicites sur le type de surface. J'espère profiter de cette séquence pour réduire de 20 intitulés à 3.

Hors ligne

 

#9 Tue 01 March 2016 16:25

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3824

Re: QGIS 2.2 : Formule Calculatrice de champ : si colonne 1 >0, alors...

SamuelG a écrit:

J'ai testé avec 0.1 (message de 13h54)... mais ça ne marche pas


Oui, j'avais bien lu... je m'étonnais que cela ne fonctionne pas. Peut-on avoir la copie conforme et complète de l'expression saisie?

Hors ligne

 

#10 Tue 01 March 2016 16:45

SamuelG
Juste Inscrit !
Date d'inscription: 6 Jan 2011
Messages: 6

Re: QGIS 2.2 : Formule Calculatrice de champ : si colonne 1 >0, alors...

CASE
WHEN "surf_1" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_2" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_3" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_4" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_5" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_6" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_7" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_8" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_9" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_10" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_11" > 0.000000000000000
THEN 'Aucune culture'
WHEN "surf_12" > 0.000000000000000
THEN 'Aucune culture'
WHEN "surf_13" > 0.000000000000000
THEN 'Aucune culture'
WHEN "surf_14" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_15" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_16" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_17" > 0.000000000000000
THEN 'Grandes cultures'
WHEN "surf_18" > 0.000000000000000
THEN 'Prairies'
WHEN "surf_19" > 0.000000000000000
THEN 'Prairies'
WHEN "surf_20" > 0.000000000000000
THEN 'Autres cultures'
WHEN "surf_21" > 0.000000000000000
THEN 'Autres cultures'
WHEN "surf_22" > 0.000000000000000
THEN 'Autres cultures'
WHEN "surf_23" > 0.000000000000000
THEN 'Autres cultures'
WHEN "surf_24" > 0.000000000000000
THEN 'Autres cultures'
WHEN "surf_25" > 0.000000000000000
THEN 'Autres cultures'
WHEN "surf_26" > 0.000000000000000
THEN 'Autres cultures'
WHEN "surf_27" > 0.000000000000000
THEN 'Autres cultures'
WHEN "surf_28" > 0.000000000000000
THEN 'Autres cultures'
END

Hors ligne

 

#11 Wed 02 March 2016 15:48

SamuelG
Juste Inscrit !
Date d'inscription: 6 Jan 2011
Messages: 6

Re: QGIS 2.2 : Formule Calculatrice de champ : si colonne 1 >0, alors...

Pour info : j'ai trouvé ma solution en sortant de de qGIS. Retour à Excel et à son mode de traitement des formules plus explicite pour moi, puis intégration de la nouvelle table dans ma couche initiale avec une jointure. Le dé-tour est joué :-)
Merci tout de même pour l'aide. Samuel

Hors ligne

 

Pied de page des forums

Powered by FluxBB