Übersetzungen dieser Seite:
 

Filterfragen (PHP-Filter)

Wenn die Antwort des Teilnehmers auf eine Frage Auswirkungen auf den weiteren Verlauf des Interviews haben soll, handelt es sich um eine Filterfrage. Sie können Filter entweder direkt in der Frage definieren (Frage-Filter, einfache Variante) oder unter Fragebogen zusammenstellen (PHP-Filter) anwenden.

PHP-Filter erlauben deutlich anspruchsvollere Filter als Frage-Filter, erfordern aber den Umgang mit ein wenig PHP-Programmcode. Die meisten Nutzer von SoSci Survey haben vorher noch nie mit einer Programmiersprache gearbeitet. Zum Erstellen von Filterfragen werden Sie in diesem Kapitel einige grundlegende Kenntnisse zur Programmierung mit PHP erlernen. Keine Angst: Aller Anfang ist schwer, aber die Programmierung von Filtern ist absolut machbar und der Lohn der Mühe ist eine steile Lernkurve. Für eventuelle Frustrationen entschädigt meist ein freudiges Aha-Erlebnis.

Wichtig: Zum Verständnis dieses Kapitels wird dringend das Kapitel Einführung in PHP-Code empfohlen.

Wichtig: Wenn ein Filter nicht wie gewünscht funktioniert, lesen Sie bitte Problemlösung bei Filterfragen

Tipp: Werden die Teilnehmer in Kontroll- und Experimentalgruppe geteilt (Zufallsgenerator, Randomisierung) und sehen unterschiedliche Fragebogen-Seiten, dann ist es i.d.R. sinnvoll mit setPageOrder() anstatt goToPage() zu arbeiten: Je früher SoSci Survey im Fragebogen-Verlauf Bescheid weiß, dass Seiten übersprungen werden, desto akkurater kann der Fortschrittsbalken angepasst werden.

Tipp: PHP-Filter werden auch in dem Video-Tutorial Advanced Filter Questions erkärt.

Praxis-Beispiel: Ja-Nein-Filter

Bevor Filter und deren Funktion ausführlich erklärt werden, hier zunächst die Lösung für jene die wenig Zeit haben. Ein Ja-Nein-Filter ist vermutlich der häufigste Einsatz für Filter.

Beispiel 1: Antwortet ein Teilnehmer mit „ja“, soll eine zusätzliche Frage angezeigt werden.

Beispiel 2: Antwortet ein Teilnehmer mit „nein“, werden mehrere Seiten übersprungen.

Vorbereitung

Folgende Informationen benötigen Sie für den Einbau des Filters:

  • Die Kennung der Variable, in der die Ja-Nein-Antwort gespeichert wird,
  • die Antwortcodes der Frage und
  • die Kennung der Frage, welche bei einem „ja“ angezeigt werden soll (Beispiel 1)
  • die Seite, wo es bei einem „nein“ weiter geht (Beispiel 2)

Die Kennung der Variable finden Sie in der Variablen-Übersicht. Dort steht etwa Folgendes:

[PT01] Dropdown-Auswahl
Fernseh-Besitz

PT01 Fernseh-Besitz
   1 = ja
   2 = nein
  -9 = Keine Antwort

Die Variable heißt also PT01, der Antwortcode für „ja“ ist 1 und der Code für „nein“ ist 2. Im Idealfall haben Sie für die Filterfrage festgelegt, dass der Teilnehmer diese beantworten muss (Karteireiter Prüfung der Antwort). Dann kann der Code -9 nämlich nicht mehr vorkommen.

Hinweis: Sollten dort mehrere Variablen stehen, z.B. PT01_01 und PT01_02, so überprüfen Sie den Typ der Frage. Es ist wichtig, dass Sie für eine einfache Auswahl den Fragetyp „Auswahl“ oder „Dropdown-Auswahl“ verwenden – nicht aber „Mehrfachauswahl“, wenn Sie keine solche erlauben möchten.

PHP-Code einfügen

Der Filter wird nun als PHP-Code beim Fragebogen zusammenstellen eingegeben. Und zwar an der Stelle wo der Filter aktiv werden soll (also wo die zweite Frage angezeigt wird bzw. wo gesprungen wird). Dazu zieht man mit der Maus einfach ein PHP-Code von rechts in die Fragebogen-Seite hinein (Einführung in PHP-Code).

