x

Hovedkapitler

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. LimeSurvey Cloud - Hurtig startguide
  3. LimeSurvey CE - Installation
  4. Sådan designes en god undersøgelse (guide)
  5. Kom godt i gang
  6. LimeSurvey konfiguration
  7. Introduktion - Undersøgelser
  8. Se undersøgelsesindstillinger
  9. Se undersøgelsesmenuen
  10. Se undersøgelsens struktur
  11. Introduktion - Spørgsmål
  12. Introduktion - Spørgegrupper
  13. Introduktion - Undersøgelser - Ledelse
  14. Indstillinger for undersøgelsesværktøjslinje
  15. Flersproget undersøgelse
  16. Hurtig startguide - ExpressionScript
  17. Avancerede egenskaber
  18. Generelle FAQ
  19. Fejlfinding
  20. Løsninger
  21. Licens
  22. Versionsændringslog
  23. Plugins - Avanceret
 Actions

ExpressionScript prøveundersøgelser

From LimeSurvey Manual

Revision as of 10:51, 2 January 2024 by Maren.fritz (talk | contribs) (Created page with "#array_filter #array_filter_exclude #min_num_value # max_num_value #QS:equals_num_...")


Introduktion

Den bedste måde at lære at bruge ExpressionScript på er at lege med arbejdseksempler og tilpasse dem til dine behov.

Nedenfor kan du finde et sæt stikprøveundersøgelser for at demonstrere (og teste), hvordan EM kan bruges til at forbedre din undersøgelse. Disse undersøgelser kan findes i distributionens /docs/demosurveys mappe.


Relevans, skræddersyning og ligninger

Oversigt

Følgende eksempel beregner BMI (Body Mass Index) for hver respondent. Se nedenfor de funktioner, der er demonstreret i dette eksempel.

EM-funktioner demonstreret

  1. Relevans - understøttelse af kraftfuld betinget logik;
  2. Piping / Tailoring - giver mulighed for at pipe eller skræddersy svar og spørgsmåls-metadata;
  3. Dynamic Tailoring - bemærk, at rapporter ændres på siden, efterhånden som du besvarer spørgsmål.
  4. Micro-Tailoring - betinget tilpasning i sætninger og rapporter ved hjælp af if()-sætninger
  5. Ligninger - en ny spørgsmålstype, der lader dig foretage beregninger og gemme resultaterne i databasen, selvom beregningen er skjult
  6. Betinget validering - validering kriterier, såsom den mindst tilladte værdi, kan være betingede - f.eks. baseret på ligninger.


Skærmbilleder

Dette eksempel beregner Body Mass Index, en beregning af din vægt og højde for at afgøre, om du er undervægtig, normalvægtig, overvægtig eller fed. Bemærk, at du i første omgang kun ser de fire obligatoriske spørgsmål:



Når du har indtastet dine oplysninger (og du kan vælge, om du vil bruge metriske eller ikke-metriske enheder), ser du en skræddersyet rapport, der opsummerer, hvad du har indtastet, og fortæller dig din vægtstatus:



Her er et andet eksempel, hvor der bruges ikke-metriske enheder til at vise, hvordan resultatet ændrer sig dynamisk:



Der er skjulte Spørgsmål af ligningstype på det interne niveau, der konverterer dataene til metriske (hvis nødvendigt), og gemmer den metriske højde, vægt, BMI og vægtstatus i databasen uden brug af tilpasset JavaScript .

Du kan se i det næste sæt eksempler, hvordan du kan bruge matematiske og andre funktioner i skræddersyede rapporter. Sådan ser siden ud, før du indtaster nogen data. Der er betinget logik til at vise tomme celler, hvis ingen (eller ikke-numeriske) data er indtastet, i stedet for at vise "NaN" eller "Del med nul".



Efterhånden som tallene indtastes, ændres rapporten på siden for at vise den beregning, der udføres, og dens resultat.



