ExpressionScript-Beispielumfragen
From LimeSurvey Manual
Einleitung
Der beste Weg, den Umgang mit ExpressionScript zu erlernen, besteht darin, mit Arbeitsbeispielen herumzuspielen und sie an Ihre Bedürfnisse anzupassen.
Nachfolgend finden Sie eine Reihe von Beispielumfragen, um zu demonstrieren (und zu testen), wie das EM zur Verbesserung Ihrer Umfrage verwendet werden kann. Diese Umfragen finden Sie im Ordner /docs/demosurveys der Distribution.
Relevanz, Tailoring und Gleichungen
Übersicht
Das folgende Beispiel berechnet den BMI (Body-Mass-Index) jedes Befragten. Unten sehen Sie die Funktionen, die in diesem Beispiel demonstriert werden.
EM-Funktionen demonstriert
- Relevanz - Unterstützung für leistungsstarke bedingte Logik;
- Piping / Tailoring - bietet die Möglichkeit, Antworten und Fragemetadaten weiterzuleiten oder anzupassen;
- Dynamic Tailoring - beachten Sie, dass Berichte auf der Seite geändert werden, wenn Sie Fragen beantworten;
- Micro-Tailoring - bedingtes Anpassen innerhalb von Sätzen und Berichten mithilfe von if()-Anweisungen;
- Gleichungen - ein neuer Fragetyp, mit dem Sie Berechnungen durchführen und die Ergebnisse in der Datenbank speichern können, auch wenn die Berechnung ausgeblendet ist;
- Bedingte Validierung – Validierungskriterien, wie z. B. der minimal zulässige Wert, können bedingt sein – z. B. basierend auf Gleichungen.
Screenshots
In diesem Beispiel wird der Body-Mass-Index berechnet, eine Berechnung Ihres Gewichts und Ihrer Größe, um festzustellen, ob Sie untergewichtig, normalgewichtig, übergewichtig oder fettleibig sind. Beachten Sie, dass zunächst nur die vier Pflichtfragen angezeigt werden:
Sobald Sie Ihre Informationen eingegeben haben (und wählen können, ob Sie metrische oder nicht metrische Einheiten verwenden möchten), wird ein maßgeschneiderter Bericht angezeigt, der Ihre Eingaben zusammenfasst und Ihnen Ihren Gewichtsstatus mitteilt:
Hier ist ein anderes Beispiel, bei dem nichtmetrische Einheiten verwendet werden, um zu zeigen, wie sich das Ergebnis dynamisch ändert:
Auf der internen Ebene gibt es versteckte Fragen vom Typ Gleichung, die die Daten bei Bedarf in Metriken umwandeln und die Metrikgröße, das Gewicht, den BMI und den Gewichtsstatus in der Datenbank speichern, ohne dass benutzerdefiniertes JavaScript erforderlich ist.
In der nächsten Reihe von Beispielen sehen Sie, wie Sie mathematische und andere Funktionen in maßgeschneiderten Berichten verwenden können. So sieht die Seite aus, bevor Sie Daten eingeben. Es gibt eine bedingte Logik, um leere Zellen anzuzeigen, wenn keine (oder nicht numerischen) Daten eingegeben werden, anstatt „NaN“ oder „Durch Null dividieren“ anzuzeigen.
Wenn Zahlen eingegeben werden, ändert sich der Bericht auf der Seite und zeigt die durchgeführte Berechnung und ihr Ergebnis an.
In dieser Beispielbefragung gibt es viele weitere Beispiele. Der folgende Screenshot zeigt beispielsweise eine von Dutzenden Möglichkeiten, wie Sie die Seite „Dynamische Relevanz“ ausfüllen können. Probieren Sie, wie im Hilfetext vermerkt, verschiedene Altersgruppen und vor allem unlogische Kombinationen von Antworten aus, um die amüsanten Meldungen zu sehen, die unten generiert werden. Beachten Sie außerdem, dass, wenn Sie angeben, dass Sie mehr als ein Kind haben, in der Nachricht „Ich hoffe, dass Ihnen das Spielen mit Ihren Dies zeigt, wie Sie Sätze ganz einfach mikrozuschneiden können, um sie an das Geschlecht und/oder die Anzahl Ihrer Probanden anzupassen. Sie können sogar Verben einfach konjugieren und Substantive basierend auf Geschlecht und Numerus deklinieren.
Download
Um auf das Umfragebeispiel zuzugreifen, klicken Sie bitte auf den folgenden Link: LS3_em_tailoring.zip.
Beispielzählung
Übersicht
Dies ist ein Volkszählungsbeispiel, bei dem gefragt wird, wie viele Personen in Ihrem Haushalt leben.
Es zeigt, wie die Relevanz auf Gruppenebene die Implementierung einer „Schleife“ von Fragen erleichtern kann. Nachdem ich die Gruppe für Person 1 erstellt hatte, exportierte ich die Gruppe. Da ich Qcode-Variablennamen wie p1_name anstelle des SGQA-Codes verwendet habe, konnte ich einen Texteditor verwenden, um die Gruppe mehrmals schnell zu bearbeiten und erneut zu importieren (z. B. dauerte das Bearbeiten und erneute Importieren jeder Wiederholungsgruppe etwa 10 Sekunden, um sicherzustellen, dass alle Variablen eindeutige Variablennamen hatten und die Logik auf Gruppenebene korrekt war).
Sie können auch die Funktion Frage kopieren verwenden, diese ist jedoch nicht so schnell wie die oben vorgeschlagene Option.
Dies zeigt auch, wie Sie verhindern können, dass die Meldung „Fertig“ angezeigt wird, bis die Umfrage wirklich abgeschlossen ist (z. B. wenn alle benötigten Gruppen abgeschlossen sind).
EM-Funktionen demonstriert
- Relevanz auf Gruppenebene - Die Folgegruppen (Person 1-5) werden nur für die angegebene Anzahl von Mitbewohnern angezeigt;
- Anpassung - Der Abschlussbericht fasst die demografischen Daten für jeden Mitbewohner zusammen;
- Progressive Fragenanzeige - Ob im Gruppen- oder All-in-One-Modus, nachfolgende Fragen werden erst angezeigt, sobald die vorherigen beantwortet wurden.
Screenshots
Die Umfrage generiert einen maßgeschneiderten Bericht, der die demografischen Daten der angegebenen Anzahl von Mitbewohnern zeigt:
Wenn Sie in den Modus „Fragen nacheinander“ wechseln, sehen Sie, dass der Index die Fragen individuell anpasst. Da der Benutzer angibt, dass es sich bei der Person um eine Frau handelt, fragt er: „Wie heißt sie?“. Und da wir mit „Mary“ geantwortet haben, lautet die nächste Frage: „Wie alt ist Mary?“
Herunterladen
Um das Umfragebeispiel herunterzuladen, klicken Sie hier: LS3_group_relevance.zip.
Kaskadierende Array-Filter
Übersicht
Diese Umfrage basiert auf dem Design einer Umfrage mit freundlicher Genehmigung von Joy Lane Research, LLC.
Screenshots
Beachten Sie im Folgenden Folgendes:
- Q02 zeigt nur die in Q01 überprüfte Produktgruppe (mithilfe von array_filter)
- Q02 zeigt auch „Ein anderes Produkt“ an, den Text, der in das Feld „Andere elektronische Produkte“ in Q01 eingegeben wurde
- Q04 zeigt nur Produkte aus Q02 an, die überprüft wurden (damit der Array-Filter kaskadiert)
- Q05 zeigt nur Produkte aus Q02 an, die in Q02 nicht überprüft wurden (mithilfe eines kaskadierten array_filter_exclude)
Herunterladen
Klicken Sie auf den folgenden Link, um das obige Beispiel herunterzuladen: LS2_cascading_array_filter-Umfragebeispiel.
Piping/Anpassung unter Verwendung aller Fragetypen und Attribute
Übersicht
Wenn Sie nicht wissen, wie Sie Ihre Variablen benennen sollen (SGQA vs. Qcodes), sind Sie nicht allein. Obwohl in der Hauptdokumentation beschrieben wird, wie man Qcode-Variablennamen erstellt, gibt es nichts Besseres, als es in einer funktionierenden Demo zu sehen. Diese Umfrage zeigt, wie Sie mit ExpressionScript auf Frageattribute und Antworten zugreifen können.
Inhalt
- Beispiele für jeden Fragetyp
- Alle Fragetypen, die „andere“ verwenden können, sind enthalten, damit Sie sehen können, wie sich dies auf die Variablenbenennung auswirkt
- Standardwerte für alle Fragetypen, die Standardwerte akzeptieren
- Anpassung - On-Page- und Off-Page-Berichte mit allen 16 verfügbaren EM-Punktnotationssuffixen
- Diese Berichte zeigen alle aktuell eingegebenen Daten (zeigen Ihnen also, wie Sie anstelle der Druckberichte Ihre eigenen druckbaren Berichte auf dem Antwortbildschirm für Benutzer erstellen können)
- Korrekte Qcode- und SGQA-Benennung aller Variablen
Screenshots
Da es sich um eine umfangreiche Umfrage handelt, haben wir uns entschieden, keine Screenshots beizufügen. Bitte laden Sie es stattdessen herunter und spielen Sie damit.
Download
Klicken Sie auf den folgenden Link, um die Umfrage herunterzuladen: LS3_EM_question_attributes.lss
Traditionelle Validierung, neu konzipiert
Übersicht
Dies zeigt alle Validierungstypen, die Ausdrücke verwenden, und wie sie sich auf die einzelnen Fragetypen auswirken, die die Validierung unterstützen. In vielen Fällen werden die Validierungstipps ausgeblendet und nur dann angezeigt, wenn eine Frage die Validierungskriterien nicht erfüllt (sie verschwinden also auch, sobald die Frage die Validierungskriterien erfüllt).
Validierungstypen demonstriert
- min_num_value_n – Mindestwert für eine Antwort
- max_num_value_n – Höchstwert für eine Antwort
- min_answers – Minimum Anzahl der erforderlichen Antworten
- max_answers Maximale Anzahl zulässiger Antworten
- multiflexible_min – zulässiger Mindestwert für eine Antwort (für Fragetyp „Multiflexi-Zahlen“)
- multiflexible_max – maximal zulässiger Wert für eine Antwort (für Multiflexi-Zahlen-Fragetyp)
- min_num_value – minimal zulässige Summe über alle Antworten für die Frage
- max_num_value – maximal zulässige Summe aller Antworten für die Frage
- equals_num_value – die Summe aller Antworten für die Frage muss diesem Wert entsprechen
- validation – Dies ist die reguläre Ausdrucksvalidierung für die Frage – sie kann auf einzelne Zellen angewendet werden
Screenshots
Bei Verwendung neuer CSS-Stile wird für jeden Validierungstyp ein eigener Tipp angezeigt. Wenn sie angezeigt werden, können sie über die Option hide_tip ausgeblendet werden. Die Standardoption besteht darin, sie in roter Schrift anzuzeigen, wenn die Frage die Validierungskriterien nicht erfüllt, und in grüner Schrift, wenn sie diese erfüllt:
Ein Benutzer kann keine Seite mit Validierungsfehlern einreichen. Er wird sofort gewarnt, wenn er falsche Informationen eingegeben hat:
Die Validierung kann auf einzelne Zellen innerhalb eines Arrays angewendet werden, wie in diesem Beispiel, wo die Validierung regulärer Ausdrücke sicherstellt, dass es sich bei jedem Eintrag um eine ordnungsgemäß formatierte US-Telefonnummer einschließlich Ortsvorwahl handelt.
Herunterladen
Um das obige Beispiel herunterzuladen, klicken Sie auf den folgenden Link: LS3_Validation_tests.zip.
Validierungsgleichungen
Übersicht
Manchmal benötigen Sie eine benutzerdefinierte Validierung, die mit den herkömmlichen Min/Max-Kriterien nicht erreicht werden kann. Dazu müssen Sie die Optionen em_validation_q und em_validation_sq verwenden, mit denen Sie komplexe Validierungsgleichungen auf Fragen- bzw. Unterfragenebene erstellen können.
EM-Funktionen demonstriert
- em_validation_q – Dies ist eine Gleichung, die bestimmt, ob die gesamte Frage gültig ist
- em_validation_q_tip – Dies ist die Meldung, die angezeigt wird, wenn die Frage die em_validation_q-Kriterien nicht erfüllt
- em_validation_sq – Dies ist die Gleichung, die bestimmt, ob jede Unterfrage (Array-Zelle) gültig ist
- em_validation_sq_tip – Dies ist die Meldung, die angezeigt werden soll wenn eine der Unterfragen ungültig ist.
Wenn em_validation_sq verwendet wird und eine Zelle ungültig ist, wird die Hintergrundfarbe dieser Zelle im Allgemeinen rot, um anzuzeigen, dass ein Fehler vorliegt.
Screenshots
Diese Frage stellt sicher, dass Sie das Alter Ihrer Kinder in absteigender Reihenfolge eingeben, indem Sie diese Validierungsgleichung anwenden:
q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4
Im folgenden Beispiel stellt die Validierung sicher, dass nicht mehr als drei Fragen in einer bestimmten Zeile beantwortet werden, indem diese Validierungsgleichung angewendet wird:
(sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= 3) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= 3) && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) < = 3)
Sie können dies auch wie folgt schreiben: LimeSurvey konvertiert es zur Laufzeit automatisch in den oben aufgeführten Ausdruck.
(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)
Herunterladen
Um das in den obigen Beispielen verwendete Umfragebeispiel herunterzuladen, klicken Sie auf den folgenden Link: ls2_test_em_sq_validation.lss.
Relevanz der Unterfrage
Übersicht
Dies zeigt, wie array_filter und Validierungskriterien interagieren können. Bei Validierungen, die sich auf Summen beziehen, werden nur relevante (sichtbare) Werte berücksichtigt.
EM-Funktionen demonstriert
Es zeigt auch eine dynamische Berichterstattung über die Anzahl der in den Kernfragen beantworteten Fragen.
Screenshots
Durch Ändern der Anzahl der sichtbaren Zeilen wird die Summe dynamisch geändert. Durch das Markieren einer Unterfrage als irrelevant wird ihr Wert nicht gelöscht. Wenn es vielmehr irrelevant ist, tragen seine Werte zu keiner Gleichung bei.
Beachten Sie, was passiert, wenn wir die „Fünfte Unterfrage“ für die erste Frage „Welche Zeilen sollen unten angezeigt werden“ überprüfen. Beachten Sie, dass die Summe für die zweite Frage „Geben Sie einige Zahlen ein“ jetzt 5 beträgt. Auch wenn Unterfrage 5 für diese Frage immer noch den Wert 14 hat (z. B. wenn Sie das Häkchen bei der fünften Unterfrage entfernen, sehen Sie wieder den Wert 14), trägt dieser Wert nicht zur Summe bei, da er derzeit irrelevant ist. Alle irrelevanten Daten werden bei der Übermittlung gelöscht (in der Datenbank auf NULL gesetzt), bleiben aber auf der Seite verfügbar, falls Benutzer ihre Meinung zu den Antworten ändern möchten oder müssen.
Herunterladen
Um unser Beispiel herunterzuladen, klicken Sie hier: ls2_subquestion_relevance.lss.
Komma als Basistrennzeichen (Dezimalpunkt) verwenden
Übersicht
Das ExpressionScript stellt sicher, dass nur gültige Zahlen in numerische Felder eingegeben werden können. Wenn Sie eine ungültige Zahl eingeben, werden Sie gewarnt, dass etwas nicht stimmt (z. B. wird im Fall des fruity themes die gesamte Frage „rot markiert“).
Beachten Sie, dass die numerischen Werte in der Datenbank immer so konvertiert werden, dass ein Punkt als Basistrennzeichen verwendet wird. Auf diese Weise funktionieren die statistischen Analysen ordnungsgemäß.
Um das Basistrennzeichen zu ändern, greifen Sie auf die Optionen Textelemente auf der Registerkarte Einstellungen zu und suchen Sie nach der Funktionalität Dezimalzeichen.
Fragetypen mit Radix-Trennzeichen
- Numerische Eingabe [ N]
- Mehrfache numerische Eingabe [ K]
- Array (Zahlen) [ :]
- Array (Texte) [ ;], bei Verwendung des Attributs numbers_only
- Liste (Radio) [ L], bei Verwendung des Attributs other_numbers_only
- Kurzer Freitext [ S], bei Verwendung des Attributs numbers_only
- Mehrfacher Kurztext [ Q], bei Verwendung des Attributs numbers_only
- Multiple Choice [ M], bei Verwendung des Attributs other_numbers_only
- Multiple Choice mit Kommentaren [ P], wenn das Attribut other_numbers_only verwendet wird
Screenshots
In den folgenden Screenshots können Sie erkennen, dass Komma als Basistrennzeichen verwendet werden kann.
Herunterladen
Um das obige Beispiel herunterzuladen, klicken Sie auf den folgenden Link: ls2_comma_as_radix_separator.lss.
Randomisierungsgruppen
Übersicht
Diese Umfrage zeigt, wie man das Attribut „random_group“ nutzt.
Wenn dieses Attribut verwendet wird, wird die Reihenfolge der Fragen bei jedem Start der Umfrage randomisiert. Sobald die Umfrage jedoch gestartet wird, bleibt die Randomisierungsreihenfolge festgelegt, auch wenn Sie die Sprache wechseln.
Screenshots
Schauen wir uns gemeinsam das folgende Beispiel an. Die erste zufällige Frage auf der Seite lautet entweder Q1, Q4 oder Q7. Die zweite zufällige Frage auf der Seite lautet entweder Q2, Q5 oder Q8.
Hier ist die Randomisierung, die beim ersten Test dieser Umfrage erstellt wurde.
Beim zweiten Test der Umfrage wurde eine andere Randomisierung generiert.
Aber als ich auf Französisch wechselte (ohne die Umfrage neu zu starten), blieb die Randomisierungsreihenfolge erhalten.
Herunterladen
Um das obige Beispiel herunterzuladen, klicken Sie auf den folgenden Link: Randomization_Group_Test.lss
Stellen Sie nach dem Zufallsprinzip eine Frage pro Gruppe
Übersicht
Diese Umfrage zeigt, wie Sie eine Umfrage so konfigurieren können, dass pro Gruppe eine Frage nach dem Zufallsprinzip angezeigt wird. Darin gibt es 5 Gruppen zu je 6 Fragen. Zu Beginn werden in Gruppe 0 fünf versteckte Gleichungsfragen namens ask1-ask5 ausgefüllt. Jede hat den Wert {floor(rand(1,6.9999))} im Fragetextfeld, was bedeutet, dass die Variablen ask1-ask5 jeweils einen Wert zwischen 1 und 6 haben. Dann hat jede Frage in der Gruppe einen Relevanzgleichung wie „ask1==N“, wobei N die N-te Frage in der Gruppe ist (die dritte Frage in Gruppe 1 hat also die Relevanzgleichung „ask1==3“).
Diese Umfrage funktioniert gleichermaßen gut im Einzelumfrage-, Gruppen-für-Gruppen- und Frage-für-Frage-Modus. Da die Randomisierung in der ersten Gruppe festgelegt ist und diese Gruppe effektiv ausgeblendet ist (da alle Ask1-Ask5-Fragen ausgeblendet sind), bleibt die Randomisierung für das Subjekt gleich; aber jedes unterschiedliche Subjekt wird eine unterschiedliche Randomisierung haben.
Vorgeführte Funktionen
- Gleichungsfragetyp
- Randomisierungsfunktionen
- Bedingte (wenn) Funktion
Screenshots
Dies ist Gruppe0, die den Gleichungsfragetyp verwendet, um für jede Gruppe zufällige Werte von 1 bis 6 auszuwählen (mit Ausnahme der letzten Gruppe, die nur 4 Fragen enthält). Beachten Sie, dass die Funktion „if()“ zunächst prüft, ob ask1 bereits festgelegt wurde, und wenn ja, diesen Wert verwendet. Wenn der Wert nicht festgelegt wurde, wird ein Zufallswert verwendet, um den Wert von ask1 festzulegen.
Diese Gruppe zeigt, wie die Variable (ask4) von Gruppe0 verwendet wird, um zu steuern, welche Frage innerhalb der vierten Gruppe sichtbar ist.
Herunterladen
Um das obige Umfragebeispiel herunterzuladen, klicken Sie hier: Zufällige Fragen innerhalb eines Gruppenumfragebeispiels.
Stellen Sie einer Gruppe zufällig eine bestimmte Anzahl von Fragen (eine Teilmenge der Fragen)
Übersicht
Diese Umfrage zeigt, wie man einer Gruppe eine zufällige Teilmenge von Fragen stellt. Zeigen Sie beispielsweise 5 zufällige Fragen von 10 Fragen innerhalb einer Gruppe an.
Die Umfrage besteht aus einer Gruppe mit 10 Fragen. Allen Fragen wird derselbe Randomisierungsgruppenname zugewiesen. Daher werden sie beim Laden der Seite in zufälliger Reihenfolge angezeigt. Jeder Frage wird eine Relevanzgleichung zugewiesen, die besagt, dass die Summe der „relevanceStatus“ aller anderen Fragen in der Gruppe kleiner ist als die Anzahl der Fragen, die Sie anzeigen möchten. Da relevanceStatus beim Rendern von Fragen zugewiesen wird, summiert sich dies effektiv auf die Anzahl der vorhergehenden Fragen.
In unserem 5-von-10-Beispiel wäre die Gleichung für Q1 also:
sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
Für Q2 wäre es:
sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5
Und so weiter...
Vorgeführte Funktionen
Herunterladen
Um das obige Beispiel herunterzuladen, klicken Sie auf den folgenden Link: Random 5 von 10 Umfragebeispiel.
Bewertung der vom Benutzer eingegebenen Produktliste
Übersicht
Das folgende Beispiel zeigt, wie Sie Benutzer bitten können, eine Reihe von Produkten aufzulisten, die sie interessieren, und diese Produkte dann bewerten zu lassen.
ES-Funktionen demonstriert
- Maßgeschneiderte Antworten - bei der Bewertung von Produkten stammen die Beschriftungen aus dem Kommentarfeld der vorhergehenden Multiple-Choice-Frage
- Maßgeschneiderte Skalen - viele erweiterte Fragenoptionen, wie z auch maßgeschneidert sein.
Screenshots
Dieses Bild zeigt, dass, da nur die Produkte 1, 3 und 5 ausgewählt wurden, nur diese 3 angezeigt werden (mithilfe des Attributs array_filter). Darüber hinaus sind die Zeilenbeschriftungen in der zweiten Frage entweder die Produktnummern (sofern nichts in das Kommentarfeld eingegeben wird) oder die Inhalte der Kommentarfelder.
Dieses Bild zeigt, wie die maßgeschneiderten Antworten angegeben werden:
Hier ist die Show Logic File für diese Frage, mit der wir überprüfen können, ob die bedingte Logik wie gewünscht funktioniert (z. B. um zu sehen, ob Syntaxfehler vorliegen):
Das nächste Bild zeigt eine Gruppe, in der Sie eine 5-Punkte-Bewertungsskala (Optionen 1–5), den Titel der Skala und die Produkte angeben, die Sie bewerten möchten. Die letzte Frage zeigt, dass jeder Teil der Array-Frage angepasst werden kann:
Das nächste Bild zeigt die Logikdateiansicht der letzten Frage. Wie Sie sehen, können die Unterfragen, Antworten und Skalenüberschriften angepasst werden.
Herunterladen
Um das oben stehende Umfragebeispiel herunterzuladen, klicken Sie auf den folgenden Link: Rating user-enered list of Products Survey example.