Wichtig: Ein PHP-Filter kann niemals auf derselben Seite stehen, auf der die Filterfrage steht (also jene Frage, auf deren Antwort Sie sich beziehen, im Beispiel PT01). SoSci Survey verarbeitet den Fragebogen immer seitenweise, um den Teilnehmer eine komplette Fragebogen-Seite anzuzeigen. In dem Moment, wo die Seite mit der Filterfrage verarbeitet wird, kann der Teilnehmer diese Frage noch gar nicht beantwortet haben – und entsprechend kann ein Filter noch nicht auf die Antwort reagieren (value()).

Häufige Anwendungsfälle

Wenn Sie mit der PHP-Funktion value() umgehen können, lassen sich damit gleich eine Reihe von Filtern implementieren.

Eine Frage anzeigen oder nicht

Folgender PHP-Code überprüft mittels value(), ob für die Variable PT01 der Antwortcode 1 gespeichert wurde. Falls dem so ist, wird mittels question() die Frage AB01 angezeigt.

Beachten Sie das doppelte Gleichheitszeichen (==) hinter dem value()-Befehl.

if (value('PT01') == 1) {
  question('AB01');
}

Tipp: Dieser Filter lässt sich auch ganz ohne PHP-Code als Frage-Filter realisieren.

Tipp: Wenn Sie sich ein wenig Tipparbeit sparen möchten, dann ziehen Sie die Frage, die angezeigt werden soll, einfach von rechts in den PHP-Code hinein. Anschließend können Sie noch die Anzeigeoptionen der Frage anpassen. Nachdem Sie mit dem grünen Häkchen bestätigt haben, wird der PHP-Code für die Frage unten im PHP-Code Element angehängt. Dann müssen Sie den Code nur noch an die richtige Stelle (also zwischen die geschweiften Klammern) verschieben.

Tipp: Zwischen die geschweiften Klammern { und } können Sie auch mehrere question()-Befehle schreiben.

Unterschiedliche Fragen anzeigen

Abhängig von einer früheren Antwort (oder einer Gruppenzuordnung, z.B. durch Randomisierung) soll Frage A oder Frage B abgezeigt werden?

Im folgenden Beispiel wird abhängig von der Antwort auf eine Auswahlfrage (AF01) entweder die Frage FF01 oder FF02 angezeigt.

if (value('AF01') == 2) {
  question('FF01');
} else {
  question('FF02');
}

Wichtig: Die Frage FF01 und FF02 dürfen nicht auf die Seite gezogen werden. Sonst werden sie doppelt angezeigt: Einmal durch den question() Befehl und einmal dadurch, dass sie auf die Seite gezogen wurden.

Wenn die Frage FF01 für mehrere Antworten in AF01 angezeigt werden soll, dann kommt der logische Operator or zum Einsatz.

if ((value('AF01') == 2) or (value('AF01') == 4)) {
  question('FF01');
} else {
  question('FF02');
}

Es kann auch aus mehr als 2 Fragen ausgewählt werden.

if (value('AF01') == 1) {
  question('FF01');
} elseif ((value('AF01') == 2) or (value('AF01') == 4)) {
  question('FF02');
} else {
  question('FF03');
}

Inhalte variieren

Anstatt von Fragen können auch Inhalte, z.B. Stimuli variiert werden. Mehr dazu auch im Kapitel Randomisierung. Im folgenden Beispiel wird – abhängig vom Code in Variable AF01 – entweder der Textbaustein mit der Kennung „stimulus1“ oder „stimulus2“ angezeigt.

if ((value('AF01') == 2) or (value('AF01') == 4)) {
  text('stimulus1');
} else {
  text('stimulus2');
}

Seiten überpringen

Beim Fragebogen zusammenstellen wählen Sie nun die Seite, bei der es bei einem „nein“ weitergehen soll. Für diese Seite tragen Sie eine Kennung ein, z.B. „keinTV“ (Eine Kennung für eine Seite vergeben).

Anschließend gehen Sie auf die Seite, wo Sie das PHP-Code Element für den Filter platziert haben (s. oben). Schreiben Sie Folgendes hinein:

if (value('PT01') == 2) {
  goToPage('keinTV');
}