Der er mange andre eksempler i denne stikprøveundersøgelse. For eksempel viser nedenstående skærmbillede en af de snesevis af måder, hvorpå du kan udfylde siden Dynamisk relevans. Som hjælpeteksten bemærker, prøv forskellige aldre og især ulogiske kombinationer af svar for at se de underholdende beskeder, der genereres nederst. Bemærk også, at hvis du siger, at du har mere end ét barn, vil beskeden sige "Jeg håber, du nyder at lege med dine X børn", i stedet for at sige "Jeg håber, du nyder at lege med dit barn". Dette viser, hvordan du nemt kan mikroskræddersy sætninger, så de matcher køn og/eller antallet af dine emner. Du kan endda nemt bøje verber og afvise navneord baseret på køn og tal.



Download

For at få adgang til undersøgelseseksemplet skal du klikke på følgende link: LS3_em_tailoring.zip.

Eksempel på folketælling

Oversigt

Dette er et folketællingseksempel, der spørger, hvor mange mennesker der er i din husstand.

Det demonstrerer, hvordan relevans på gruppeniveau kan gøre det lettere at implementere en "loop" af spørgsmål. Efter at have oprettet gruppen til person 1, eksporterede jeg gruppen. Da jeg brugte qcode-variablenavne som p1_name i stedet for SGQA-koden, kunne jeg bruge en teksteditor til hurtigt at redigere og genimportere gruppen flere gange (f.eks. tog det omkring 10 sekunder at redigere og genimportere hver gentagende gruppe, hvilket sikrede at alle variabler havde unikke variabelnavne, og at logikken på gruppeniveau var korrekt).

Du kan også funktionen kopiér spørgsmål, men den vil ikke være så hurtig som indstillingen foreslået ovenfor.

Dette viser også, hvordan du kan forhindre, at meddelelsen Færdig vises, indtil undersøgelsen virkelig er afsluttet (f.eks. når alle nødvendige grupper er gennemført).


EM-funktioner demonstreret

  1. Relevans på gruppeniveau - Følgegrupperne (Person 1-5) vises kun for op til det angivne antal samlevende;
  2. Skræddersy - Den endelige rapport opsummerer de demografiske data for hver samlever;
  3. Progressiv spørgsmålsvisning - Uanset om det er i gruppe- eller alt-i-én-tilstand, vises efterfølgende spørgsmål kun, så snart de foregående er besvaret.


Skærmbilleder

Undersøgelsen genererer en skræddersyet rapport, der viser demografien for det angivne antal samlevende:



Hvis du skifter til spørgsmål-ad-gangen-tilstand, ser du, at indekset skræddersy spørgsmålene. Da brugeren sagde, at personen er en kvinde, spørger den "Hvad er hendes navn". Og da vi svarede "Mary", siger det næste spørgsmål "Hvor gammel er Mary"?



Download

For at downloade undersøgelseseksemplet, klik her: LS3_group_relevance.zip.


Cascading Array Filters

Oversigt

Denne undersøgelse er baseret på designet af en undersøgelse fra Joy Lane Research, LLC.


Skærmbilleder

Bemærk i det følgende, at:

  • Q02 kun viser det sæt af produkter, der er tjekket i Q01 (ved at bruge array_filter)
  • Q02 viser også "Et andet produkt", teksten indtastet i feltet "Andet elektronisk" i Q01
  • Q04 viser kun produkter fra Q02, der blev kontrolleret (så array-filteret falder sammen)
  • Q05 viser kun produkter fra Q02, der ikke blev tjekket i Q02 (ved hjælp af et cascaded array_filter_exclude)




Download

Klik på følgende link for at downloade ovenstående eksempel: LS2_cascading_array_filter undersøgelseseksempel.


Rørføring/skræddersying ved hjælp af alle spørgsmålstyper og attributter

Oversigt

Hvis du er forvirret over, hvordan du navngiver dine variabler (SGQA vs Qcodes), er du ikke alene. Selvom hoveddokumentationen beskriver hvordan man komponerer Qcode-variablenavne, er der intet, der slår at se det i en fungerende demo. Denne undersøgelse viser, hvordan du kan få adgang til spørgsmålsattributter og svar ved hjælp af ExpressionScript.


