Kontrollera enkätlogik - Avancerat
From LimeSurvey Manual
Allmänt
Ett viktigt alternativ som hjälper dig att skapa och enkelt underhålla komplexa enkäter är Kontrollera enkätlogik.
Under utveckling och testning av enkäten, och innan du aktiverar den, är det mycket viktigt att validera enkätlogiken. Detta gäller särskilt när du använder komplexa relevansekvationer, anpassning och valideringsekvationer - du måste vara säker på att inget går sönder när enkäten körs.
Med den här funktionen kan du snabbt validera att din enkät, dina grupper och dina frågor är korrekta. Den nås från alternativen i menyn i det översta fältet under de enkätrelaterade inställningarna. Den finns i menyn Verktyg:
Som du kan se ovan kan du köra det här alternativet fyra gånger, en gång för varje språk som används i en enkät.
Beskrivning
Alternativet Kontrollera enkätlogik visar allt du har angett för varje fråga och grupp (t.ex. namn, text, hjälp, villkor/relevans, valideringsregler, standardvärden, delfrågor, svar) i ett lättöverskådligt tabellformat. Det markerar felen och låter dig klicka på fråge- och grupp-ID:n (eller variabler som används i ekvationer) för att öppna nya webbläsarflikar där du kan redigera dessa frågor eller grupper. Det gör det enkelt att snabbt rätta fel och uppdatera sidan för logikkontroll för att bekräfta att enkäten är korrekt innan du aktiverar den.
Vyn är också utformad för att vara läsbar för forskare och uppdragsgivare, så att de kan validera att enkätens design och logik är korrekta. När enkätlogiken kontrolleras uppdateras cachen för alla uttryck som används i en aktiv enkät.
Den innehåller följande kolumner:
- # - visar antalet grupper och frågor i ordning, med start från 0.
- Namn [ID] - visar frågekoden för gruppen/frågan/delfrågan. Dessa koder kan användas som variabler i uttryck. ID är fråge-ID (QID) eller grupp-ID (GID). Fältet visar även frågetypen (t.ex. Flervalsfråga [M])).
- Relevans [Utvärdering] (Förval) - visar följande:
- Relevans - den syntaxmarkerade relevansekvationen för frågan eller gruppen. Om den alltid är sann (visas i alla scenarier) blir värdet 1.
- Validering - ExpressionScript genererar automatiskt valideringsekvationen utifrån de valda frågeattributen (t.ex. min/max antal svar, min/max/lika med summavärden, min/max för enskilda värden eller validering med reguljära uttryck). Det här avsnittet visar den genererade valideringsekvationen så att du kan upptäcka eventuella fel (som odefinierade variabler).
- Validering på frågenivå visar ekvationen som krävs för att kontrollera de ovan beskrivna frågeattributen
- Validering på delfrågenivå visar ekvationen som krävs för att implementera array_filter, array_filter_exclude och exclusive_option
- Förval - om frågan har ett standardvärde visas det här, syntaxmarkerat (eftersom standardvärdet kan vara ett uttryck).
- Text [Hjälp] (Tips) - visar följande:
- Text - texten för gruppen, frågan, delfrågan eller svaret. Den är syntaxmarkerad för att visa eventuell inbäddad anpassning, så att du kan kontrollera att du har deklarerat alla variabler du tänker använda i anpassningen.
- Hjälp - visar hjälptexten för frågan, även den syntaxmarkerad.
- Tips - visar det internt genererade valideringstipset, baserat på frågeattributen. Samma tips används i alla enkätstilar, samt i den utskrivbara enkäten och i skärmarna för datainmatning.
- Frågeattribut - visar en tabell över alla relevanta frågeattribut för frågan. Attribut som kan vara ekvationer är syntaxmarkerade så att du kan kontrollera att de är korrekta.
Raderna är färgkodade enligt följande:
- Grupper - visas med ljusgrå bakgrund
- Frågor - visas med ljusgrön bakgrund
- Delfrågor - visas med blekgul bakgrund
- Svar - visas med vanlig vit bakgrund
Svar har ett extra attribut i kolumnen Relevans:
- Värde - detta är det interna standardvärdet som används i beräkningar. Om du använder utvärderingar är detta värdet för utvärderingen. Annars är det samma som svarets namn.
Användning
Överst på sidan finns ett sammanfattande meddelande. Om allt är som det ska står det "Inga syntaxfel upptäcktes i denna enkät", eller "Denna grupp" eller "Denna fråga", "innehåller i sig inga syntaxfel". Om det motsatta gäller står det "X frågor har syntaxfel som måste rättas".
Varje fråga som har syntaxfel får bakgrunden i sin vänstraste kolumn (dvs. #) färgkodad röd. Dessutom visas en varning med det minsta antalet fel för en fråga under kolumnen Namn [ID]. Följande fel är vanliga:
- Odefinierad variabel - om du inte har definierat alla dina variabler, eller har skrivit fel i array_filter (eller använder olika uppsättningar svarsalternativ för array_filter), visar några av dina valideringsfrågor fel. Odefinierade variabler visas i röd text, inramade med en röd linje.
- Felaktig syntax - när du börjar använda relevansekvationer kan du använda för många eller för få parenteser. Sådana syntaxproblem markeras och ramas in i rött. Om du håller muspekaren över sådan rödinramad text beskriver ett verktygstips felet.
Färger i ExpressScript-syntax
Villkor och ekvationer är syntaxmarkerade för att det ska bli lättare att se vad du tittar på:
- Grön / Ljusblå: En variabel som refererar till en fråga tidigare i enkäten
- Blå: En funktion
- Grå: Ett strängutryck
- Brun: Ett TOKEN-uttryck (deltagardata)
- Svart: Operator
Saker att kontrollera:
- Lila: En variabel som refererar till en fråga senare i enkäten. Detta är oftast ett fel och bör kontrolleras.
- Röd eller röd ram: En icke-existerande variabel eller referens till en tidigare fråga, eller ett syntaxfel - bör oftast kontrolleras.
Odefinierade variabler
Om odefinierade variabler används färgkodas variabelnamnet rött och omges av en röd linje. Om du håller muspekaren över variabelnamnet står det "odefinierad variabel":


}}
Felaktig syntax
De flesta uttrycksrelaterade felen beror på felaktig syntax. Det beror på att enkätadministratörer ofta glömmer att lägga till en klammerparentes, använder parenteser på fel sätt eller använder uttryck felaktigt:


Här finns många bra exempel på hur man använder syntaxmarkering.
Felaktig anpassad JavaScript
JavaScript-fel markeras också i enkätlogikkontrollen:

Snabbare redigering och validering
All syntaxmarkerad text har inbyggda verktygstips som också är klickbara:
- Verktygstips
- Funktioner - om du håller muspekaren över en funktion ser du dess syfte och syntaxdefinition;
- Variabelnamn - om du håller muspekaren över ett variabelnamn ser du positionen (grupp, frågeordning), frågetexten och tillåtna svar för frågan.
- Åtgärder
- Variabelnamn - om du klickar på ett variabelnamn öppnas ett nytt fönster där du kan redigera frågan. Det gör det enkelt att navigera och verifiera logiken - fortsätt bara klicka på variabelnamnen i frågans relevans- eller valideringskriterier för att se var de kommer ifrån och hur de används.
Exempel
Följande exempel är hämtade från ExpressionScript-exempelenkäter. På den sidan hittar du skärmbilder av körande enkäter, förklaringar och nedladdningar.
Body Mass Index (BMI)
Här finns skärmbilder av detta exempel.
Det här är vyn för att ordna om frågor i beräkningen av Body Mass Index. Under kolumnen Fråga ser du relevansuttrycken för vikt, längd och BMI:

För en bättre enkätöversikt, titta på sidan för enkätlogik:

Den här exempelenkäten är också ett bra exempel på nästlade if()-satser för att generera "weightstatus".

Kaskadlogik
Här finns skärmbilder av detta exempel.
Det visar den valideringslogik för delfrågor som genereras automatiskt när du använder array_filter och array_filter_exclude. Exemplet visar också hur du kan ersätta det anpassade värdet för "Annat" (svaret för Q02_other är Q01_other).

Q05 i det här exemplet visar samtidig användning av array_filter och array_filter_exclude på Q01 respektive Q02. Exemplet demonstrerar möjligheterna med kaskadande array_filter. Observera att en av de främsta anledningarna till att visa Utvärderingskriterier på fråge- och delfrågenivå är att hjälpa dig se till att du inte har gjort några stavfel när du angav variabelnamnen för array_filter eller array_filter_exclude (eller om du använder olika variabelnamn för din lista med filtrerade delfrågor). Om du har sådana stavfel visas alla ogiltiga variabelnamn i rött för att visa att de är odefinierade, så att du snabbt kan åtgärda problemet.

Dynamisk relevans
Det här exemplet visar dynamisk, kaskadande relevanslogik för att styra om frågor visas. Du kan ladda ner exemplet här.
Observera också att frågor bara visas om vissa valideringskriterier är uppfyllda. Om en person till exempel anger att hon har två barn måste vissa frågor besvaras av respondenten (kid1 och kid2).

Relevans på gruppnivå
Det här exemplet visar hur relevans på gruppnivå visas i logikkontrollen. Här finns skärmbilder av exemplet som beskrivs nedan.
Som du kan se visas relevansekvationen på gruppnivå (cohabs > 1 && p1_rel != "") i den grå raden Person 2 för G-2.
Du kanske också ser att alla frågor är obligatoriska. Men om gruppen inte är relevant är inte heller någon av dess frågor det. Det innebär att frågorna bara är verkligt obligatoriska om gruppen är relevant.
Du kan också notera att vissa frågor bara visas om svaret på föregående fråga inte är tomt. Nedan kan du se att om p2_sex inte är ifylld kommer p2_name inte att visas, trots att det är en obligatorisk fråga. Den obligatoriska frågan p2_age visas inte heller om p2_name inte är ifylld. Dessa frågor kan betraktas som "villkorligt obligatoriska".
Observera dessutom att tips-meddelandena också skapas automatiskt åt dig. De är organiserade efter värdeintervall (min/max), intervall för summan av värden (min/max/lika med), antal svar (min/max) osv. (det beror på vilken frågetyp som används och vilka aktiva attribut som finns). Ibland vill du validera ett svarsintervall utan att visa vad som kan verka som onödiga valideringstips för användaren. I sådana fall kan du använda frågealternativet hide_tip (som i det här fallet, för att undvika att tala om för användaren att åldern måste vara mellan 0 och 115 om hen inte försöker ange ett felaktigt värde - se p2_age).

Komma som decimaltecken
Även om LimeSurvey fullt ut stöder komma som decimaltecken vid körning måste du fortfarande använda punkt som decimaltecken vid utformningen (t.ex. när du anger min/max-värden i avancerade frågeattribut). Det fungerande exemplet finns här.
Kom också ihåg att valideringslogiken skapas automatiskt åt dig utifrån de aktiverade frågeattributen. Ekvationerna kan se överväldigande ut, men du behöver inte oroa dig för dem.