Dieser Code prüft mittels value(), ob in der Variable PT01 der Wert 2 gespeichert wurde. Wenn dem so ist, springt die Verarbeitung mitels goToPage() direkt zu jener Seite mit der Kennung „keinTV“. Nachfolgende Inhalte der aktuellen Seite werden ignoriert.

Tipp: Lesen Sie auch den Rest des Kapitels. Es lohnt sich.

Das Schlüsselwort IF

Filter werden in Ihrem Fragebogen durch WENN-DANN-SONST-Beziehungen in einem Element PHP-Code programmiert. In der Programmiersprache PHP heißen die entsprechenden Schlüsselwörter if (WENN-DANN) und else (SONST).

Hinter if steht in Klammern eine so genannte Bedingung. Wenn die Bedingung erfüllt ist, dann wird der Befehl (der wiederum hinter der Bedingung steht) ausgeführt:

if (Bedingung) Befehl

Zusätzlich kann man durch ein else auch noch angeben, was zu tun ist, wenn die Bedingung nicht erfüllt ist:

if (Bedingung) Befehl1 else Befehl2

Um das Ganze übersichtlicher zu machen (und um mehrere Befehle zu erlauben) werden die Befehle in geschweifte Klammern ({ und }) geschrieben. Die Einrückung erleichtert die Lesbarkeit.

if (Bedingung) {
  Befehl 1
} else {
  Befehl 2
}

Fragen im Fragebogen anzeigen oder nicht

Zu einem Filter gehören immer zwei Dinge: Eine Ursache und eine Auswirkung auf den Verlauf des Fragebogens.

  • Die Ursache ist normalerweise eine Antwort des Befragten.
  • Die häufigste Auswirkung ist es, dass eine Frage oder ein ganzer Block von Fragen in Abhängigkeit von der Antwort angezeigt werden oder nicht.

Für das folgende Beispiel nehmen wir an, dass auf Seite 2 im Fragebogen gefragt wurde, wie hoch das monatliche Einkommen sei. Zur Auswahl standen mehrere Kategorien: 1=Kein Einkommen, 2=bis 500 EUR, u.s.w. Diese Frage ist im Folgenden die Filterfrage.

Nun ist es wichtig zu wissen, dass SoSci Survey - während Seite 2 erstellt wird - noch keine Ahnung hat, was der Befragte antworten wird. Die Seite wird zunächst komplett erstellt, dann beim Befragten angezeigt. Dieser wählt eine Option und klickt auf „Weiter“. Erst mit dem Klick auf „Weiter“ wird die Antwort zur Seite 2 an den Befragungsserver übermittelt und gespeichert. Direkt im Anschluss erstellt der Server Seite 3 und übermittelt diese zum Ausfüllen an den Teilnehmern.

Prinzipielle Funktion von Filtern durch Springen

Das Wesentliche dabei: Eine Antwort von Seite 2 ist dem Server erst auf Seite 3 bekannt. Daher darf der Filter zur Frage frühestens auf Seite 3 erstellt werden.

Was aber nun, wenn die Fragen auf Seite 3 nur angezeigt werden sollen, wenn die erste Option ausgewählt wurde? Dann muss man ein wenig um die Ecke denken: Dazu leitet der Filter alle Befragten, die nicht die erste Option gewählt haben, direkt zur Seite 4 weiter.

Nach diesem Prinzip funktionieren die meisten Filter in SoSci Survey: Man überspringt einzelne Fragen oder ganze Seiten. Unter Umständen müssen dafür gleich mehrere Filter hintereinander gehängt werden:

Zeigt man z.B. auf Seite 10 eine Mehrfachauswahl mit 5 Automarken und möchte zu den bekannten Marken jeweils 4 Fragen (über 2 Seiten) stellen, dann braucht man 5 Filter. Der erste Filter prüft auf Seite 11, ob das erste Item der Mehrfachauswahl angeklickt wurde. Falls nicht, springt er direkt weiter zu Seite 13 (Seiten 11 und 12 enthalten die Fragen zur ersten Marke). Auf Seite 13 steht der nächste Filter. Falls die zweite Marke (also das zweite Item) nicht angeklickt wurde, geht es direkt weiter zu Seite 15.