I dette eksempel anbefaler vi at slå den indbyggede HTML-editor fra (eller konvertere den til pop-up-tilstand), når du redigerer denne undersøgelse. Det kan tage et minut eller mere for HTML-editoren at gengive de store HTML-rapporter i redigeringstilstand.


Indhold

  • Eksempler på hver spørgsmålstype
  • Alle spørgsmålstyper, der kan bruge "andet", er inkluderet, så du kan se, hvordan det påvirker variabelnavngivning
  • Standardværdier for alle spørgsmålstyper, der accepterer standardindstillinger
  • Skræddersyet - On- og off-side rapporter, der viser alle 16 tilgængelige EM-punktnotationssuffikser.
  • Disse rapporter viser alle de aktuelt indtastede data (så viser dig, hvordan du kan generere dine egne printbare rapporter til brugere i stedet for print- svarskærm)
  • Korrekt Qcode og SGQA-navngivning af alle variabler


Skærmbilleder

Dette er en kæmpe undersøgelse, så vi valgte ikke at inkludere skærmbilleder. I stedet skal du downloade og lege med den.


Download

Klik på følgende link for at downloade undersøgelsen: LS3_EM_question_attributes.lss

Traditionel validering, re-envisioned

Oversigt

Dette viser alle de valideringstyper, der gør brug af udtryk, og hvordan de påvirker hver af de spørgsmålstyper, der understøtter validering. I mange tilfælde starter valideringstipsene skjult og vises kun, hvis et spørgsmål ikke opfylder valideringskriterierne (og forsvinder dermed også, når spørgsmålet består valideringskriterierne).


Demonstrerede valideringstyper

  1. min_num_value_n - minimumsværdi for et svar
  2. max_num_value_n - max værdi for et svar
  3. min_svar - minimum antal svar påkrævet
  4. max_answers maksimum antal tilladte svar
  5. multiflexible_min - minimumsværdi tilladt for et svar (for multiflexi-tal spørgsmålstype)! N!#multiflexible_max - maksimal værdi tilladt for et svar (for multiflexi-tal spørgsmålstype)
  6. min_num_value - minimum tilladt sum på tværs af alle svar for spørgsmålet
  7. max_num_value - maksimal tilladt sum på tværs af alle svar på spørgsmålet
  8. equals_num_value - summen på tværs af alle svar på spørgsmålet skal være lig med denne værdi
  9. validation - dette er valideringen af det regulære udtryk for spørgsmålet - det kan gælde for individuelle celler


Skærmbilleder

Ved at bruge nye CSS-stile viser hver valideringstype et separat tip. Hvis de vises, kan de skjules via hide_tip muligheden. Standardindstillingen er at vise dem med rød skrift, hvis spørgsmålet ikke opfylder valideringskriterierne, og grønt, hvis det består dem:



En bruger kan ikke indsende en side med valideringsfejl. Han vil straks blive advaret, hvis han indtastede forkerte oplysninger:



Validering kan anvendes på individuelle celler i en matrix, som i dette eksempel, hvor regulære udtryksvalideringer sikrer, at hver post er et korrekt formateret amerikansk telefonnummer inklusive områdenummer.



Download

For at downloade ovenstående eksempel skal du klikke på følgende link: LS3_Validation_tests.zip.


Valideringsligninger

Oversigt

Nogle gange har du brug for tilpasset validering, som ikke kan opnås ved hjælp af de traditionelle min/max-kriterier. Til dette skal du bruge mulighederne em_validation_q og em_validation_sq, som lader dig konstruere komplekse valideringsligninger på henholdsvis spørgsmåls- og underspørgsmålsniveau.


Template:Bemærk


