Welcome to the LimeSurvey Community Forum

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

Teilfragen-Validierung von Teilfragen, die nur bedingt angezeigt werden

  • Gelimed
  • Gelimed's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
3 weeks 3 days ago #267035 by Gelimed
Bitte helfen Sie uns, Ihnen zu helfen und füllen Sie folgende Felder aus:
Ihre LimeSurvey-Version: LimeSurvey Cloud Version 6.6.5
Eigener Server oder LimeSurvey-Cloud: Cloud
Genutzte Designvorlage: Eigene Vorlage
==================
Hallo liebe Helfer,

wie kann ich nur die vom Teilnehmer in der vorherigen Frage ausgewählten Teilfragen validieren lassen?

Die Teilfragen der Frage UGQ02 werden selektiv angezeigt, je nach Auswahl in Frage UGQ01.
Ich würde die Eingabe in den Spalten X001 (vermietete Fläche) und X002 (Kaltmiete pro Monat) der ausgewählten Teilfragen gerne auf eine reine Zahleneingabe beschränken, z.B. mit der Funktion "is_numeric(var)".
Im Forum habe ich bei Joffm folgendes gefunden, was auch funktioniert:

(is_empty(UGQ02_Y001_X001.NAOK) or is_numeric(UGQ02_Y001_X001.NAOK))
AND
(is_empty(UGQ02_Y001_X002.NAOK) or is_numeric(UGQ02_Y001_X002.NAOK))
AND
(is_empty(UGQ02_Y002_X001.NAOK) or is_numeric(UGQ02_Y002_X001.NAOK))
AND
(is_empty(UGQ02_Y002_X002.NAOK) or is_numeric(UGQ02_Y002_X002.NAOK))
...
Damit ist die Eingabe aber nicht zwingend, die Zellen können auch leer bleiben.
Wenn ich den Teil "is_empty(var)" weglasse - also so:
(is_numeric(UGQ02_Y001_X001.NAOK))
AND
(is_numeric(UGQ02_Y001_X002.NAOK))
AND
(is_numeric(UGQ02_Y002_X001.NAOK))
AND
(is_numeric(UGQ02_Y002_X002.NAOK))
...
 - dann ist die Validierung erst wahr, wenn in UGQ01 alle Unterfragen ausgewählt wurden und die beiden betreffenden Spalten mit Zahlen befüllt sind.
Nach verschiedensten (unbeholfenen) Versuchen (z.B. mit "Wenn"-Funktion) muss ich klein beigeben und auf eure Hilfe hoffen...

Viele Grüße
Niklas

File Attachment:

File Name: limesurvey...2494.lss
File Size:141 KB

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 weeks 3 days ago - 3 weeks 3 days ago #267040 by Joffm
Hallo,
ich sehe das Problem nicht.
Die Teilfragen werden nach UGQ01 gefiltert.
Damit ist also UGQ02 eine Pflichtfrage und kann damit am Ende nicht teilweise leer bleiben.

Aber was ist das denn?
 
 
Wo sind dort die Gleichungen? Gleichung kommt doch daher, dass es ein (Un-)Gleicheitszeichen gibt.