Falls die dritte Marke angekreuzt wurde, dann reagiert der Filter auf Seite 15 nicht. Es werden ganz normal die Fragen der Seite angezeigt und SoSci Survey wartet darauf, dass der Befragte auf „Weiter“ klickt. Dann wird Seite 16 mit den beiden Fragen angezeigt. Erst auf Seite 17 ist der nächste Filter: Entweder er leitet den Teilnehmer direkt weiter zu Seite 19 oder eben nicht…

Überspringen von Fragen durch Filter

Bedingungen

Eine Bedingung steht immer in runden Klammern. Sie kann erfüllt sein oder nicht.

Eine Bedingung kann verschiedene Formen annehmen. Die wichtigsten Form ist der Vergleich zwischen zwei Werten (z.B. zwei Zahlen):

  • == (zwei Ist-gleich-Zeichen) überprüft, ob zwei Werte gleich sind,
  • != (Ausrufezeichen und Gleichheitszeichen) überprüft, ob zwei Werte ungleich sind,
  • > (größer als) überprüft, ob der erste Wert größer ist als der zweite,
  • < (kleiner als) prüft entsprechend, ob der erste Wert kleiner ist als der zweite.

Vorsicht: Um die Gleichheit zu überprüfen muss unbedingt ein doppeltes Gleichheitszeichen (==) verwendet werden! Ein einfaches Gleichheitszeichen (=) würde versuchen, einer Variablen einen Wert zuzuweisen.

Tipp: Wenn Sie prüfen möchten, ob eine Variable z.B. den Wert 1 oder 2 hat, lesen Sie bitte Mehrere Bedingungen verknüpfen.

Seiten überspringen

Noch einmal zurück zum einfachen Beispiel: Auf Seite 1 des Fragebogens wird die Frage AB01 gestellt (eine Auswahl zum Einkommen). Ziel ist es, dass die Fragen EK01 und EK02 nur dann gestellt werden, wenn der Befragte bei der Frage AB01 die erste Option auswählt.

Im Umkehrschluss heißt das: Wenn der Befragte eine Antwortoption größer als 2 (Einkommen bis 500 EUR) wählt, dann wird Seite 3 übersprungen.

Das folgende Beispiel beschreibt einen Fragebogen mit 3 Seiten. Auf Seite 2 wird geprüft, ob die Person mehr als 500 EUR Einkommen angegeben hat. Wenn nicht, dann wird der Rest der Seite übersprungen und es geht direkt auf Seite 3 weiter.

Tipp: Wie man PHP-Code im Fragebogen einfügt beschreibt das Kapitel Einführung in PHP-Code. Die Kurzfassung: Für Filter braucht man PHP-Code. Dafür zieht man ein Element PHP-Code (über der Auswahlliste mit Fragen) in die Seite hinein.

Tipp: Die Fragen muss man natürlich nicht als PHP-Befehle einfügen, man kann sie beim Zusammenstellen des Fragebogens einfach aus der Auswahl in die Seite ziehen (Bequemer programmieren).

Eine Kennung für eine Seite im Fragebogen vergeben

Für die dritte Seite muss man als Kennung „tvkonsum“ angeben, nur so kann man mit goToPage() direkt zur Seite 3 springen.

Die Kennung kann man beim Zusammenstellen des Fragebogens festlegen, wenn man die Seite angeklickt hat: Einfach oben links auf der Seite eintragen.

Eine Seiten-Kennung zuweisen

Umsetzung mit möglichst wenig PHP-Code

Seite 1

Seite 2

Seite 3

Umsetzung mit möglichst viel PHP-Code

Normalerweise wird man PHP-Code im Fragebogen nur dort verwenden, wo man ihn braucht –- so wie oben. Weil sich die Inhalte von Fragebogen-Seite aber so schön kurz im PHP-Code darstellen lassen, werden Sie in der Anleitung auch häufiger die folgende Form finden. Inhaltlich ist die Funktion zur obigen Umsetzung mit wenig PHP-Code identisch.

Seite 1

question('AB01');  // Auswahl monatliches Einkommen

Seite 2

if (value('AB01') > 2) {
  goToPage('tvkonsum');  // Springt direkt weiter zur Seite 3
}
question('EK01');  // Studienfinanzierung
question('EK02');  // Nebeneinkünfte

Seite 3 mit der Kennung „tvkonsum“

// Seite 3 muss die Kennung "tvkonsum" haben
question('TK01');  // Tägliche Fernsehdauer
question('TK02');  // Lieblingssender

