Welcome to the LimeSurvey Community Forum

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

Falsch beantwortete randomisierte Fragen zum Schluss anzeigen

More
3 weeks 1 day ago #273883 by Balrog
Bitte helfen Sie uns, Ihnen zu helfen und füllen Sie folgende Felder aus:
Ihre LimeSurvey-Version: LimeSurvey Cloud Version 6.16.10
==================
Hallo zusammen, 
ich habe erneut eine (scheinbar) doch etwas kompliziert gewordene Frage. 
Wir verwenden in der Firma LS Cloud 6.16.10, Design fruity, Javascript deaktiviert, Anzeige: Gruppe für Gruppe, Fragentyp bei allen Fragen ist "Liste (Optionsfelder)".
Es wurde auf interne Anforderung eine Umfrage erstellt, mit 148 Fragen in mehreren Gruppen aufgeteilt, alle mit Randomisiergruppen randomisiert. Bewertung ist aktiv, d.h. in jeder Frage hat die richtige Antwort 1 Punkt. Zum Schluss wird die Summe gerechnet und dementsprechend ein Ergebnis ausgegeben: bestanden oder nicht bestanden. Jetzt möchten die Kollegen aber am Ende angezeigt bekommen, welche der Randomfragen falsch beantwortet wurden, also wenn es so ist, soll nur der Fragentext angezeigt werden - alle schön untereinander. 

