0 votes
in SoSci Survey (dt.) by s136815 (550 points)

Hallo zusammen,
ich habe einen Fragebogen mit Filterfragen erstellt, der die Befragten letzendlich in vier Gruppen aufteilt, die alle unterschiedliche Fragebogenlängen (unterschiedliche Anzahl an Fragen) zu bearbeiten haben. Aktuell wird die gesamte Länge des Fragebogens, also die Summe aller Fragen, als Basis für die Berechnung und Darstellung der Fortschrittsanzeige genutzt. Wie kann die Fortschrittsanzeige an die tatsächliche Länge des gewählten Zweigs des Fragebogens (also nach der entscheidenden Filterfrage) angepasst werden?
Bis zur entscheidenden Filterfrage (steht auf Seite 9 des Fragebogens) könnte idealerweise der längste Zweig des Fragebogens als Basis für die Fortschrittsanzeige genutzt werden, und danach eben die Fragebogenlänge des gewählten Fragebogenzweigs.
Vielen Dank im Voraus.
Viele Grüße

1 Answer

0 votes
by SoSci Survey (330k points)
selected by s136815
 
Best answer

Es gibt unterschiedliche Möglichkeiten...

  • Wenn Sie nur Fragen auf einzelnen Seiten austauschen und dort jeweils mittels IF die passende(n) Frage(n) anzeigen, haben Sie das Problem der Seiten-Inflation überhaupt nicht.
  • Wenn Sie die Filterführung über setPageOrder() erledigen, dann weiß SoSci Survey rechtzeitig Bescheid, welche Seiten kommen und passt den Fortschrittsbalken an.
  • Wenn gar nichts hilft, können Sie mittels option('progress', ...); den angezeigten Fortschritt für jede Seite einzeln festlegen.
by s136815 (550 points)
Sorry für die späte Rückmeldung.
Ich habe mit der 2. Variante, also mit setPageOrder() gearbeitet, aber der Fortschrittsbalken arbeitet leider nicht korrekt.
Den Fragebogen habe ich insgesamt folgendermaßen aufgebaut:
Bis einschließlich Fragebogen 9 bearbeiten alle Befragten den Fragebogen. Die letzte Frage auf Seite 9 (Frage SD20) teilt die Befragten letztendlich in vier Gruppen, in Abhängigkeit des angeklickten Antwortitems.
Gruppe 1 bearbeitet den Fragebogen von Seite 9 bis Seite 77, an deren Ende die setPageOrder('PE'); steht. Die Seite PE ist die Seite 194, also die zweit letzte Seite des gesamten Fragebogens. Die letzte ist dann natürlich die Seite end.
Die anderen Gruppen sind analog organisiert:
Gruppe 2 beantwortet die Fragebogenseiten 78 bis 128, etc.
Nun wird bei einem Testdurchlauf für z.B. die Gruppe 1 auf der Fragebogenseite 74 ein Erfüllungsgrad von 38% angezeigt, auf Seite 75 von 39%, auf Seite 76 von immer noch 39 %, auf Seite 77 (also auf der letzten Fragebogenseite der Gruppe 1) von 59% - jetzt wird auf die vorletzte Seite PE (Seite 194) weitergeleitet. Auf der Seite PE wird ein Erfüllungsgrad von 80% angezeigt. Dann wird auf end weitergeleitet.
Die entscheidende Frage SD20 auf Seite 9 des Fragebogens ist als klassische Filterfrage angelegt: "Wenn eine der folgenden Antwortoption(en) ausgewählt wurde: z.B. 2
Dann nach dem Klick auf "Weiter" direkt auf Seite NO02? springen.
Wie kann der Fortschrittsbalken so eingestellt werden, dass er realistische Fortschrittsprozente anzeigt?
Für Ihre Unterstützung danke ich Ihnen im Voraus.
Viele Grüße
by SoSci Survey (330k points)
Wie sieht denn Ihr PHP-Code mit dem setPageOrder() aus? Und auf welcher Seite steht dieser?

Damit der Fortschrittsbalken korrekt funktioniert ist es wichtig, dass die Seite "PE" bereits in setPageOrder() auf Seite 9 steht. Dann weiß SoSci Survey frühzeitig, dass es nach Seite (z.B.) 77 schon zum Ende geht und eben keine 120 anderen Seiten mehr kommen.
by s136815 (550 points)
Folgenden PHP-Code habe ich an das Ende der Seiten 77, 128 und 176 geschrieben: setPageOrder('PE');
Also an das Ende des jeweiligen (Teil)-Fragebogens für die entsprechenden Gruppen.

Dazu ergänzend habe ich nun folgenden PHP-Code auf Seite 9 unter der entscheidenden Filterfrage SD20 eingefügt:

setPageOrder('PE');