EM-funktioner demonstreret

  1. em_validation_q - dette er en ligning, der bestemmer, om hele spørgsmålet er gyldigt
  2. em_validation_q_tip - dette er meddelelsen, der skal vise, hvis spørgsmålet ikke opfylder em_validation_q-kriterierne
  3. em_validation_sq - dette er ligningen, der bestemmer, om hvert underspørgsmål (arraycelle) er gyldigt
  4. em_validation_sq_tip - dette er meddelelsen, der skal vises, hvis der er nogen af underspørgsmålene er ugyldige.

Generelt, når em_validation_sq bruges, hvis en celle er ugyldig, bliver baggrundsfarven for den pågældende celle rød for at angive, at der er en fejl.


Skærmbilleder


Dette spørgsmål sikrer, at du indtaster dine børns alder i faldende rækkefølge ved at anvende denne valideringsligning:

q1_sq1 >= q1_sq2 && q1_sq2 >= q1_sq3 && q1_sq3 >= q1_sq4





I eksemplet nedenfor sikrer valideringen, at der ikke besvares mere end 3 spørgsmål på en given række ved at anvende denne valideringsligning:

(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_4, Test_C_4, Test_C_4, Test_C_4) = 3)

Du kan også skrive dette som følger, LimeSurvey konverterer det automatisk ved kørsel til det ovenfor anførte udtryk.

(sum(self.sq_A) <= 3) && (sum(self.sq_B) <= 3) && (sum(self.sq_C) <= 3)



Download

For at downloade undersøgelseseksemplet brugt i ovenstående eksempler skal du klikke på følgende link: ls2_test_em_sq_validation.lss.


Relevans for underspørgsmål

Oversigt

Dette viser, hvordan array_filter og valideringskriterier kan interagere. For valideringer, der gælder for summer, tages der kun hensyn til relevante (synlige) værdier.


EM-funktioner demonstreret

  1. array_filter
  2. array_filter_exclude
  3. min_num_value
  4. max_num_value
  5. equals_antal_value

Den viser også dynamisk rapportering af antallet af besvarede spørgsmål i kernespørgsmålene.


Screenshots

Changing the number of visible rows dynamically changes the sum. Marking a subquestion as being irrelevant doesn't clear its value. Rather, if it is irrelevant, its values don't contribute to any equation.



Note what happens when we check the "Fifth subquestion" for the first question "Which rows should appear below". Note that the sum for the second "Enter some numbers" question is now 5. Even though subquestion 5 for that question still has the value 14 (e.g., if you un-check the fifth subquestion, you will see the value of 14 again), that value does not contribute to the sum since it is currently irrelevant. All irrelevant data is cleared (NULLed in the database) on submit, but it stays available on the page in case users want or need to change their minds about answers.



Download

To download our example, click here: ls2_subquestion_relevance.lss.


Using Comma as Radix Separator (Decimal Point)

Overview

The ExpressionScript ensures that only valid numbers can be entered into numeric fields. If you enter an invalid number, you will be warned that something is wrong (e.g., in the case of the fruity theme, the whole question is "red-ed").

Note that the numeric values are always converted to using a period as the radix separator within the database. In this way, the statistical analyses will work appropriately.

To change the radix separator, access the Text elements options located under the Settings tab, and look for the decimal mark functionality.