Wichtig: Fragen können in die Fragebogen-Seite gezogen oder mittels des Befehls question() im PHP-Code eingebunden werden. Das gleichzeitige Einbinden als Frage-Elemente und im PHP-Code sorgt dafür, dass die Frage doppelt angezeigt wird und Sie entsprechende Fehlermeldungen erhalten.

Tipps zur Funktion value()

  • Es gibt zwei einfache Möglichkeiten um herauszufinden, welcher Wert für eine Antwort gespeichert wird. Einmal die Variablen-Übersicht und zum zweiten den Debug-Modus beim Testen eines Fragebogens (Fragebogen zusammenstellen).
  • Die Funktion value() liefert die Antwort eines Befragten zurück. Allerdings funktioniert das erst, wenn der Befragte die Antwort mit einem Klick auf „Weiter“ abgeschickt hat – also erst auf der nächsten Seite.
  • Alle Funktionen, die speziell von SoSci Survey bereitgestellt werden, sind unter PHP-Funktionen aufgelistet und werden dort erklärt.

Anweisungs-Blöcke

Im Beispiel folgt auf die IF-Bedingung eine geschweifte Klammer ({). Geschweifte Klammern dienen in PHP dazu, mehrere Funktionen/Befehle (z.B. mehrere Fragen) zusammenzufassen. Es ist generell sinnvoll, die Anweisung(en) hinter eine IF-Konstruktion in geschweifte Klammern zu setzen - wenn man keine Klammern verwendet und weitere Befehle einfügt, dann sucht man oft sehr lange nach dem Fehler.

Tipp: Nutzen Sie für jeden Anweisungsblock geschweifte Klammern und rücken Sie den PHP-Code wie im Beispiel mit Leerzeichen ein (die Eingabefelder haben mit Tabulatoren leider noch Probleme). So verlieren Sie auch bei komplexeren Filtern nicht den Überblick und vermeiden Fehler.

Beispiel für Seite 2

if (value('AB01') <= 2) {
  question('AB02');  // Studienfinanzierung
  question('AB03');  // Nebeneinkünfte
} else {
  question('AB04');  // Arbeitszeit pro Woche
  question('AB05');  // Anstellungsverhältnis
  question('AB06');  // Befristung
}
question('AB07');  // Diese Frage sehen wieder alle

Schritt für Schritt

Dieser Abschnitt erklärt nun Schritt für Schritt die Programmierung eines kleinen Filters.

Die Filterfrage

Zurück zur Anwendung von Wenn-Dann-Bedingungen als Filterfragen: Jede Frage kann prinzipiell zur Filterfrage werden. Und zwar immer dann, wenn die Antwort auf die Frage in einer Bedingung verwendet wird. Zunächst muss also eine normale Frage gestellt werden.

  1. Legen Sie im Fragenkatalog eine neue Rubrik an, Kennung „TF“, Beschreibung „Test für Filter“
  2. In der Rubrik legen Sie eine neue Frage an, Beschreibung „Filter-Auswahl“, Typ „Auswahl“
  3. Tragen Sie Folgendes in die Frage TF01 ein:
    1. Fragetext „Haben Sie zu Hause einen Internet-Anschluss?“,
    2. Die Frage muss vollständig beantwortet werden „Ja“.
    3. Dann bitte auf Speichern klicken und
    4. bei der Schnell-Eingabe für Items zwei Items eintragen: „Ja“ und „Nein“.

Eine Auswahl als Filterfrage

Werfen Sie nun einen Blick in die Variablen-Übersicht. Dort finden Sie folgenden Eintrag

Auswahl in der Variablen-Übersicht

Die Kennung für die Frage lautet TF01. Bei der Frage handelt es sich um eine Auswahl, deshalb werden die Antworten direkt unter der Kennung TF01 gespeichert und nicht – wie z.B. bei einer Skala – in den einzelnen Items. Die Variablen-Übersicht verrät auch, welche Werte TF01 annehmen kann: 1 für die Antwort „Ja“ und 2 für die Antwort „Nein“. Außerdem ist noch -9 (die Frage wurde nicht beantwortet) möglich. Tatsächlich sollte das aber nicht vorkommen, weil wir ja eingestellt haben, dass die Frage beantwortet werden muss. Details dazu beschreibt das Kapitel Kodierung und Rückgabewerte.

Erstellen Sie nun unter Fragebogen zusammenstellen einen neuen Fragebogen, Kennung „filter1“, Beschreibung „Meine erste Filterfrage“.

Tipp: Für die Filterfrage wurde die Option Die Frage muss vollständig beantwortet werden aktiviert. Mit dieser Option sollte man generell sehr sparsam umgehen – bei Filtern es aber sinnvoll, auf eine Antwort zu bestehen: Denn hier muss man ja auf Basis der Antwort etwas entscheiden.

Filter zur Auswahl

Um die Frage TF01 nun als Filterfrage zu verwenden, benötigt man den Befehl value(). Damit wird abgefragt, welche Antwort im Fragebogen ausgewählt wurde. Konkret würde value('TF01') also 1 oder 2 liefern (sie muss ja beantwortet werden). Voraussetzung ist, dass die Frage bereits gestellt und die Antwort mit dem Klick auf Weiter abgeschickt und gespeichert wurde.

Wenn die Frage TF01 auf Seite 1 des Fragebogens gestellt wird, so würde ein PHP-Code auf Seite 2 beispielsweise aussehen wie folgt:

if (value('TF01') == 1) {
  question('IN01');  // Art des Internetanschluss: Analog, ISDN, DSL, etc.
  question('IN02');  // Geschäftliche Nutzung des Anschlusses zu Hause?
  question('IN03');  // Internet-Anbieter / Serviceprovider
}
question('AB01'); // Beschäftigungsverhältnis

Die Bedingung überprüft, ob die Antwort gleich 1 war, ob also „Ja“ ausgewählt wurde. Falls diese Bedingung erfüllt ist, werden auf Seite 2 drei Fragen zur heimischen Internet-Nutzung gestellt (IN01 bis IN03).

Alle Befragten – egal ob sie einen Internetanschluss zu Hause haben oder nicht – erhalten außerdem die Frage AB01. Personen ohne Anschluss sehen auf Seite 2 also nur diese eine Frage – Personen mit Anschluss insgesamt 4 Fragen.

Verwendung von else

Durch Verwendung von else könnte zusätzlich z.B. gefragt werden, warum man zu Hause keinen Anschluss hat:

if (value('TF01') == 1) {
  question('IN01');  // Art des Internetanschluss: Analog, ISDN, DSL, etc.
  question('IN02');  // Geschäftliche Nutzung des Anschlusses zu Hause?
  question('IN03');  // Internet-Anbieter / Serviceprovider
} else {
  question('IN04');  // Warum kein Interanschluss zu Hause?
}
question('AB01'); // Beschäftigungsverhältnis

Seiten überspringen

Verwendet man keinen else-Teil, so kann es vorkommen, dass der Befragte eine leere Seite zu Gesicht bekommt. Falls der Befragte auf Seite 1 mit „nein“ antwortet, würden ihm im folgenden Beispiel auf Seite 2 keine Fragen, sondern nur eine leere Seite angezeigt:

if (value('TF_01') == 1) {
  question('IN_01');  // Art des Internetanschluss: Analog, ISDN, DSL, etc.
  question('IN_02');  // Geschäftliche Nutzung des Anschlusses zu Hause?
  question('IN_03');  // Internet-Anbieter / Serviceprovider
}

In diesem und vielen anderen Fällen verwendet man besser den Befehl goToPage(). Dieser Befehl springt direkt weiter zur angegeben Seite im Fragebogen. Im obigen Beispiel ist Seite 2 nur für Personen mit Internetanschluss zu Hause relevant. Alle anderen sollten direkt zu Seite 3 springen.

Damit der goToPage()-Befehl funktioniert, muss man dem Sprungziel (also der Seite, zu der man springen will) eine Kennung geben. Im folgenden Beispiel hat Seite 3 die Kennung "nutzung". Zur folgenden Seite kann man auch mit der Kennung "next" springen.

Die folgenden Beispiele haben dasselbe Ergebnis, denn nach dem goToPage() wird auf der Seite nichts mehr ausgeführt. Der goToPage()-Befehl verlässt die alte Seite und kommt nicht wieder.

Möglichkeit 1: Weiterspringen, wenn nichts zu fragen ist

if (value('TF_01') == 1) {
  question('IN_01');  // Art des Internetanschluss: Analog, ISDN, DSL, etc.
  question('IN_02');  // Geschäftliche Nutzung des Anschlusses zu Hause?
  question('IN_03');  // Internet-Anbieter / Serviceprovider
} else {
  goToPage('nutzung');  // Gleich weiter zu Seite 3 mit Kennung "nutzung"
}

Möglichkeit 2: Überspringen der irrelevanten Fragen

if (value('TF01') != 1) {  // Man könnte hier auch prüfen: value() == 2
  goToPage('nutzung');  // Gleich weiter zu Seite 3 mit Kennung "nutzung"
}
question('IN_01');  // Art des Internetanschluss: Analog, ISDN, DSL, etc.
question('IN_02');  // Geschäftliche Nutzung des Anschlusses zu Hause?
question('IN_03');  // Internet-Anbieter / Serviceprovider

So wie im zweiten Beispiel beschrieben, können natürlich auch mehrere Seiten übersprungen werden.

Tipp: Nach Abfrage einiger Eckdaten sehen Sie, dass ein Teilnehmer nicht zur Zielgruppe der Befragung gehört? Screenout: Ungeeignete Teilnehmer filtern

Tipp: Seit SoSci Survey Version 2.2.02 werden leere Seiten standardmäßig übersprungen. Sie müssen sich um die Problematik leerer Seiten also oftmals keine Gedanken mehr machen.

Die richtige Kennung

Im Beispiel haben Sie eine Auswahl verwendet. Eine einfache Auswahl speichert nur einen einzigen Wert (nämlich die ausgewählte Option), der mit value() anhand der Frage-Kennung (z.B. TF01) abgefragt wird.

Falls Sie Skalen, Texteingaben oder eine Mehrfachauswahl verwenden, müssen Sie aber die Kennung des entsprechenden Items (z.B. TF02_02) und nicht die Kennung der Frage verwenden.

Beispiel für eine Mehrfachauswahl TF02l

Diese Mehrfachauswahl mit der Kennung TF02 hat 4 Items. Das Item mit der Kennung 3 (TF02_03) erfragt, ob der Befragte einen DSL-Zugang hat. Die richtige Kennung finden Sie immer in der Variablen-Übersicht.

Variablen einer Mehrfachauswahl

Die folgende Anzeige erhält man im Debug-Modus, wenn man auf Seite 1 (auf der Frage TF02 angezeigt wird) auf Weiter klickt. Im Beispiel war das erste und das dritte Item angekreuzt.

Debug-Information beim Testen des Fragebogens

In einer Mehrfachauswahl kann jedes Item den Wert 1 (nicht ausgewählt) oder 2 (ausgewählt) annehmen. Möchte man nun auf Seite 2 filtern, ob der Befragte einen DSL-Anschluss hat, so sieht der PHP-Code aus wie folgt:

Filter für eine Mehrfachauswahl

if (value('TF02_03') == 2) {  // Wurde Item 2 angekreuzt?
  question('IN10');  // Geschwindigkeit des Anschlusses
  question('IN11');  // Nutzung von Videokonferenzen
} else {
  question('IN09');  // Zuhause einen anderen Anschluss?
}

Ein großer Nachteil der Mehrfachauswahl ist, dass man nicht überprüfen kann, ob sie der Befragte beantwortet hat. Schließlich kann auch kein Kreuzchen eine korrekte Antwort sein.

Das Problem kann man umgehen, wenn man statt einer Mehrfachauswahl eine 2-stufige Skala verwendet. Beschriftet man das Minimum mit „nein“ und das Maximum mit „ja“ (in der Abbildung ist die Richtung der Skala absteigend, die Ausrichtung der Beschriftung mittig), so erhält man für jedes Item denselben Wert wie in der Mehrfachauswahl (1=nein, 2=ja).

Variablen in einer Skala

Im Kapitel Mindestens ein Item werden einige Tricks erklärt, wie man mit Skalen in Filtern umgehen kann.

Screenout: Ungeeignete Teilnehmer filtern

Falls sich Ihr Fragebogen nur an eine bestimmte Zielgruppe richtet, möchten Sie ungeeignete Teilnehmer vielleicht nach einigen Screening-Fragen frühzeitig verabschieden. Stellen Sie dazu die Screening-Fragen auf den ersten Seiten im Fragebogen und verwenden Sie anschließend einen gewöhnlichen Filter.

  • Mit dem Befehl goToPage('end') können Sie einen Teilnehmer direkt zum Ende des Fragebogens schicken. Das interview wird dabei als „abgeschlossen“ markiert und der Teilnehmer sieht die Verabschiedung der letzten Seite.
  • Mit einer Kombination der Befehle text() und buttonHide() können Sie eine individuelle Verabschiedung anzeigen. Das Interview wird dabei nicht als „abgeschlossen“ markiert. Den Verabschiedungstext speichern Sie als Textbaustein unter Textbausteine und Beschriftung.
// Screenout mit individuellem Text
if (value('AB01') > 3) {
  text('screenout');  // Verabschiedung anzeigen
  buttonHide();  // Weiter-Knopf ausblenden
  pageStop();  // Falls unter dem Filter noch Inhalte auf der Seite folgen
}

Tipp: Sie können durch Wiederholung des Filters unterschiedliche Variablen überprüfen. Mittels bool'scher Operatoren können Sie in einem Filter aber auch mehrere Variablen zugleich prüfen (Mehrere Bedingungen verknüpfen).

Tipp: Einen einfachen Screenout können Sie auch komplett ohne PHP-Code erstellen, wenn der Screenout über eine Auswahlfrage ausgelöst wird. Legen sie dafür im Fragenkatalog einen Text an, der beim Screenout gezeigt werden soll. Anschließend bearbeiten Sie die Screenout-(Auswahl-)Frage und tragen im Karteireiter „Filterfrage“ einen Screenout ein. Dort müssten Sie dann u.a. den zuvor angelegten Text auswählen.

Tipps zu Filtern

Filter sind ein enorm flexibles Werkzeug. Sie können bei Bedarf sogar verschachtelt werden oder komplexe Bedingungen prüfen. Mehr dazu in weiteren Kapiteln (s. unten).

Leider funktionieren Filter gerade am Anfang nicht immer so, wie man es gerne hätte. Wenn es nicht klappt, dann gibt es einige einfache Möglichkeiten, dem Fehler auf die Spur zu kommen:

  • Sehen Sie in der Variablen-Übersicht nach, ob die Kennung der Variable stimmt.
  • Der Filter darf nicht (!) auf derselben Seite stehen wie die Filterfrage. Sonst wird der Filter schon ausgeführt, bevor der Teilnehmer seine Antwort abgeschickt hat.
  • Starten Sie den Fragebogen regelmäßig im Debug-Modus. Dann verrät SoSci Survey nach jedem Klick auf Weiter, welcher Wert unter welcher Kennung gespeichert wurde.
  • Der Debug-Modus ist im Übrigen auch sehr hilfreich, wenn leere Seiten erscheinen oder goToPage()-Befehle scheinbar unsinnige Ergebnisse liefern. Für jeden Sprung mit goToPage() erscheint in der Debug-Information eine Zeile „Erstelle Seite X“.
  • Lassen Sie sich doch einfach von SoSci Survey sagen, was gerade für ein Item/eine Frage gespeichert ist.
    • Sie können sowohl den Wert anzeigen lassen, den value() zurückliefert
      debug('TF02_03');
    • wie auch die Frage beantworten lassen, ob eine Bedingung zutrifft (true) oder nicht (false):
      debug(value('TF02_02') == 2);.
  • Das Springen zu Seiten mit goToPage() ist nur sinnvoll, wenn man dadurch Fragen auslässt. Falls Fragen alternativ gestellt werden, ist es besser, diese direkt in den IF-Block einzubinden.
  • Der Befehl goToPage() springt unmittelbar zur angegeben Seite (nicht erst nach dem Klick auf Weiter) und hängt die neue Seite an die aktuelle Seite an, falls dort schon Fragen angezeigt wurden.
  • Wenn man mit goToPage() zu einer anderen Seite gesprungen ist und diese Seite beantwortet wurde, dann geht es ab dort ganz normal weiter.

Komplexere Filter

Mit den obigen Grundlagen lassen sich bereits die meisten Filter programmieren. Allerdings nicht alle. Die folgenden Kapitel stellen Lösungen für komplexere Filter vor:

de/create/php-filters.txt · Zuletzt geändert: 19.09.2024 21:00 von admin
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Share Alike 4.0 International
Driven by DokuWiki