Der Filter funktioniert weiterhin. Allerdings die Fortschrittsanzeige leider immer noch nicht korrekt. Nur wenn bei der Filterfrage SD20 das Antwortitem angeklickt wird, bei dem auf die letzten Seiten (177 bis 193) des Fragebogens hingeleitet wird, ist der Fortschrittsbalken korrekt.
Sollte ich die PHP-Codes auf den Seiten 77, 128 und 176 entfernen?
Für Ihre Rückmeldung vielen Dank im Voraus und viele Grüße.
by SoSci Survey (330k points)
Bitte verwenden Sie setPageOrder() direkt zu Beginn jedes Blocks - also anstatt goToPage(). Falls Sie den Filter direkt in der Frage definiert haben, entfernen Sie ihn dort und erstellen Sie stattdessen einen PHP-Filter.
by s136815 (550 points)
Den Filter der Frage SD20 habe ich nun entfernt und nach dieser Frage auf Seite 9 folgenden PHP-Code eingefügt:

if (value('SD20') == 1) {
  goToPage('OH02');
}
if (value('SD20') == 2) {
  goToPage('NO02');
}
if (value('SD20') == 3) {
  goToPage('NI02');
}
if (value('SD20') == 4) {
  goToPage('MI02');
}

Jetzt kommt beim Testen der Seite 9 die Fehlermeldung:

Warnung (Seite 9)
Die Variable SD20 wurde im Laufe dieses Interviews auf keiner vorhergehenden Seite abgefragt. Daher kann die Funktion value() keinen Antwort-Wert ermitteln.

Und wo soll auf welcher Seite welche setPageOrder()? setPageOrder('PE')?
by SoSci Survey (330k points)
Dieser PHP-Code darf frühestens auf der Seite nach (!) der Frage SD20 stehen, vgl. https://www.soscisurvey.de/help/doku.php/de:create:functions:value

Und das goToPage() müssten Sie jetzt nur noch durch setPageOrder() ersetzen und dabei gleich den kompletten Seitenbereich angeben: https://www.soscisurvey.de/help/doku.php/de:create:functions:setpageorder
by s136815 (550 points)
habe jetzt auf der nächsten Seite (10, MI02) direkt vor den bereits eingestellten Fragen folgenden PHP-Code geschrieben:
if (value('SD20') == 1) {
  goToPage('OH02');
}
if (value('SD20') == 2) {
  setPageOrder('NO02-NN62');
}
if (value('SD20') == 3) {
  setPageOrder('NI02-NM53');
}

Mit Seite 10 beginnt der Fragebogen für die Befragten, die Variable 4 der Frage SD20 angeklickt haben. Das funktioniert auch.

Wenn Variable 1 der Frage SD20 angeklickt wird, wird auch planmäßig auf Seite OH02 weitergeleitet und auch der Fortschrittsbalken wird korrekt angezeigt.
Wenn aber die Variablen 2 oder 3 der Frage SD20 angeklickt werden, wird der Fragebogen mit der Seite MI02 fortgesetzt. Der Fragebogen sollte aber nun mit NO02 oder NI02 fortgesetzt werden.
by SoSci Survey (330k points)
Fügen Sie bitte vor der Seite MI02 noch Seite ein, welche nur den o.g. PHP-Code enthält. Ersetzen Sie das erste goToPage() auch noch durch ein setPageOrder() und ergänzen Sie in allen drei setPageOrder()-Befehlen noch die Seite, wo es nachher weitergehen soll, also z.B.:

setPageOrder('NO02-NN62', 'PE');
by s136815 (550 points)
Vielen Dank für diese Hilfe. Habe alles so gemacht und die goToPage(PE) PHP-Codes auf den letzten Seiten der jeweiligen Fragebogenabschnitte (z.B. 77, 128, etc.) entfernt, da diese Befehle ja nun nicht mehr benötigt werden. Der neue PHP-Code steht nun auf Seite 10, also hinter der ehemaligen Filterfragenseite und vor der ersten Seite eines Fragebogenblocks.
Teste ich den Fragebogen ab Seite 9 leitet der neue PHP-Code auch zu den jeweiligen Anfangsseiten der zugeordneten Frageseitenblöcke. Aber ist dieser abgearbeitet, geht es mit dem nächsten Fragebogenblock weiter, entsprechend der Reihenfolge im Fragebogen. D.h. die Weiterleitung auf die Seite 'PE' nach Abschluss eines Fragebogenblocks erfolgt leider nicht, so wie es im PHP-Code auf der Seite 10 definiert ist. Der Fortschrittsbalken ist entsprechend fehlerhaft. Hier noch der PHP-Code der Seite 10:
if (value('SD20') == 1) {
  setPageOrder('OH02-ON16','PE');
}
if (value('SD20') == 2) {
  setPageOrder('NO02-NN62','PE');
}
if (value('SD20') == 3) {
  setPageOrder('NI02-NM53','PE');
}
if (value('SD20') == 4) {
  setPageOrder('MI02-ME58','PE');
}

Warum funktioniert der Fragebogen immer noch nicht, bzw. der Fortschrittsbalken?
Für Ihre Bemühungen danke ich Ihnen im Voraus.
by SoSci Survey (330k points)
>  D.h. die Weiterleitung auf die Seite 'PE' nach Abschluss eines Fragebogenblocks erfolgt leider nicht, so wie es im PHP-Code auf der Seite 10 definiert ist.