Klingt einfach, schaffe ich aber trotzdem nicht, denn das Problem ist, dass
- LS mit loops, also Schleifen nicht umgehen kann (zumindest habe ich es bisher in meiner Recherche so herausgefunden)
- Einfache IF Statements untereinander für alle Fragen eingeben, wie {if(G01Q01.valueNAOK == 0, G01Q01.question, "")} zwar die Fragen anzeigen, wenn sie falsch (0Punkt) beantwortet wurden, aber bei jeder richtigen Frage wird eine leere Zeile angezeigt. Diese leere Zeile kann ich einfach nicht ausblenden/entfernen. 
Entweder gibt es dafür eine Lösung, die ich bisher nicht gefunden habe oder es gibt die Möglichkeit, wirklich nur die tatsächlich angezeigten Fragen auszuwerten, wo dann hoffentlich nur die 0-Punkt-Fragen angezeigt werden. 
Was ich noch versucht habe, dass ich eine weitere versteckte Frage (Code: "wronganswers") erstellt habe, wo ich meinen riesigen IF-Salat eingegeben habe, wo mit {if(G01Q01.valueNAOK == 0, WRONGANSWERS = WRONGANSWERS + "• " + G01Q01.question + "
", WRONGANSWERS)}
- usw. für alle Fragen - die WRONGANSWERS mit allen 0-P-Fragen befüllt werden sollte. Hier habe ich aber gesehen, dass die ganzen IF Bedingungen nach jeder Frage von vorne durchgelaufen werden. So wird zum Schluss Frage 1 (wenn 0 Punkt gekriegt) schon 148-mal im WRONGANSWERS stehen usw alle 0-p-Fragen. --> Eine Verschachtelung der sehr vielen IF Bedingungen für die Vermeidung des Problems habe ich gar nicht versucht, da blickt keine Mensch durch bei so vielen Fragen und eine Schleife ist dort auch nicht möglich. 

Vielleicht habt ihr noch eine Idee, wie ich es bewerkstelligen könnte?! Eine zusätzliche Frage für eine Zusatzauswertung wäre auch nicht ganz ideal, dann hätte ich gleich die doppelte Anzahl an Fragen - wenn es natürlich anders nicht geht, dann muss es halt so sein, aber vielleicht gibt es noch einen Trick. 

Please Log in to join the conversation.

More
3 weeks 1 day ago #273884 by Balrog
Hmmm, jetzt fällt mir ein, wenn ich in jeder Frage im Bedingungsfeld den Punktvergleich und CODE.question Ausgabe nach WRONGANSWERS eingebe, wird es richtig funktionieren?

Please Log in to join the conversation.

More
3 weeks 1 day ago - 3 weeks 1 day ago #273885 by Joffm
Hallo,
mit diesen Fragen
 
das Einfachste ist wohl ein "join"
{join(if(Q1a.valueNAOK==0,Q1a.question+'<br />',''),if(Q1b.valueNAOK==0,Q1b.question+'<br />',''),if(Q1c.valueNAOK==0,Q1c.question+'<br />',''))}

Gut, hier könnte man auch mal ein "listifop" ausprobieren.

Ich habe aber einmal ein bootstrap listgroup Element genommen mit (ist vielleicht etwas ansprechender, da strukturierter)
<ul class="list-group">
    <li class="list-group-item {if(Q1a.valueNAOK==1,'d-none')}">{Q1a.question}</li>
    <li class="list-group-item {if(Q1b.valueNAOK==1,'d-none')}">{Q1b.question}</li>
    <li class="list-group-item {if(Q1c.valueNAOK==1,'d-none')}">{Q1c.question}</li>
</ul>


Gibt dann dieses:
 

Im Grunde kann man ja alles Mögliche basteln, eine HTML-Tabelle ginge auch; vielleicht wäre es auch nett, wenn die gegebene (falsche) Antwort zusätzlich angezeigt würde.

Joffm
 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 3 weeks 1 day ago by Joffm.

Please Log in to join the conversation.

More
3 weeks 18 hours ago #273888 by Joffm
Hallo,
als kurzer Zusatz (wenn ich schon "listifop" erwähne)
Dies wäre es.
{listifop( "value", "==", 0, "question", "<br />", that.Q1a.sgqa, that.Q1b.sgqa, that.Q1c.sgqa, ...)}

Ergibt dasselbe wie das "join", ist aber vom Code her kürzer
 

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
2 weeks 6 days ago #273890 by Balrog
Hallo Joffm, 
join habe ich komplett vergessen, danke für die Erinnerung, werde ich mal probieren, aber zuerst probiere ich listifop aus, das kenne ich noch gar nicht. 
Wenn ich richtig sehe, schreibt man nur einmal die Befehle für die Bedingungen und nachher einfach alle Fragen auflisten? Klingt interessant und sieht kompakt aus. Werde ich mal schauen, danke schon mal!!

Please Log in to join the conversation.

More
2 weeks 5 days ago #273891 by Balrog
mmmm, fein!!
listifop ist wunderbar für so was!! Danke für die schnelle Hilfe, es funktioniert!!
Super Hilfe, wie immer!

Please Log in to join the conversation.

More
2 weeks 4 days ago #273895 by Balrog
Noch eine Frage zu diesem Thema und listifop:

Wie kann ich neben dem Fragentext auch die (gewählte, falsche) Antwort des Users anzeigen lassen?
Ich habe schon mit implode versucht:
Code:
{listifop( "value", "==", 0, implode(': ', "question","shown"), "
", that.G01Q01.sgqa....}
es zeigt den Gesamtcode in der Übersicht auch richtig an, es wird aber weder der Fragentext noch die Antwort angezeigt.
Einzeln geht es natürlich, wie joffm schon beschrieben hat...

Please Log in to join the conversation.

More
2 weeks 4 days ago - 2 weeks 4 days ago #273897 by Joffm
Hallo,
naja, da sind ein paar Fehler drin.
1. Wie im Handbuch steht:
listifop:
Return a 'glue'-separated list of the specified question property (retProp) from questions in the list which pass the criteria (cmpProp op value)
listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)

werden "properties" benutzt; das sind diese hier
[url] www.limesurvey.org/manual/ExpressionScri...ugriff_auf_Variablen [/url]
und eben keine irgendwelchen Mauscheleien damit.

2. Und du willst eine Frage doch nicht expandieren (es sind doch sowieso Einfachnennungen)
Daher ist hier das "that" fehl am Platz
[url] www.limesurvey.org/manual/ExpressionScri...2%80%9Ethat%E2%80%9C [/url]
Diese Variablen werden doch nur benutzt, wenn Du mit einem kurzen Ausdruck auf alle Teile (oder einzelne bestimmte) eine MFN, Matrix, o.Ä. zugreifen willst.


Gut, wenn Du die gegebene Antwort einbeziehen möchtest, finde ich die Lösung mit der bootstrap listgroup ziemlich bestechend.
Ich habe zum gezeigten Beispiel
<ul class="list-group">
    <li class="list-group-item {if(Q1a.value==1,'d-none')}">{Q1a.question}</li>
    <li class="list-group-item {if(Q1b.value==1,'d-none')}">{Q1b.question}</li>
    <li class="list-group-item {if(Q1c.value==1,'d-none')}">{Q1c.question}</li>
</ul>


einfach ein Badge hinzugefügt und nach rechts geschoben.
Findest Du hier
getbootstrap.com/docs/5.1/components/list-group/
Wie Du siehst ist es einfach das "Basic example" reinkopiert.

Und jetzt noch ein Badge
[url] getbootstrap.com/docs/5.1/components/badge/#background-colors [/url]

Gibt zusammen
<ul class="list-group">
    <li class="list-group-item {if(Q1a.value==1,'d-none')}">{Q1a.question}<span class="badge bg-danger pull-right">{Q1a.shown}</span></li>
    <li class="list-group-item {if(Q1b.value==1,'d-none')}">{Q1b.question}<span class="badge bg-danger pull-right">{Q1b.shown}</span></li>
    <li class="list-group-item {if(Q1c.value==1,'d-none')}">{Q1c.question}<span class="badge bg-danger pull-right">{Q1c.shown}</span></li>
</ul>



Du siehst übrigens, dass hier umgekehrt gearbeitet wird; wenn die Frage richtig beantwortet wurde, bekommt sie die Klasse "d-none", wird also nicht angezeigt.
Hier könntest Du natürlich auch eine simple HTML-Tabelle einsetzen.

Das Schöne hier an diese Lösungen ist, dass die Struktur identisch ist, sich nur der Fragecode ändert; man kann das Ganze also z.B. in EXCEL mit "VERKETTEN" einfach herunterkopieren
Und am allereinfachsten, wenn die Fragecodes fortlaufend wären, wie "F1", "F2", "F3",...; dann kann man sie einfach herunterziehen.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 2 weeks 4 days ago by Joffm.

Please Log in to join the conversation.

More
2 weeks 3 days ago #273899 by Balrog
Hallo joffm, 
danke für die weiteren Ideen, die bootstrap listgroup macht es auch viel schöner. Ich hatte damit noch kurz ein Problem wegen randomisierter Fragen, weil pro Fragengruppe immer nur 3 Fragen erscheinen. 
Mit {if(Q1a.value==1,'d-none')} nahm das System auch die ausgebliebenen Fragen, weil deren Antwort ja nicht 1 ist - also die Punktbewertung der Antwort (weil sie ja gar nicht erschienen sind). 

Zum Glück ging es mit {if(Q1a.value!=0,'d-none')}, damit werden auch Fragen ohne Wert ausgeschlossen. Jetzt habe ich eine schöne Tabellenansicht, man kann auch mit den Farben und Design rumspielen, so sind die User noch mehr zufrieden. 

Vielen Dank nochmal an joffm für die super Hilfe!

Please Log in to join the conversation.

Moderators: holchJoffmtpartner

Lime-years ahead

Online-surveys for every purse and purpose