For more information on what a radix separator is, click [https://en.wikipedia.org/wiki/Radix_point


Question Types Using Radix Separator

  1. Numerical input [N]
  2. Multiple numerical input [K]
  3. Array (Numbers) [:]
  4. Array (Texts) [;], when using the numbers_only attribute
  5. List (radio) [L], when using the other_numbers_only attribute
  6. Short free text [S], when using the numbers_only attribute
  7. Multiple short text [Q], when using the numbers_only attribute
  8. Multiple choice [M], when using the other_numbers_only attribute
  9. Multiple choice with comments [P], when using the other_numbers_only attribute


Screenshots

You may note in the below screenshots that comma can be used as a radix separator.



Download

To download the above example, click on the following link: ls2_comma_as_radix_separator.lss.


Randomization Groups

Overview

This survey demonstrates how to make use of the random_group attribute.

If this attribute is used, each time you start the survey, the question order is randomized. However, once the survey is started, the randomization order remains fixed, even if you change languages.


Screenshots

Let's check together the below example. The first random question on the page will either be Q1 , Q4, or Q7. The second randomized question on the page will either be Q2, Q5, or Q8.



Here is the randomization generated the first time I tested this survey.



A different randomization was generated the second time I tested the survey.



But, when I switched to French (without re-starting the survey), the randomization order remained intact.



Download

To download the above example, click on the following link: Randomization_Group_Test.lss


Randomly Ask One Question Per Group

Overview

This survey shows how you can configure a survey to randomly display one question per group. In it, there are 5 groups of 6 questions each. At the outset, in Group 0, five hidden Equation questions, called ask1-ask5, are populated. Each one has the value of {floor(rand(1,6.9999))} in the question text field, which means that the variables ask1-ask5 will each have a value between 1 and 6. Then, each question in the group has a relevance equation like "ask1==N" where N is the Nth question in the group (so the third question in group 1 has the relevance equation "ask1==3").

This survey works equally well in survey-at-a-time, group-by-group, and question-by-question modes. Since the randomization is set in the first group, and that group is effectively hidden (since all of the ask1-ask5 questions are hidden), the randomization stays the same for the subject; but each different subject will have a distinct randomization.


Features Demonstrated

  1. Equation question type
  2. Randomization functions
  3. Conditional (if) function


Screenshots

This is Group0, which uses the Equation question type to select random values from 1 to 6 for each group (except the last group, which has only 4 questions). Note that the "if()" function first checks whether ask1 has already been set, and if so, uses that value. If the value hasn't been set, then it uses a random value to set the value of ask1.



This Group shows how the variable (ask4) from Group0 is used to control which question is visible within the fourth group.



Download

To download the above survey example, click here: Random questions within a group survey example.


Randomly Ask A Specific Number Of Questions In A Group (a subset of the questions)

  This applies only to all random questions from one group and only if the Group by group or All in one format is used.



Overview

This survey shows how to ask a random subset of questions in a group. For example, show 5 random questions out of 10 questions located within a group.

The survey has one group containing 10 questions. All questions are assigned the same randomization group name. As a result, they will be displayed in a random order on page load. Each question is given a relevance equation that the sum of the "relevanceStatus" of all other questions in the group is less than the number of questions you want to show. Since relevanceStatus is assigned as questions are rendered, this effectively totals the number of preceding questions.

So, in our 5 out of 10 example, the equation for Q1 would be:

sum(Q2.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5

For Q2, it would be:

sum(Q1.relevanceStatus, Q3.relevanceStatus, Q4.relevanceStatus, Q5.relevanceStatus, Q6.relevanceStatus, Q7.relevanceStatus, Q8.relevanceStatus, Q9.relevanceStatus, Q10.relevanceStatus) LT 5

And so on...


Features Demonstrated

  1. relevanceStatus variable
  2. Randomizing

Download

To download the above example, click on the following link: Random 5 out of 10 survey example.

Rating User-Entered List of Products

Overview

The below example shows how you can ask users to list a set of products that interest them, and then have them rate those products.


ES Features Demonstrated

  1. Tailoring answers - when rating products, the labels come from the comment field of the preceding multiple choice question
  2. Tailoring scales - many advanced questions options, like scale headings, can also be tailored.


Screenshots

This image shows that since only products 1,3, and 5 were selected, only those 3 are displayed (using the array_filter attribute). Moreover, the row labels in the second question are either the product numbers (if nothing is entered into the comment field) or the contents of the comment fields.



This image shows how the tailored answers are specified:



Here is the Show Logic File for that question, which lets us verify that the conditional logic works as desired (e.g., to see whether there are any syntax errors):



The next image shows a group in which you specify a 5 point rating scale (Options 1-5), the title of the scale, and the products you want to rate. The final question shows that each of the parts of the array question can be tailored:



The next image shows the logic file view of the last question. As you can observe, the subquestions, answers, and scale headers can be tailored.


Download

To download the survey example from above, click on the following link: Rating user-entered list of products survey example.