Das ist schlecht. Ich vermute, dass Sie irgendwo innerhalb des Blocks noch einen der Befehle setNextPage(), setPageOrder(), loopPage() oder loopToPage() verwenden. Könnte dies sein? Diese Befehle brechen eine vorher mittels setPageOrder() definierte Seitenabfolge außer Kraft.
by s136815 (550 points)
Dem ist leider so. Ich habe folgende PHP-Codes mit loopPage() in den Blöcken stehen:
Auf Seite 16, Kennung MI12:
if (!isset($itemsMI12)) {
  $itemsMI12 = getItems('MI12', 'all');
  shuffle($itemsMI12);
  $itemsMI12 = array_chunk($itemsMI12, 8);
  registerVariable($itemsMI12);
}

$i = loopPage(count($itemsMI12));
{
  question('MI12', $itemsMI12[$i]);
}

Auf Seite 28 mit Kennung MI36:
if (!isset($itemsMI36)) {
  $itemsMI36 = getItems('MI36', 'all');
  shuffle($itemsMI36);
  $itemsMI36 = array_chunk($itemsMI36, 8);
  registerVariable($itemsMI36);
}

$i = loopPage(count($itemsMI36));
if ($i == count($itemsMI36) - 1) {
  question('MI36', $itemsMI36[$i], 'spacing=4');
  question('MI37');  // Das offene Eingabefeld
} else {
  question('MI36', $itemsMI36[$i]);
}

Und auf Seite 42 mit der Kennung MI70:
if (!isset($itemsMI70)) {
$itemsMI70 = getItems('MI70', 'all');
shuffle($itemsMI70);

$itemsMI70 = array_chunk($itemsMI70, 6);
registerVariable($itemsMI70);
}
$i = loopPage(count($itemsMI70));
question('MI70', $itemsMI70[$i]);

Gibt es für diese Funktionen Alternativen ohne loopPage()?
Oder sollte ich goToPage('PE') wieder ans Ende jedes Fragebogenblocks setzen? Dann würde der Fragebogen wenigstens vom Ablauf her funktionieren, allerdings wohl weiter auf Kosten einer korrekten Fortschrittsbalkenanzeige.
Viele Grüße und im Voraus vielen Dank für Ihre Bemühungen.
by s136815 (550 points)
Habe gerade noch einmal alle Varianten der Frage SD20 auf Seite 9 durchprobiert und auch die vier Fragebogenblöcke noch einmal überprüft.
"Block1": MI02 (Seite 11) bis ME58 (Seite 78)
"Block2": NI02 (Seite 79) bis NM53 (Seite 129)
"Block3": NO02 (Seite 130) bis NN62 (Seite 177)
"Block4": OH02 (Seite 178) bis ON16 (Seite 194)
PE auf Seite 195
end

Die zuvor genannten PHP-Codes mit loopPage()-Befehlen kommen mit der jeweiligen Kennung exakt so in den Blöcken 1, 2 und 3 vor.
Komischerweise funktioniert die Weiterleitung zu Seite PE für Block 3 einwandfrei und auch der Fortschrittsbalken wird korrekt angezeigt.
Da muss es noch einen anderen Unterschied geben.?
Die anderen von Ihnen genannten Befehle habe ich nicht verwendet.
Viele Grüße
by SoSci Survey (330k points)
loopPage() und setPageOrder() sind definitiv nicht kompatibel. Prinzipiell könnten Sie den Loop gleich in der Seitenabfolge vorsehen und mit loopIndex() arbeiten, aber das würde in Ihrem Fall m.E. ziemlich kompliziert und fehleranfällig.

Daher wäre meine Empfehlung folgende: Verwenden Sie auf der/den Seite/n nach dem loopPage() erneut ein setPageOrder(), wo Sie definieren, welche Seiten noch angezeigt werden sollen. Dies sollte für einen korrekten Verlauf und Fortschrittsbalken sorgen.

Innerhalb des loopPage() müssten Sie m.E. mittels option('progress', ...) den Fortschrittsbalken manuell setzen. Denn innerhalb der Seitenabfolge "weiß" SoSci Survey nicht, dass weiter hinten ein großer Teil Fragen übersprungen wird.

Natürlich könnten Sie auch darüber nachdenken, angesichts der großen Anzahl von Seiten entweder mit Filtern innerhalb der Seiten zu arbeiten (sodass Sie nur ein Set an Seiten haben, die aber je nach Gruppe etwas unterschiedliches anzeigen) oder sogar mit separaten Fragebögen und goToQuestionnaire() zu arbeiten, was allerdings Auswirkungen auf die Datenstruktur (min. 2 Datensätze pro Teilnehmer) hätte.
by s136815 (550 points)
Hallo zusammen,
habe Ihre Empfehlung umgesetzt, nach einer Seite mit einem loopPage() erneut ein setPageOrder() einzufügen. Der Fortschrittsbalken funktioniert jetzt hinreichend genau und der Verlauf problemlos.
Vielen Dank für den hervorragenden Support.
Viele Grüße

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...