Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

Bug dans l'utilisation des evaluations avec Exression Manager.

  • riqcles
  • riqcles's Avatar Topic Author
  • Offline
  • Elite Member
  • Elite Member
More
9 years 4 months ago #114150 by riqcles
J'ai ajouté le texte ci-dessous dans le questionnaire attaché en PJ.
(je l'ai épuré car il y avait près de 300 questions).

gestion des évaluations avec des valeurs pour chaque questions.
Somme de ces valeurs avec EM.
Le calcul est faussé.
Il faudra regarder le contenu des questions et le code source pour voir les calculs.

Obligatoire pour les tests :
Choisir l'affichage du questionnaire
Paramètres généraux - présentation et navigation - tout en un.

Voici ce qu'il faut faire :
Question 1 : Oui = 2 points, Non = 0 points. ==> choisir Oui.
Question 2 : Oui et Non = 0 points. Ne faire aucun choix dans l'immédiat.
Question 3 : Oui = 2 points, Non = 0 points. ==> choisir Oui.

Le score total est calculé par EM en fin de questionnaire.
Il est actuellement de 4.

1er test :
Remonter en haut du questionnaire.
Choisir Oui à la question 2.
Le score est maintenant de 31.
Explications :
Une variable calculTotal est initialisé à la valeur de 1 dans la dernière question (voir le code). Car si la variable à la valeur 0, celle ci est considéré comme du texte et est donc concaténé.

Normalement : somme = CalculTotal(=1) + Q1 (= 2) + Q2 (=0) + Q3(=2) -1 (dans la formule de calcul ) donc 4

Ce qui se passe : somme = 1+ 2 = 3 & 0 ce qui donne 30 + 2 (question Q3) -1 donc 31.

2eme test :
Raffraichir la page du navigateur.
Valider la question 1 et 2.
Voir le score en bas : il est de 29.
Ce qui se passe : somme = 1+ 2 = 3 & 0 ce qui donne 30 -1 donc 29.


Plusieurs problèmes donc :
Un calcul de somme dans EM ne doit pas commencer par 0 (sinon c'est du texte)
Pour les évaluations, si on choisi une valeur égale à 0, elle est considéré comme du texte.

J'ai utilisé ces calculs car j'avais commencé par les évaluations avec la pondération pour afficher le résultat final selon le score réalisé. Le résultat n'était jamais le bon à cause des valeurs choisi qui sont égales à 0 (considéré comme du texte).

***************************************
autre problème aussi pour les tableaux à double échelle.

Lors des calculs, j'ai du utiliser des conditions comme celle ci :
{CalculTotal=CalculTotal+if(G12Q0001_SQ001_0.value==0,"",G12Q0001_SQ001_0.value)}

Si la valeur est égale à 0, dans les conditions d'évaluation, il faut forcer la valeur à blanc '"") sinon il y aura une concaténation du texte.

exemple :
question G12Q1_SQ1 je répond oui = 2 points
question G12Q1_SQ2 je répond oui = 2 points
question G12Q2_SQ1 je répond non = 0 points
question G12Q2_SQ2 je répond oui = 2 points

Avec mes modifications, le score est égale à 2 + 2 +0 +2 soit 6.
Sans les modifications, le score est égale à 2 +2 = 4 & 0 = 40 +2 soit 42.


C'est un peu long à lire, mais très rapide à voir avec le questionnaire.

Si ce n'est pas un fonctionnement normal, je ferais un rapport de bug. :woohoo:

LimeSurvey version 3.22.19
OS : CentOS 7.9 / PHP 7.2.4
BDD : PostGresql 11.x /

Future LimeSurvey version 6.4.1
OS : CentOS 7.9 / RockyLinux / PHP 8.2
BDD : PostGresql 15.x
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
9 years 4 months ago #114152 by DenisChenu
Remarque générale :
sum fait une somme
join concatene

+ : ca dépend (javascript concatene ou fait une somme / php fait une somme (mais peut envoyer une notice il me semble)

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
The following user(s) said Thank You: Ben_V
The topic has been locked.
  • riqcles
  • riqcles's Avatar Topic Author
  • Offline
  • Elite Member
  • Elite Member
More
9 years 4 months ago #114172 by riqcles
Effectivement, j'ai vu ces deux fonctions dans le manuel de LimeSurvey :
sum Calculate the sum of values in an array number sum(arg1, arg2, ... argN)
sumifop Sum the values of answered questions in the list which pass the criteria (arg op value) number sumifop(op, value, arg1, arg2, ... argN)

Mon besoin est le suivant :
Dans le questionnaire j'ai 3 questions
Question 1 : Oui = 2 points, Non = 0 points.
Question 2 : Oui et Non = 0 points.
Question 3 : Oui = 2 points, Non = 0 points.

A la fin du questionnaire, je dois afficher le nombre de points et un message selon le score réalisé.
Je dois permettre d'imprimer le score réalisé, le message et les réponses aux questions.

Si j'utilise les évaluations, j'ai le score une fois que j'ai cliqué sur le bouton envoyer, mais si je choisi d'imprimer mes réponses, le score n'est plus affiché. :ohmy:

Avec une question de type équation, et l'utilisation d'EM, le score est stocké en base de données et le message peut être imprimé.

Je ne peux donc pas utiliser sum qui me feras le calcul pour la question en cours.

Par contre, je n'avait pas vu la fonction sumifop qui peut me permettre de réaliser ce calcul (en supposant que la valeur 0 indiqué dans l'évaluation de la question soit prise en tant qu'un entier et non du texte, de même pour une réponse "vide" pour une question non obligatoire.)

Pour cette formule de calcul :
{CalculTotal=CalculTotal+if(G12Q0001_SQ001_0.value==0,"",G12Q0001_SQ001_0.value)}

Comment je l'écrit avec sumifop ?

P.S : pour utiliser CalculTotal comme variable, j'ai du créé une question précédent nommé CalculTotal avec comme contenu ceci : {CalculTotal = 0}

Sinon cela ne fonctionnait pas -> autre méthode ? :huh:

Merci

LimeSurvey version 3.22.19
OS : CentOS 7.9 / PHP 7.2.4
BDD : PostGresql 11.x /

Future LimeSurvey version 6.4.1
OS : CentOS 7.9 / RockyLinux / PHP 8.2
BDD : PostGresql 15.x
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
9 years 4 months ago - 9 years 4 months ago #114179 by DenisChenu
Salut,

Je comprend rien à ton système avec CalculTotal.

sumifop ne serta pas à ça.

C'est uniquement
{sumpifop(">",10,Q1,Q2,Q3)}
Fera la somme des Q1,Q2,Q3 si ils sont supérieur à 10.

Question1 : Oui = 2 points, Non = 0 points.
Question2 : Oui et Non = 0 points.
Question3 : Oui = 2 points, Non = 0 points.

Pour simplidier les codes Oui et Non

{sum(if(Question1=="Oui",2,0),if(Question3=="Oui",2,0))}
mais avec les évaluations:
{sum(Question1.value,Question2.value,Question3.value)}

Cela me semble simple, non ?

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
Last edit: 9 years 4 months ago by DenisChenu.
The following user(s) said Thank You: riqcles
The topic has been locked.
  • riqcles
  • riqcles's Avatar Topic Author
  • Offline
  • Elite Member
  • Elite Member
More
9 years 4 months ago #114382 by riqcles
:cheer:
En fait mon système avec CalculTotal était pour avoir la réponse stocké en base de données (ce que fait normalement la question de type fonction).
Puis avoir une réponse avec le score et son commentaire au format imprimable et pas seulement à l'écran.

Alors mon questionnaire a deux type de question :

Question type Liste bouton radion (valeur mise à : Oui/Non)
G1Q0001.value,G1Q0003.value,G1Q0004.value

Question type double échelle :
G12Q0001_SQ001_0
G12Q0001_SQ001_1
G12Q0001_SQ002_0
G12Q0001_SQ002_1

En utilisant sum j'ai bien la somme totale des questions :
sum(G1Q0001.value,G1Q0003.value,G1Q0004.value,if(G12Q0001_SQ001_0.value==0,"",G12Q0001_SQ001_0.value),if(G12Q0001_SQ002_0.value==0,"",1)

Mais je ne peux pas ajouter une réponse conditionnée au score obtenu à cause des if pour la question de type double échelle :

{if(sum(G1Q0001.value,G1Q0003.value,G1Q0004.value,if(G12Q0001_SQ001_0.value==0,"",G12Q0001_SQ001_0.value),if(G12Q0001_SQ002_0.value==0,"",1))>200,"Bon score",if(sum(G1Q0001.value,G1Q0003.value,G1Q0004.value,if(G12Q0001_SQ001_0.value==0,"",G12Q0001_SQ001_0.value),if(G12Q0001_SQ002_0.value==0,"",1))>=29,"Vous êtes dans la moyenne"))}


J'ai du donc passer par une variable intermédiaire pour avoir la réponse conditionnée.

{CalculTotal=sum(G1Q0001.value,G1Q0003.value,G1Q0004.value,if(G12Q0001_SQ001_0.value==0,"",G12Q0001_SQ001_0.value),if(G12Q0001_SQ002_0.value==0,"",1)}
{if(CalculTotal.value>=200,"Bon score, félicitations",if(CalculTotal.value>=29,"Vous êtes dans la moyenne, félicitations.",if(CalculTotal.value>=2,"Votre banque de données respecte moins de la moitié des critères.","Votre banque de données présente de nombreuses lacunes")))}.

J'ai peut être mal fait ma condition, je suis preneur de proposition. :P

On peut pas faire des if imbriqués qui enchaine une autre fonction (sum) avec encore un if ? :unsure:

Mais au début j'avais un doute sur un bug à cause du chiffre zéro qui était pris en tant que chaine de caractère si on n'utilise pas la fonction sum. :angry:

LimeSurvey version 3.22.19
OS : CentOS 7.9 / PHP 7.2.4
BDD : PostGresql 11.x /

Future LimeSurvey version 6.4.1
OS : CentOS 7.9 / RockyLinux / PHP 8.2
BDD : PostGresql 15.x
The topic has been locked.
  • riqcles
  • riqcles's Avatar Topic Author
  • Offline
  • Elite Member
  • Elite Member
More
9 years 4 months ago #114383 by riqcles
Je vais remettre un questionnaire plus court demain :woohoo:

LimeSurvey version 3.22.19
OS : CentOS 7.9 / PHP 7.2.4
BDD : PostGresql 11.x /

Future LimeSurvey version 6.4.1
OS : CentOS 7.9 / RockyLinux / PHP 8.2
BDD : PostGresql 15.x
The topic has been locked.
  • DenisChenu
  • DenisChenu's Avatar
  • Away
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
9 years 4 months ago #114408 by DenisChenu
Salut,

En fait on peux mettre des if imbriqué, mais c'est très souvent plus facile de faire les calculs sur plusieurs equations ....

Denis

Assistance on LimeSurvey forum and LimeSurvey core development are on my free time.
I'm not a LimeSurvey GmbH member, professional service on demand , plugin development .
I don't answer to private message.
The topic has been locked.
Moderators: Nickko

Lime-years ahead

Online-surveys for every purse and purpose