ExpressionScript-Beispiele
From LimeSurvey Manual
Struktur
Im ersten Teil des Artikels wird beschrieben, wofür Ausdrücke verwendet werden können und wo ein Ausdruck gefunden/hinzugefügt werden kann. Der zweite Teil enthält Beispiele für die Verwendung von Ausdrücken.
Kategorien von Ausdrücken
LimeSurvey verwendet Ausdrücke für die folgenden Zwecke:
Relevanz
Zweck: Fragengruppen/Fragen ausblenden
Die Relevanz steuert, ob eine Fragengruppe oder Frage angezeigt oder ausgeblendet wird. Wenn das Ergebnis des Ausdrucks „wahr" (also 1) ist, wird das Element angezeigt. Andernfalls (wenn das Ergebnis des Ausdrucks „falsch" (also 0) ist) wird das Element ausgeblendet.
| Typ | Zeigt/versteckt | Wo zu finden | Screenshot |
|---|---|---|---|
| Fragengruppe Relevanz | Fragengruppe | Fragengruppe erstellen/bearbeiten -> „Relevanzgleichung:" | 30px |
| Fragenrelevanz | Frage | Frage erstellen/bearbeiten -> „Relevanzgleichung:" | 30px |
| Unterfragerelevanz | Unterfrage | Unterfragen bearbeiten -> „Relevanzgleichung:" | 30px |
Validierung
Zweck: Eingaben/Aktionen zu Fragen/Unterfragen/Antworten validieren
Die Validierung steuert, ob die Eingabe des Befragten in eine Frage oder Aktion gültig ist oder nicht. Wenn das Ergebnis des Ausdrucks „wahr" (also 1) ist, wird die „gute" Klasse auf das Element und die Validierungsnachricht angewendet. Andernfalls, wenn das Ergebnis des Ausdrucks „falsch" (d.h. 0) ist, wird die Klasse „Fehler" auf das Element und die Validierungsnachricht angewendet. Sie können einen Stil für diese Klassen in der template.css deklarieren.
| Type | Validates | Wo zu finden | Screenshot |
|---|---|---|---|
| Fragenvalidierung | question | Frage erstellen/bearbeiten -> „Registerkarte „Logik"" - > „Fragenvalidierungsgleichung" | 30px |
| Unterfragevalidierung | Unterfragen | Frage erstellen/bearbeiten -> „Registerkarte „Logik"" -> „ Unterfragevalidierungsgleichung" | File:Subquestion validation Screenshot.png |
Textausgabe
Zwecke: (etwas tun) und einen Text aufschreiben
Mit einem Ausdruck kann man einen Text schreiben. Sie können beispielsweise etwas testen oder berechnen und die Ausgabe abhängig vom Ergebnis des Tests oder der Berechnung festlegen. Es kann auch verwendet werden, um den Fragetext, die Antworten, die Fragetypen usw. einer verwendeten Frage einzufügen, bevor der Ausdruck verwendet wird. Die Textausgabe kann überall dort eingesetzt werden, wo ein Text angezeigt wird, und kann beliebige Ergebnisse liefern.
| Use Case | Description |
|---|---|
| Micro Tailoring | Passen Sie einen Text an, schreiben Sie z. B. „Herr" oder „Frau", abhängig von einer zuvor gestellten Geschlechtsfrage |
| Berechnung | Berechnen Sie einen Wert und schreiben Sie ihn aus, z. B. „Ihr Familieneinkommen beträgt xxx" |
| Referenz | Fügen Sie einen Text aus einem Element ein, z. B. „Dein Name ist xxx. Wie alt bist du?" |
Antworten werden gespeichert
Zwecke: (etwas tun) (etwas Text schreiben) und etwas in der Datenbank speichern
Der Fragetyp „Gleichung" kann verwendet werden, um etwas in der Datenbank zu speichern. Sie können etwas mit einem Ausdruck machen, die Gleichungsfrage anzeigen (ähnlich einer Textanzeige) und das Ergebnis des Ausdrucks in der Datenbank speichern. Die Antwort wird in der Antworttabelle gespeichert. Anschließend kann das Ergebnis innerhalb der Statistikfunktion verwendet oder auch in eines der von der LimeSurvey-Exportfunktionalität bereitgestellten Formate importiert werden.
Beispiele für Ausdrücke
Fügen Sie eine Antwort aus einer vorherigen Frage ein
Frage zwei (Fragecode „Q01") Wie lange leben Sie schon in der STADT?
Zu tun: Die Antwort aus Frage eins sollte anstelle von „CITY" aus der zweiten Frage verwendet werden.
Einfügen „Wie lange leben Sie schon in {QOO} (Jahren)?" in das Fragetextfeld
Verwenden einer versteckten Gleichungsfrage zum automatischen Ausfüllen einer Antwort
Problem: Stellen Sie sich vor, Sie haben zwei Fragen Q1 und Q2. Q1 fragt die Befragten nach ihrem Alter. Q2 teilt die Befragten in drei Gruppen ein: Alter ist unter 20 Jahre, Alter ist 20, Alter ist größer als 20 Jahre. Also sollte Q2 die Werte „1", „2", „3" verwenden, diese entsprechen den oben genannten Bedingungen. Außerdem sollten wir nicht vergessen, Q2 unsichtbar zu machen (die Frage wird nicht in der Umfrage angezeigt, aber die Werte werden über den „Hintergrundprozess" innerhalb der Antworttabelle angezeigt).
So füllen Sie die Datenbank mit dem Fragetyp Gleichung aus:
- Erstellen Sie zunächst eine Frage mit dem Code Q1 als numerische Eingabefrage.
- Erstellen Sie dann eine weitere Frage mit dem Code Q2 als Gleichungsfrage.
- Setzen Sie im Kapitel „Anzeigeeinstellungen" von Q2:
- das Feld „Diese Frage immer ausblenden" auf „Ein"
- und geben Sie im Feld „Gleichung" den Ausdruck ein:
{if(Q1.NAOK < 20, „1", if(Q1.NAOK > 20, „3", „2"))}
Erstellen Sie eine Zusammenfassungsseite mit Platzhaltern
Dieses Tutorial zeigt, wie Sie am Ende der Umfrage eine Übersicht erstellen können, in der alle Fragen und Antworten über ExpressionScript-Platzhalter aufgelistet werden. Es wird auch gezeigt, wie Sie eine solche Übersicht auf die beantworteten Fragen beschränken können.
Unser Beispiel kann hier heruntergeladen werden: Umfragebeispiel für Umfrageplatzhalter.
Hier verwendete Fragetypen:
1. Single-Choice-Fragen / einzelne Text-/numerische Fragen
- Liste (Dropdown)
- Liste (Radio) [L]
- Ja/Nein [Y]
- Langer Freitext [T]
- Kurzer Freitext [S]
- Numerische Eingabe [N]
- Gleichung [*]
2. Frage mit Unterfragen
- Mehrfacher Kurztext [Q]
- Mehrfachauswahl [M]
- Array [F]
- Array (Ja/Nein/Unsicher) [C]
- Array (10-Punkte-Auswahl) [B]
3. Fragen mit 2 Skalen
- Array Dual-Skala [1]
4. Fragen mit X- und Y-Skalen
- Array (Zahlen) [:]
5. Maskenfragen
- Textanzeige [X]
In diesem einfachen Beispiel ist unsere Übersicht eine einfache Liste mit:
- Fragetext: Antwort des Benutzers
Single-Choice-Fragen / einzelne Text-/numerische Fragen
Für alle diese Fragetypen speichert Limesurvey eine einzige Antwort:
- Liste (Dropdown)
- Liste (Radio)
- Liste mit Kommentar
- 5-Punkte-Auswahl
- Ja/Nein
- Kurzer Freitext
- Langer Freitext
- Riesiger Freitext
- Numerische Eingabe
- Gleichung
- Datum
- Geschlecht
Angenommen, der Fragecode der Frage ist q1, können wir den Fragetext und die Antwort wie folgt referenzieren:
- {q1.question}: {q1.shown}
Beispiel:
- Wie alt bist du?: 25
Wenn Sie überprüfen möchten, ob diese Frage beantwortet wurde, können Sie Ihrer Ausgabe eine IF-Anweisung hinzufügen:
{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}
Dies „übersetzt" zu: WENN die Frage mit dem Code q1 nicht leer ist, wird „-" UND der Fragetext UND „:" UND der Antworttext ausgegeben (die Funktion „join()" verbindet Elemente als neue Zeichenfolge; ELSE: Nichts ausgeben („ " bedeutet leere Zeichenfolge).
Frage mit Unterfragen
Für alle diese Fragetypen verwendet LimeSurvey Unterfragen:
- Mehrfacher Kurztext
- Mehrfachauswahl
- Mehrfachauswahl mit Kommentaren
- Array
- Array (5-Punkte-Wahl)
- Array (10-Punkte-Wahl)
- Array (Ja /Nein/Unsicher)
- Array (Erhöhen/Gleich/Abnehmen)
- Array nach Spalte
Angenommen, der Fragecode der Frage ist q2 und die Unterfragen sind mit SQ001, SQ002 nummeriert (automatische Nummerierung erfolgt durch LimeSurvey), können wir den Fragetext und die Antwort wie folgt referenzieren:
- {q2_SQ001.question}: {q2_SQ001.shown}
- {q2_SQ002.question}: {q2_SQ002.shown}
Bei Multiple-Choice-Fragen ist es sinnvoll, jetzt den Text der angekreuzten Teilfrage anzuzeigen, aber für jede ausgewählte Option ein Y anzuzeigen:
- {q2_SQ001.question}: {q2_SQ001}
- {q2_SQ002.question}: {q2_SQ002}
...
Beachten Sie, dass es derzeit nicht möglich ist, den Fragetext von Fragen mit Unterfragen auszugeben, siehe diese Funktionsanfrage.
Beispiel 1 (vorausgesetzt, der Fragetyp ist Multiple Choice)
- Kennen Sie diese Automarken?
-- Mercedes: Y
-- Audi: N
-- Volvo: Y
Wenn Sie nur markierte Elemente ausgeben möchten, können Sie Ihre Ausgabe mit einer IF-Anweisung umgeben und den Kontrollkästchenwert prüfen:
{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }
Verwenden Sie die Funktion listifop , wenn Sie eine Liste nur der ausgewählten Elemente ausgeben möchten, z. B.: Mercedes, Volvo
{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }
Dabei erstreckt sich that.q2 auf alle Unterfragen von q2. Weitere Einzelheiten finden Sie unter self, this and that.
Beispiel 2 (vorausgesetzt, der Fragetyp ist Array (10-Punkte-Auswahl))
- Bitte bewerten Sie die Qualität der unten aufgeführten Automarken auf einer Skala von 1=sehr schlecht bis 10=sehr gut?
-- Mercedes: 7
-- Audi: 9
-- Volvo: 9
Wenn Sie nur bewertete Elemente ausgeben möchten, können Sie Ihrer Ausgabe eine IF-Anweisung hinzufügen und prüfen, ob die aktuelle Unterfrage beantwortet wurde, indem Sie Folgendes verwenden:
{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }
Verwenden Sie die listifop- Funktion, wenn Sie beispielsweise nur eine Liste der ausgewählten Elemente ausgeben möchten, die größer als acht sind, z. B.: Audi / Volvo
{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }
Frage mit zwei Skalen
Nehmen wir an, dass die folgenden Codes verwendet werden:
- Fragecode: q4
- Unterfragecodes: SQ001, SQ002, ...
- Antwortcodes Skala 1: A1, A2, ...
- Antwortcodes Skala 2: B1, B2, ...
Lassen Sie uns die Ergebnisse für beide Skalen und die ersten beiden Unterfragen ausgeben:
- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}
- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}
Um den Unterfragetext auszugeben, müssen Sie die Skalen-ID zum Platzhalter hinzufügen (obwohl die Texte für beide Skalen gleich sind). Anstelle von {q4_SQ001.question} müssen wir also {q4_SQ001_0.question} oder {q4_SQ001_1.question} verwenden.
Wenn Sie die Ergebnisse von Unterfragen mit mindestens einer Antwort exportieren/anzeigen möchten, verwenden Sie diese Syntax für jede Unterfrage:
{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}
Frage mit X- und Y-Skalen
Dies gilt für alle Matrixfragen, die eine Antwort für jede Zelle zulassen (nicht nur für jede Zeile wie zuvor gezeigt):
- Array-Texte
- Array-Nummern
Vermutete verwendete Codes:
- Fragecode: q5
- Unterfragecodes: SQ001, SQ002, ...
- Antwortcodes: A1, A2, ...
Um auf das Ergebnis einer bestimmten Unterfrage aus einer bestimmten Spalte zu verweisen, müssen Sie QuestionCode verwenden. '_' . SubQuestionCode . '_' . Antwortcode. Beispiel für den Verweis auf die Antwort der dritten Unterfrage und zweiten Spalte: q5_SQ003_A2.
Lassen Sie uns die Ergebnisse für die Spalten 1–3 der ersten beiden Unterfragen ausgeben:
- {q5_SQ001_A1.question}: {q5_SQ001_A1.shown} | {q5_SQ001_A2.shown} | {q5_SQ001_A3.shown}
- {q5_SQ002_A1.question}: {q5_SQ002_A1.shown} | {q5_SQ002_A2.shown} | {q5_SQ002_A3.shown}
Da bei diesen Fragetypen jede Zelle (Kombination aus X- und Y-Achsen) einer Antwortoption entspricht, muss für jede Zelle ein Test auf vorhandene Daten durchgeführt werden. Beispiel:
{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}
Frage ausblenden, wenn die Antwort der vorherigen Frage leer ist
Frage zwei: Fragetext „{Name}, wie alt bist du?"
Zu tun: Frage zwei ausblenden, wenn das Textfeld von Frage eins leer ist
Fügen Sie „!is_empty(name)" in „Relevanzgleichung:"
Fragengruppe ausblenden, wenn die Antwort auf die vorherige Frage Ja oder Nein lautet
Seite zwei, Fragengruppe zwei: Titel „Über Ihr(e) Haustier(e)"
Zu tun: Fragengruppe zwei ein-/ausblenden, wenn die Antwort auf Frage eins Ja/Nein
Fügen Sie „PET == „Y"" in „Relevanzgleichung:" ein.
Anzeigewert eines Eingabefragefelds mit mehreren Antworten
Frage zwei: Fragecode „ReportChildAge" Fragetext „Über Ihr erstes Kind: – KIND1 ist ALTER1."
Fügen Sie diesen Text in die Beschreibung ein: „Über Ihr erstes Kind: – {AskChildAge_Child1.question} ist {AskChildAge_Child1.value}."
Überprüfen Sie die Anzahl der angekreuzten Kästchen pro Zeile für eine „Array (Zahlen)-Kontrollkästchen"-Frage
Wenn Sie alle drei Zeilen (A, B, C) prüfen möchten, können Sie den Ausdruck mit „&&" verbinden:
(Summe(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X)
&& (Summe(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= X)
&& (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= X)
Fügen Sie den obigen Ausdruck in die „Fragenvalidierungsgleichung" in den erweiterten Frageneinstellungen ein (möglicherweise müssen Sie die Variablenbenennung anpassen!).
Differenz zwischen zwei Daten berechnen
Frage zwei (Datum/Uhrzeit, Code: datetoday): Welches Datum ist heute?
Frage drei (Klassiker): Sie sind XXXX Tage alt.
Aufgabe: Berechnen und zeigen Sie die Anzahl der Tage zwischen dem in Frage 1 angegebenen Datum und der Frage 2 an.
Anstatt nach „datetoday" zu fragen, können Sie auch strtotime('now') oder einfach time() verwenden, was direkt die Anzahl der Sekunden von Januar 1970 bis jetzt zurückgibt (dh den Zeitpunkt, zu dem die Umfrage durchgeführt wurde). So können Sie mit der Gleichung {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365,25} schnell das Alter einer Person in Jahren ermitteln. In jedem dieser Fälle ist es wichtig, dass das Datum eingegeben wird in einem richtigen Format, sonst funktioniert die Funktion strtotime() nicht richtig.
Fügen Sie im Fragetext der Standardfrage Folgendes ein: „Am {datetoday} waren Sie {(strtotime(today)-strtotime(dob))/60/60/24} Tage Tage alt."
Bitte beachten Sie: Die Funktion strtotime kann mit VIELEN, aber nicht mit allen Datumsformaten funktionieren. Wenn Sie auf Probleme stoßen, stellen Sie das Datumsformat Ihrer Umfrage auf mm/dd/yyyy oder yyyy-mm-dd oder dd.mm.yyyy"
ExpressionScript für Bewertungen verwenden
Hier ist ein weiteres Beispiel für die Verwendung des ExpressionScript mit Array-Typ-Fragen und Bewertungen:</ br>
Nehmen wir an, Sie haben zwei Array-Fragen und möchten die Ergebnisse der Berechnungsdaten in Ihrer Datenbank speichern. Es ist eigentlich ganz einfach: Sie müssen Ihre Arrays erstellen und testen und eine Dummy-Antwort senden, um zu sehen, ob es funktioniert und Ihnen die Ergebnisse auf der fertigen Seite liefert.
Implementierungsdetails:
- Fügen Sie eine Frage vom Typ Gleichung hinzu
- Fügen Sie die folgende Zeile hinzu, vorausgesetzt, dass Q1 Ihr Array-Fragecode ist, während Q2 der zweite ist:
{Summe(Q1_SQ001.value,Q2_SQ001.value)}
Beachten Sie, dass SQ001 der Standardcode für jede Unterfrage ist. Wenn Sie den Unterfragecode ändern, passen Sie die obige Gleichung entsprechend an.
Verwendung von em_validation_q im Array
Sie können die Fragenvalidierungsgleichung verwenden, um ein Array mit einer beliebigen Bedingung zu steuern.
Implementierungsdetails:
- für das erste Array: Array mit einfacher Auswahl
- Der Fragecode ist ARRAY
- Der Unterfragecode ist SQ01, SQ02, SQ03 und SQ04
** Aktualisieren Sie die Validierungsgleichung für die gesamte Frage und setzen Sie sie
!is_empty(ARRAY_SQ01) und !is_empty(ARRAY_SQ03)
- für das zweite Array: Textarray
- Der Fragecode ist ARRAYTEXT
- Die Codes der Unterfragen auf der Y-Achse sind SY01, SY02, SY03 und SY04
- Aktualisieren Sie die Validierungsgleichung für die gesamte Frage und fügen Sie
count(self.sq_SY01 >= 1) und count(self.sq_SY03 >= 3)
ein