Egal; Ich habe den Matrixfilter genommen (Du erinnerst Dich "identische Codes in beiden Fragen) und dann ist
(is_empty(UGQ02_Y001_X001.NAOK) or is_numeric(UGQ02_Y001_X001.NAOK))
AND
(is_empty(UGQ02_Y001_X002.NAOK) or is_numeric(UGQ02_Y001_X002.NAOK))
AND
(is_empty(UGQ02_Y002_X001.NAOK) or is_numeric(UGQ02_Y002_X001.NAOK))
AND
(is_empty(UGQ02_Y002_X002.NAOK) or is_numeric(UGQ02_Y002_X002.NAOK))
AND
(is_empty(UGQ02_Y003_X001.NAOK) or is_numeric(UGQ02_Y003_X001.NAOK))
AND
(is_empty(UGQ02_Y003_X002.NAOK) or is_numeric(UGQ02_Y003_X002.NAOK))
AND
(is_empty(UGQ02_Y004_X001.NAOK) or is_numeric(UGQ02_Y004_X001.NAOK))
AND
(is_empty(UGQ02_Y004_X002.NAOK) or is_numeric(UGQ02_Y004_X002.NAOK))
AND
(is_empty(UGQ02_other_X001.NAOK) or is_numeric(UGQ02_other_X001.NAOK))
AND
(is_empty(UGQ02_other_X002.NAOK) or is_numeric(UGQ02_other_X002.NAOK))


völlig in Ordnung.

Joffm
 

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

Please Log in to join the conversation.

  • Gelimed
  • Gelimed's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
3 weeks 2 days ago #267053 by Gelimed
Guten Morgen Joffm,

vielen Dank für die wieder mal blizschnelle Antwort!

Stimmt: Mit dem Matrixfilter kann ich natürlich auch filtern. :-)
Keine Ahnung, warum es reicht, im Feld "Relevanz-Gleichung" einen Unterfragen-Code ohne Gleichung einzugeben, um die Teilfrage nach dieser Unterfrage zu filtern...mit einer Gleichung wie etwa QC_SQC=='Y' geht es natürlich auch.

Wenn ich deine Lösung umsetze, bin ich wieder bei der 1. Lösung von dir aus dem Forum: Der Teilnehmer kann auch weitermachen, ohne die Teilfragen in UGQ02  (Spalten X001 - "vermietete Fläche" und X002 - "Kaltmiete") beantworten zu müssen.
Oder habe ich deine Lösung falsch umgesetzt bzw. etwas nicht verstanden?
Vielleicht habe ich meinen Wunsch auch nicht genau genug formuliert:
Mein Ziel ist, dass die Spalten X001 und X002 beantwortet werden MÜSSEN, bevor man weitermachen kann. Ich könnte die Frage auch als Pflichtfrage setzen, aber dann dürfte auch die Spalte X003 "Bemerkung" nicht leer bleiben, das wäre ungünstig... 
Ich hänge die aktualisierte Umfrage an.

Viele Grüße!

File Attachment:

File Name: limesurvey...2495.lss
File Size:142 KB

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 weeks 2 days ago - 3 weeks 2 days ago #267061 by Joffm
Es gibt kein
"Wasch mir den Pelz, aber mach micht nicht nass"
1. Nicht-Pflichtfrage + is_empty: Kein initialer Fehler, leere Felder möglich
2. Nicht-Pflichtfrage : Initialer Fehler, leere Felder möglich
3. Pflichtfrage + is_empty: Kein initialer Fehler, keine leere Felder möglich
4. Pflichtfrage : Initialer Fehler, keine leerenFelder möglich

Also, entweder lebst Du mit dem initialen Fehler - oder (besser) stelle die Bemerkungsfrage unter dieser.
Ich halte Bemerkungsfelder in einer Matrix für wenig geeignet. Sie sind m.E. optisch zu kurz. Nicht jeder weiß, dass er trotzdem ein halbes Buch dort hineinkopieren könnte.
Vielleicht "mehrfacher kurzer Text"  - gefiltert
"Wenn Sie uns noch etwas zu den ... sagen wollen, haben Sie hier die Möglichkeit dazu"
 

Dann kannst Du sogar die Matrix als Matrix(Zahlen) anlegen und hast die ganze Validierung gespart: es sei, Du möchtest Dezimalstellen verbieten.
Das ginge dann ganz gut mit RegEx.
Und ich glaube, dazu gibt es in einem Tutorial etwas mit Eingabemasken.
 

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

Please Log in to join the conversation.

  • Gelimed
  • Gelimed's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
3 weeks 2 days ago #267065 by Gelimed
...hast du mal deine durchschnittliche Antwortzeit berechnet?
Dürfte weit unter 24 Stunden liegen - vielen Dank wieder für deinen unermüdlichen blitzschnellen Einsatz!

...Ja, das wäre dann auch meine letzte Lösung gewesen.
Es war schön, sich deine "dummen Bemerkungen" in einer öffentlichen Umfrage der Stadt vorzustellen - ich habe gut gelacht, danke! :-)
Für einen Laien wie mich ohne Grundkenntnisse auf diesem Gebiet ist es überraschend, dass man bei der Teilfragen-Validierung nicht irgendwie "is_numeric(var)" auf die ausgewählten, also angezeigten Teilfragen begrenzen kann...

Viele Grüße aus Freiburg!

Please Log in to join the conversation.

  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
3 weeks 2 days ago #267075 by Joffm
1. Hier noch einmal ein aufgebohrtes Beispiel
(mit Suffixen und Eingabemasken)
 

2.

nicht irgendwie "is_numeric(var)" auf die ausgewählten, also angezeigten Teilfragen begrenzen kann

Das ist m.E. nicht das Problem.
Das würde ja gehen; nämlich indem man auf die vorherige Frage referenziert und nur validiert, wenn die Teilfrage gewählt wurde.
Hier einmal für das Erdgeschoss
(EGQ01_Y001!="Y" or (is_numeric(EGQ02_Y001_X001.NAOK) and is_numeric(EGQ02_Y001_X002.NAOK)))
AND
(EGQ01_Y002!="Y" or (is_numeric(EGQ02_Y002_X001.NAOK) and is_numeric(EGQ02_Y002_X002.NAOK)))
AND
(EGQ01_Y003!="Y"or (is_numeric(EGQ02_Y003_X001.NAOK) and is_numeric(EGQ02_Y003_X002.NAOK)))
AND
(EGQ01_Y004!="Y" or (is_numeric(EGQ02_Y004_X001.NAOK) and is_numeric(EGQ02_Y004_X002.NAOK)))
AND
(is_empty(EGQ01_other) or (is_numeric(EGQ02_other_X001.NAOK) and is_numeric(EGQ02_other_X002.NAOK)))


Dann ist es eben wieder so
 
 
 

Den Anfangsfehler bekommst Du nur mit erlaubtem "is_empty" weg.
Aber da beim Mietzeitraum ebenfalls zunächst alles "rot" ist, ist dies ja anscheinend doch kein Drama.
Du hast so viele Möglichkeiten.

Und schau noch einmal die Implementierten Funktionen an und "that" und "self".
Denn z.B.
!is_empty(UGQ01_SQ001) OR !is_empty(UGQ01_SQ002) OR !is_empty(UGQ01_SQ003) OR !is_empty(UGQ01_SQ004)
heißt ja "Wenigstens eine Option wurde gewählt." oder "Die Anzahl der gewählten Optionen ist größer als 0"
Das ist einfacher so:
count(that.UGQ01)>0

Joffm

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

Please Log in to join the conversation.

  • Gelimed
  • Gelimed's Avatar Topic Author
  • Offline
  • Junior Member
  • Junior Member
More
2 weeks 4 days ago #267126 by Gelimed
Hallo Joffm,

sieht wirklich besser aus, dein "aufgebohrtes" Beispiel, vielen Dank für die Anregung!
Sobald ich Zeit finde, werde ich das Tutorial "Eingabemasken" suchen (vielleicht steht da ja auch was zu unterschiedlichen Suffixen pro Spalte...) und mich auch durch deine weiteren Hinweise durcharbeiten - ich habe ja schon beim ersten Mal gemerkt, dass sich das echt lohnt.
  • "that" und "self" stehen schon länger auf meiner Liste...
  • count(that.UGQ01)>0 - so eine Abkürzung habe ich schon länger gesucht, vielen Dank! - Frage umdrehen...sieht einfach aus, aber ob ich da selbst mal drauf gekommen wäre...?
Viele Dank für alles und viele Grüße!

Please Log in to join the conversation.

Moderators: holchJoffmtpartner

Lime-years ahead

Online-surveys for every purse and purpose