x

Hlavné kapitoly

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. Rýchly sprievodca - LimeSurvey 3.0+
  3. Inštalácia - LimeSurvey CE
  4. Ako vytvoriť dobrý prieskum (príručka)
  5. Začíname
  6. Správa LimeSurvey
  7. Prieskumy - úvod
  8. Nastavenia prieskumu
  9. Menu prieskumu
  10. Štruktúra prieskumu
  11. Otázky – úvod
  12. Skupiny otázok - úvod
  13. Prieskumy - správa
  14. Možnosti panela nástrojov prieskumu
  15. Viacjazyčný prieskum
  16. ExpressionScript Engine - Príručka rýchleho štartu
  17. Nezaradené a pokročilé funkcie
  18. Všeobecné časté otázky
  19. Riešenie problémov
  20. Riešenia a obchádzky
  21. Licencia
  22. Záznam zmien verzií
  23. Doplnky
 Actions

Expression Manager

From LimeSurvey Manual

Táto stránka mohla byť preložená strojovo a môže obsahovať chyby. Zobraziť anglický originál · Vylepšiť tento preklad
This page is a translated version of the page Expression Manager and the translation is 100% complete.

Rýchly úvod

Prehľad

Pri prispôsobovaní prieskumov zvyčajne potrebujete spôsob, ako určiť nasledujúce:

  1. Navigácia/vetvenie - umožňuje, aby odpovede respondenta menili poradie, v akom sa kladú otázky
  2. Prispôsobenie/piping - ako sformulovať otázku (napríklad odkazom na predchádzajúce odpovede alebo skloňovaním viet podľa počtu či pohlavia respondentov) alebo ako vytvoriť vlastné správy (napríklad skóre hodnotenia alebo poradenstvo na mieru).
  3. Validácia - zabezpečuje, aby odpovede spĺňali určité kritériá, napríklad minimálne a maximálne hodnoty alebo zhodu so vstupným vzorom

Expression Manager (EM) poskytuje intuitívny spôsob zadávania logiky pre každú z týchto funkcií. Takmer čokoľvek, čo môžete zapísať ako štandardnú matematickú rovnicu, je platný výraz, aj keď voláte funkcie. EM v súčasnosti poskytuje prístup k 80 funkciám a možno ho jednoducho rozšíriť o ďalšie. Umožňuje tiež pristupovať k vašim premenným pomocou ľudsky čitateľných názvov premenných (namiesto názvov SGQA).

Nasledujúce časti ukazujú hlavné miesta, kde sa Expression Manager používa

Relevantnosť (riadenie navigácie/vetvenia)

Niektoré prieskumy používajú „Goto Logic“, napríklad ak odpoviete na otázku 1 možnosťou C, preskočí sa na otázku 5. Tento prístup je veľmi obmedzujúci, pretože sa ťažko overuje a ľahko sa pokazí pri zmene poradia otázok. EM používa booleovskú rovnicu relevantnosti na určenie všetkých podmienok, za ktorých môže byť otázka platná. Ak je otázka relevantná, zobrazí sa, v opačnom prípade je nepoužiteľná (Not Applicable) a do databázy sa uloží hodnota NULL. Je to podobné tomu, čo možno urobiť pomocou editora podmienok, ale EM umožňuje jednoducho zadať oveľa zložitejšie a výkonnejšie kritériá (a umožňuje používať názov premennej namiesto názvov SGQA).

Tento obrázok ukazuje jeden zo spôsobov, ako skontrolovať logiku relevantnosti prieskumu. Počíta index telesnej hmotnosti (BMI). Rovnica relevantnosti je zobrazená v hranatých zátvorkách hneď za názvom premennej (ktorý je zelený). Relevantnosť premenných weight, weight_units, height a height_units je teda vždy 1, čo znamená, že tieto otázky sa kladú vždy. Relevantnosť pre BMI je však {!is_empty(height) and !is_empty(weight)}, čo znamená, že BMI sa vypočíta, len ak respondent zadá hodnotu pre výšku aj hmotnosť (čím sa predíde riziku chyby delenia nulou). Otázka Report sa tiež zobrazí, iba ak respondent odpovie na všetky štyri hlavné otázky (height, height_units, weight, weight_units).

Relevantnosť sa zobrazuje a dá sa upravovať na týchto miestach:

Zobrazenie / úprava relevantnosti na úrovni otázky

Táto rovnica počíta index telesnej hmotnosti (BMI). Otázka sa kladie, len ak osoba najprv zadá svoju výšku a hmotnosť.

Toto je obrazovka úprav otázky BMI.

Upozorňujeme, že pri zadávaní rovnice relevantnosti sa nepoužívajú zložené zátvorky.

Zobrazenie / úprava relevantnosti na úrovni skupiny

Toto je ukážkový prieskum sčítania ľudu. Prvá strana sa pýta, koľko ľudí s vami býva, a ukladá to do premennej „cohabs“. Táto strana sa zobrazí, len ak s vami býva viac ako jedna osoba (zobrazí sa teda pre druhú osobu bývajúcu s vami) a tiež len ak ste uviedli, aký vzťah k vám má prvá osoba (p1_rel).

Ako vidíte, skupina má aj kritériá relevantnosti na úrovni otázok, takže každá otázka sa zobrazí, až keď odpoviete na otázku pred ňou (napr. {!is_empty(p1_sex)}). EM za vás skombinuje relevantnosť skupiny a otázky. Otázky v skupine sa kladú, iba ak je relevantná skupina ako celok. Potom sa kladú iba tie otázky v rámci skupiny, ktoré sú relevantné.

Tu je obrazovka na úpravu relevantnosti na úrovni skupiny pre túto otázku:

Upozorňujeme, že pri zadávaní rovnice relevantnosti sa nepoužívajú zložené zátvorky.

Prispôsobenie/piping

EM umožňuje jednoducho robiť jednoduché aj zložité podmienené prispôsobenie vašich otázok. Niekedy potrebujete iba jednoduchú substitúciu, napríklad: „Uviedli ste, že ste kúpili [Produkt]. Čo sa vám na ňom páčilo najviac?“. Niekedy potrebujete podmienenú substitúciu, napríklad „[Pán/Pani] [Priezvisko], boli by ste ochotný/á vyplniť náš prieskum?“. V tomto prípade chcete použiť oslovenie Pán alebo Pani podľa pohlavia osoby. Inokedy potrebujete ešte zložitejšiu substitúciu (napríklad na základe matematického výpočtu). EM podporuje všetky tieto typy prispôsobenia/pipingu.

Podmienené rovnice

Príklad s indexom telesnej hmotnosti ukazuje možnosť vypočítať BMI osoby, a to aj keď jej umožníte zadať výšku a hmotnosť v metrických alebo nemetrických jednotkách.

Tu je weight_kg {if(weight_units == 'kg', weight, weight * .453592)}. Funkcia if() znamená, že ak respondent zadal hmotnosť v kilogramoch, použije sa táto hodnota, v opačnom prípade sa zadaná hodnota (v librách) vynásobí číslom .453592, čím sa prevedie na kilogramy. Premenná height_m používa podobný postup na výpočet výšky osoby v metroch, aj keď zadala výšku v palcoch.

BMI vypočíta podľa vzorca {weight_kg / (height_m * height_m)}.

Nakoniec report podmienene prispôsobí správu pre respondenta a oznámi mu, čo zadal. („Uviedli ste, že merate 2 metre a vážite 70 kg.“)

Hoci to nie je na obrázku vyššie dobre vidieť, weight_status používa vnorené príkazy if() na zaradenie osoby od podváhy až po ťažkú obezitu. Jeho rovnicu si môžete pozrieť v zobrazení Show Logic View.

V okne úprav tejto otázky vidíte dve veci:

  1. Pri prispôsobení musia byť výrazy ohraničené kučeravými zátvorkami.
  2. Výrazy môžu zahŕňať viac riadkov, ak chcete, ako v tomto prípade, uľahčiť čítanie vnorenej podmienenej logiky.

Prispôsobené otázky, odpovede a reporty

Poznámka: Dynamické prispôsobenie nemusí fungovať, ak sú možnosti odpovede sprístupnené v rozbaľovacích zoznamoch na tej istej stránke s otázkou. Je to preto, že prispôsobenie vkladá značku <span>, ktorá nie je platná vo vnútri možností výberu.

Tento príklad zobrazuje report BMI.

Tu je okno úprav pre tú istú otázku.

Ako vidíte, všetko v kučeravých zátvorkách sa považuje za výraz, a preto je na predchádzajúcom obrázku zvýraznené syntaxou (farebne odlíšené). Ak by ste urobili preklepy (napríklad chybne napísané alebo nedefinované názvy premenných či funkcií), EM zobrazí chybu, ako je táto, ktorá ukazuje, že height_unit je nedefinovaný názov premennej (v skutočnosti ide o height_units) a rnd() je nedefinovaná funkcia (správny názov funkcie je round()). V oboch prípadoch sú chyby obklopené červeným rámčekom, aby sa dali ľahšie nájsť a opraviť.

Môžete tiež vidieť, že môžete rýchlo vytvárať zložité reporty, ako je tabuľka zadaných hodnôt alebo prispôsobené rady.

Nezabudnite, že pri všetkých prispôsobeniach musia byť výrazy ohraničené kučeravými zátvorkami, aby LimeSurvey vedel, ktoré časti otázky sú voľný text a ktoré sa majú spracovať cez Expression Manager.

Validácia

EM riadi fungovanie väčšiny pokročilých možností otázok. Tie ovládajú napríklad minimálny/maximálny počet odpovedí, minimálne/maximálne jednotlivé hodnoty, minimálny/maximálny súčet hodnôt a kontrolu, či zadané hodnoty zodpovedajú určeným vzorom reťazcov. Tieto pokročilé možnosti otázok zadávate naďalej ako zvyčajne. Teraz sa však každá hodnota v niektorom z týchto polí považuje za výraz, takže môžete mať kritériá minima/maxima so zložitými podmienenými vzťahmi k iným otázkam.

Vo všetkých týchto prípadoch sa pokročilá možnosť otázky vždy považuje za výraz, preto pri jej zadávaní nepoužívate kučeravé zátvorky.

Stránky Ukážkové prieskumy obsahujú mnoho funkčných príkladov použitia výrazov na validáciu.

Úvod

LimeSurvey používa nový modul Expression Manager (EM), ktorý umožní LimeSurvey podporovať zložitejšie vetvenie, hodnotenia, validáciu a prispôsobenie. Nahradí spôsob, akým LimeSurvey na pozadí spravuje náhrady, podmienky a hodnotenia. Výrazne tiež urýchli spracovanie, pretože odstraňuje väčšinu čítaní z databázy za behu. EM vyvinul Dr. Thomas White (TMSWhite).

Táto wiki stránka je smerodajnou referenciou pre syntax a funkcie Expression Manager.

Kľúčové definície

  1. Výraz: Čokoľvek ohraničené kučeravými zátvorkami
    • Za predpokladu, že bezprostredne za otváracou zátvorkou ani pred zatváracou kučeravou zátvorkou nie je medzera
    • Obsah výrazov vyhodnocuje EM, takže môže obsahovať matematické vzorce, funkcie a zložité spracovanie reťazcov a dátumov.
  2. Prispôsobenie: Niekedy nazývané „piping“, ide o proces podmieneného upravovania textu
    • Máte prístup ku všetkým „náhradným poliam“, údajom respondenta a údajom odpovedí.
    • Máte tiež jednoduchší prístup k otázkam, odpovediam a ich vlastnostiam.
  3. Rovnica relevantnosti: Nový atribút otázky, ktorý riadi viditeľnosť otázky
    • Ak existuje rovnica relevantnosti, otázka sa zobrazí len vtedy, ak sa relevantnosť vyhodnotí ako pravdivá.
    • Interne sa všetky príkazy array_filter a array_filter_exclude menia na relevantnosť na úrovni podotázok
  4. Rovnica ako typ otázky: Nový typ otázky, ktorý ukladá výpočty alebo reporty do databázy
    • Je podobný otázke typu Boilerplate, ale jeho obsah sa ukladá do databázy, aj keď nastavíte „Vždy skryť túto otázku“
  5. Kód otázky: Toto je preferovaný názov premennej pre EM
    • Môže to byť popisný názov označujúci účel otázky, čo uľahčuje čítanie zložitej logiky
    • Platné kódy otázok by NEMALI začínať číslom, preto pri číslovaní otázok pomocou kódu otázky jednoducho použite „q1“, „q1a“ alebo „g1q2“.
    • Toto sa v súčasnosti stáva názvom premennej pri exporte dát do SPSS alebo R, takže ak robíte štatistickú analýzu, pravdepodobne ste ho už urobili jedinečným.

Musím používať EM?

Krátka odpoveď je nie (ale aj áno).

EM je plne spätne kompatibilný s existujúcimi prieskumami. Ak vám teda vyhovuje používať podmienky a hodnotenia v štýle, aký LimeSurvey používal vo verziách <= 1.91+, môžete v tom pokračovať.

EM však úplne nahrádza spôsob, akým LimeSurvey interne pracuje s podmienkami. Hoci môžete naďalej používať editor podmienok na vytváranie a správu podmienok, LimeSurvey 1.92 ich prevedie na ekvivalentné rovnice relevantnosti. V rámci aktualizácie LimeSurvey 1.92 automaticky prevedie všetky existujúce podmienky na rovnice relevantnosti.

Vďaka tomu získate to najlepšie z oboch svetov – môžete LimeSurvey používať naďalej tak, ako ste zvyknutí, ale uvidíte ekvivalent v podobe rovnice relevantnosti, takže môžete postupne prechádzať priamo na rovnice relevantnosti, kedykoľvek uznáte za vhodné.

Môžem kombinovať použitie podmienok a relevantnosti?

Áno. Pre niektoré otázky môžete použiť editor podmienok a pre iné editor relevantnosti. Podmienky sa pri uložení otázky automaticky prevedú na relevantnosť.

Predpokladáme, že ak používate editor podmienok, chcete, aby tieto podmienky prepísali každú ručne zadanú rovnicu relevantnosti. Ak teda máte existujúce podmienky a chcete ručne upraviť relevantnosť, najprv odstráňte podmienky danej otázky. Konkrétne: skopírujte vygenerovanú rovnicu relevantnosti do textového editora, v ponuke Podmienky odstráňte všetky podmienky tejto otázky (tým sa odstráni aj relevantnosť), potom upravte otázku, vložte vygenerovanú rovnicu relevantnosti z textového editora späť do poľa relevantnosti tejto otázky a otázku uložte. Ak bude dostatočný záujem o odstraňovanie podmienok bez odstránenia vygenerovanej rovnice relevantnosti, mohli by sme pridať hromadný proces konverzie.

Ako si mám vybrať medzi podmienkami a relevantnosťou?

Tu je zoznam výhod a nevýhod jednotlivých štýlov:

Štýl Výhody Nevýhody
Podmienky 1. Pekné grafické rozhranie na vytváranie jednoduchých podmienok
2. Grafické rozhranie je dobre zdokumentované a podporný tím mu rozumie
1. Podporuje iba jednoduché porovnania a nezvláda dobre podmienky AND/OR
2. Kaskádové podmienky fungujú nespoľahlivo
3. Pomalé - náročné na databázu, môže spomaliť dlhé prieskumy
4. Hlásené problémy s opätovným načítaním podmienok
5. Grafické rozhranie sa zle škáluje, ak existujú desiatky, stovky alebo tisíce otázok
6. Prevod papierových prieskumov môže byť pomalý, pretože treba používať názvy SGQA
7. Pre zložité vetvenie často treba programátora, ktorý napíše vlastnú logiku
Relevantnosť 1. Podporuje veľmi zložitú logiku vrátane viac ako 80 funkcií a matematických/reťazcových operátorov
2. Perfektná podpora kaskádovej logiky
3. Rýchle - žiadne ďalšie volania databázy, takže podporuje prieskumy s viac ako 1000 otázkami
4. Žiadne problémy s opätovným načítaním logiky, pretože nevyžaduje kódy SGQA
5. Zvýrazňovanie syntaxe sa škáluje na prieskumy s viac ako 1000 otázkami
6. Jednoduché a rýchle použitie pre skupiny, ktoré chcú digitalizovať existujúce papierové prieskumy.
7. Jednoducho podporuje pološtruktúrované rozhovory a epidemiologické prieskumy bez potreby programátorov
1. Žiadne grafické rozhranie pre jednoduché podmienky - namiesto toho použite zvýrazňovanie syntaxe
2. Novinka, takže podporné tímy ešte EM úplne neovládajú.

Podstata je, že ak ste spokojní s fungovaním LimeSurvey 1.91+, nemáte dôvod meniť svoj postup.

Aké ďalšie výhody prináša používanie EM?

Tu sú ďalšie dôvody, prečo môžete chcieť používať EM.

  1. Výpočty - môžete vytvoriť akýkoľvek výpočet, aký si viete predstaviť:
    • Máte prístup ku všetkým bežným matematickým operátorom a funkciám
    • Máte prístup k viac ako 70 matematickým funkciám, funkciám pre dátumy a spracovanie reťazcov
    • Vývojári môžu pomerne ľahko pridať nové funkcie, ak ich používatelia potrebujú
  2. Ukladanie výpočtov do databázy
    • Teraz môžete vypočítať jednoduché aj zložité výpočty a/alebo skóre škál A uložiť ich do databázy bez potreby JavaScriptu.
    • Na dosiahnutie tohto cieľa použijete typ otázky Rovnica.
  3. Hodnotenia
    • Teraz môžete vytvárať hodnotenia alebo skóre škál z ľubovoľného typu otázky, nielen z podmnožiny, ktorá bola podporovaná predtým
    • Pomocou prispôsobenia (tailoring) môžete zobraziť priebežné alebo celkové skóre hodnotenia kdekoľvek, kde je to potrebné - dokonca aj na tej istej stránke
    • Máte väčšiu kontrolu nad zostavami generovanými na základe týchto skóre hodnotenia
    • Skóre hodnotenia môžete ukladať do databázy bez potreby JavaScriptu
    • Skóre hodnotenia môžete skryť bez potreby JavaScriptu alebo CSS
  4. Náhradné polia
    • Použite kód otázky na vloženie hodnôt z odpovedí na predchádzajúce otázky - uľahčuje to čítanie a overovanie.
  5. Prispôsobenie (tailoring) - text môžete podmienečne zobrazovať na základe iných hodnôt
    • Použite vhodné oslovenie respondenta, napr. "Dobrý deň, [pán/pani] Novák"
    • Generujte gramaticky správne vety, keď záleží na jednotnom/množnom čísle: (napr. "Máte 1 dieťa" vs. "Máte 2 deti")
    • Vhodne časujte slovesá a skloňujte podstatné mená podľa pohlavia a čísla respondenta.
  6. Nové atribúty premenných - na prispôsobenie môžete použiť nasledujúce:
    • (bez prípony) - alias pre qcode.code
    • .code - vybraný kód odpovede na otázku, ak je relevantná (inak prázdny), alebo textová hodnota, ak nejde o kódovanú otázku
    • .NAOK - rovnaké ako .code, ale môže byť súčasťou výpočtov alebo zoznamov aj vtedy, keď je nerelevantná
    • .value - hodnota hodnotenia otázky, ak je relevantná (inak prázdna), alebo textová hodnota, ak nejde o kódovanú otázku -- k dispozícii, ak sú pre prieskum povolené hodnotenia, inak vždy nula
    • .valueNAOK - rovnaké ako .value, ale môže byť súčasťou výpočtov alebo zoznamov aj vtedy, keď je nerelevantná
    • .shown - odpoveď tak, ako sa zobrazuje používateľovi
    • .qid - ID otázky
    • .gid - ID skupiny
    • .sgqa - hodnota SGQA otázky
    • .jsName - správny názov javascriptovej premennej otázky bez ohľadu na to, či je definovaná na tejto alebo inej stránke
    • .qseq - poradie otázky (od 0)
    • .gseq - poradie skupiny (od 0)
    • .mandatory - či je otázka povinná (Y/N)
    • .question - text otázky
    • .relevance - rovnica relevantnosti otázky
    • .grelevance - rovnica relevantnosti skupiny
    • .relevanceStatus - či je otázka momentálne relevantná (boolean (môže sa líšiť v PHP a JS))
    • .type - typ otázky (jednoznakový kód)
  7. Dynamické zmeny na stránke
    • Všetka relevantnosť, výpočty a prispôsobenie fungujú dynamicky na stránke - zmeny hodnôt okamžite aktualizujú stránku
    • Otázky sa teda dynamicky zobrazujú/skrývajú podľa toho, či sú relevantné
    • Otázky sa tiež dynamicky prispôsobujú na základe odpovedí na stránke, takže môžete vidieť priebežné súčty, prispôsobené vety a vlastné zostavy.
  8. Nová obrazovka zadávania dát
    • Okrem súčasného systému zadávania dát môžete jednoducho použiť Survey-All-In-One.
    • Podporuje relevantnosť a prispôsobenie na stránke, takže pracovníci zadávajúci dáta môžu rýchlo prechádzať medzi poľami a zadávať iba relevantné odpovede
    • Môže to byť kľúčové, ak osoba zadávajúca dáta potrebuje vidieť prispôsobenie, ktoré je tiež dynamické.
  9. Eliminuje potrebu väčšiny vlastného JavaScriptu
    • EM jednoducho podporuje zložité výpočty, skórovanie, prispôsobenie a podmienenú logiku.
    • Niektoré veci budú stále vyžadovať JavaScript (napríklad vlastné rozloženia a podmienečné skrývanie podprvkov otázky), ale váš JavaScript môže používať funkcie EM, takže môžete pristupovať k otázkam podľa ich Qcode namiesto SGQA a k akýmkoľvek vlastnostiam otázky uvedeným vyššie.

Aké ďalšie užitočné nové funkcie EM umožňuje?

Bez ohľadu na to, či budete naďalej používať editor podmienok, alebo ručne zostavovať rovnice relevantnosti, získate tieto ďalšie výhody:

  1. Môžete vytvárať zložitejšie validačné kritériá
    • Všetky pokročilé atribúty otázky (ako max_answers, min_num_value_n, max_num_value) môžu používať výrazy. Kritériá minima/maxima tak možno jednoducho upraviť na základe predchádzajúcich odpovedí, aj keď sú na tej istej stránke.
    • EM zvláda aj všetku validáciu založenú na regulárnych výrazoch, takže môžete spoľahlivo kombinovať atribúty otázky typu preg a atribúty založené na rovniciach.
  2. Jednoduché zmeny poradia (alebo odstraňovanie) otázok a skupín
    • Pred verziou 1.92 ste nemohli zmeniť poradie otázok alebo skupín, ak LimeSurvey usúdil, že takáto zmena poradia môže narušiť podmienky, v ktorých boli použité. Podobne ste nemohli odstrániť otázky, ak na nich závisela akákoľvek iná otázka.
    • Vďaka zvýrazneniu syntaxe v EM je ľahké vidieť a overiť, či sa nepokúšate použiť otázky skôr, než sú deklarované. Preto teraz môžete meniť poradie alebo odstraňovať otázky a skupiny, kedykoľvek chcete. EM aktualizuje všetko zvýraznenie syntaxe a ukáže vám prípadné chyby.
    • Zobrazenie zmeny poradia otázok bolo vylepšené, aby pomáhalo pri takejto kontrole. Teraz zobrazuje rovnicu relevantnosti otázky a tailoring, takže okamžite vidíte, či niektoré premenné zružovejú (čo znamená, že sa používajú pred svojou deklaráciou).
  3. Navigačný index otázok/skupín je vždy dostupný a presný
    • Pred verziou 1.92 tieto indexy nebolo možné použiť, ak existovali zložité podmienky.
    • S EM môžeme zaručiť, že sú presné.
    • Účastníci sa môžu dokonca vrátiť na predchádzajúcu otázku, zmeniť odpoveď a potom skočiť dopredu (alebo odoslať prieskum)
      • Pri skoku dopredu EM znova overí všetky otázky/skupiny medzi nimi.
      • Ak niektoré otázky prestanú byť relevantné, v databáze sa nastavia na NULL, aby boli vaše údaje vnútorne konzistentné.
      • Ak niektoré otázky začnú byť relevantné alebo novo nesplnia pravidlá povinnosti či validácie, EM sa na tej stránke zastaví a prinúti používateľa odpovedať na tieto otázky pred skokom do cieľového miesta.
  4. Automatická konverzia podmienok na relevantnosť
    • Pri aktualizácii databázy sa pre všetky existujúce prieskumy s podmienkami vygenerujú rovnice relevantnosti
    • Pri každom importe prieskumu sa podľa potreby vytvoria rovnice relevantnosti
    • Pri každom pridaní, odstránení alebo úprave podmienok EM vygeneruje príslušnú rovnicu relevantnosti.
  5. Praktické zvýrazňovanie syntaxe
    • Keď EM zobrazí rovnicu relevantnosti, zobrazí Qcode, aj keď ste zadali kód SGQA, pretože predpokladáme, že sa bude ľahšie čítať.
    • Všetky premenné sú farebne označené, aby ukázali, či boli deklarované pred alebo po aktuálnej otázke (alebo pred alebo po aktuálnej skupine). Vďaka tomu rýchlo odhalíte a opravíte prípady, keď sa pokúšate použiť premenné v relevantnosti (vrátane array_filter), tailoringu alebo validačných rovniciach pred ich deklaráciou.
    • Ak navyše umiestnite kurzor myši nad farebne označenú premennú, zobrazia sa najdôležitejšie metadáta o tejto otázke. Patrí sem poradové číslo skupiny, poradové číslo otázky, Qcode, text otázky a všetky dostupné možnosti odpovede (ak ide o typ otázky s vymenovanými možnosťami odpovede).
      • Zoznam možností odpovede používa túto syntax: 'answers':{key:val, ... }.
      • key má syntax 'scale~code', kde scale je škála odpovede (napr. pri dvojitej škále) a code je kód odpovede.
      • val má syntax 'value~shown', kde value je hodnota hodnotenia (ak používate hodnotenia, inak code) (napr. Qcode.value) a shown je zobrazená hodnota, ktorú vidí účastník (napr. Qcode.shown)
      • To znamená, že mnohé prieskumy môžu používať výpočty bez potreby režimu hodnotenia. Ak máte vymenované možnosti odpovede, ktoré sú jedinečné, nedesatinné a nezáporné, môžete jednoducho robiť výpočty s hodnotami Qcode.code.
  6. Jednoduchá kontrola celej logiky a obsahu prieskumu
    • Nová funkcia Zobraziť logiku prieskumu vám umožňuje vidieť všetko o prieskume (alebo skupine či otázke) na jednej stránke.
    • Zobrazuje podrobnosti na úrovni skupiny, otázky, podotázky a odpovede pre vybraný rozsah (prieskum vs. skupina vs. otázka)
    • Zobrazuje tiež relevantnosť, relevantnosť na úrovni podotázok (pre array_filter a array_filter_exclude), vygenerovanú validačnú rovnicu (pre preg a akékoľvek validačné pravidlá, ako minimum/maximum súčtu/počtu hodnôt) a všetky neprázdne atribúty otázky.
    • Všetko je zvýraznené syntaxou, takže vidíte prípadné syntaktické chyby (ako nevyvážené zátvorky alebo použitie premenných pred ich deklaráciou)
    • Zvýrazňovanie syntaxe podporuje rýchlu navigáciu a úpravu prieskumu.
      • Ak kliknete na názov premennej, otvorí sa okno prehliadača (alebo karta) s touto otázkou a môžete ju upraviť.
      • Ak kliknete na názov skupiny, otvorí sa okno prehliadača (alebo karta) so zobrazením zmeny poradia v skupine, kde môžete jednoducho presúvať otázky.
      • Všetky atribúty otázky sú tiež zvýraznené syntaxou. Umožňuje to nastavovať a vidieť výrazy v pokročilých možnostiach otázky (napríklad založiť maximum/minimum počtu/súčtu hodnôt na výraze)
    • Autor EM používal podobné zobrazenie (o niečo prehľadnejšie), aby jeho spolupracujúci epidemiológovia a etická komisia mohli overovať a schvaľovať prieskumy s tisíckami otázok vo vysoko rozvetvených a prispôsobených štruktúrovaných rozhovoroch

Začíname

Najlepší spôsob, ako začať s EM:

  • Nainštalujte najnovšiu stabilnú verziu z http://www.limesurvey.org/en/download
  • Importujte a preskúmajte ukážkové prieskumy.
  • Preskúmajte prípady použitia a návody a príklady krok za krokom.
  • Preštudujte si dokumentáciu EM (táto stránka)
  • Vyskúšajte vstavanú testovaciu sadu EM
    • V ktoromkoľvek prieskume vyberte v nástrojoch možnosť EM
    • Dostupné funkcie obsahuje zoznam viac než 70 funkcií a ich syntax
    • Jednotkové testy izolovaných výrazov
      • zobrazujú príklady použitia všetkých funkcií a operátorov EM a výsledky v PHP aj JavaScripte
      • upozornenie: niekoľko funkcií dáva v PHP a JavaScripte rôzne výsledky, takže vám táto stránka umožní naplánovať logiku EM podľa toho.

Akú funkcionalitu Expression Manager rozširuje/nahrádza? (LimeSurvey <= 1.91+)

Podmienky => Relevantnosť

Podmienky riadili, ktoré otázky sú viditeľné. Všeobecná syntax bola SGQA operátor Hodnota, napríklad 111X2X3 == "Y". Podmienky bolo možné spájať pomocou AND alebo OR, ale miešanie AND a OR bolo ťažké. Samotné podmienky boli uložené v samostatnej tabuľke a veľká časť kódu LimeSurvey bola venovaná správe podmienok. Kvôli rozsiahlemu prístupu k databáze mohlo spracovanie veľkého počtu podmienok spôsobiť citeľné problémy s výkonom. Navyše, keď boli podmienky priradené k otázkam alebo skupinám, často nebolo dovolené meniť ich poradie ani ich odstrániť.

Hodnotenia => Rovnice a mikro-tailoring

Hodnotenia umožňovali používateľom vytvárať škálové skóre zo skupiny otázok. Nemohli sa však dynamicky meniť na aktuálnej stránke a ich hodnoty sa neukladali do databázy.

Nahradenia => Mikro-tailoring

Používatelia mohli prispôsobiť niektoré správy a otázky na základe predchádzajúcich odpovedí. Napríklad otázka mohla znieť {TOKEN:FIRSTNAME}, uviedli ste, že {SPORT.shown} je váš obľúbený šport. Nebolo však možné robiť podmienený tailoring (napríklad uvádzať „pán“ alebo „pani“ podľa pohlavia osoby) ani skloňovať či časovať slová bez zložitého JavaScriptu. Autori mohli vytvoriť prieskumy, ktoré sa tvárili, že prispôsobujú otázky, ale vyžadovalo to samostatné otázky pre každú permutáciu a zložité podmienky na rozhodnutie, ktoré otázky zobraziť.

Validácia

Otázky bolo možné validovať pomocou regulárnych výrazov alebo minimálnych/maximálnych hodnôt, prípadne nechať odpoveď slúžiť ako minimálnu alebo maximálnu hodnotu. Validácie však nemohli byť založené na výpočtoch z iných premenných bez zložitého JavaScriptu.

Rovnice

Rovnice neboli podporované bez zložitého JavaScriptu.

Typ otázky Rovnica

Rovnice (napr. konečné skóre hodnotenia) nebolo možné uložiť do databázy bez zložitého JavaScriptu.

Ako Expression Manager nahradí/rozšíri túto funkcionalitu?

Expression Manager je nový základný modul v LimeSurvey, ktorý výrazne uľahčuje podporu zložitej funkcionality, ktorá si predtým vyžadovala vlastný JavaScript. Zároveň nahrádza spôsob, akým LimeSurvey aktuálne spravuje podmienky a hodnotenia.

Nová terminológia pri odkazovaní na Expression Manager (EM)

EM „premýšľa“ o svojej funkcionalite v týchto pojmoch:

  • Vetvenie na základe relevantnosti - ak je otázka relevantná, položí sa, inak nie (t. j. stane sa neviditeľnou a v databáze sa označí ako NULL). Všetky typy otázok, ako aj každá skupina, majú nové pole Relevantnosť (takže môžete použiť sadu podmienok na celú skupinu bez nutnosti kopírovať tú istú podmienku do každej otázky a/alebo kombinovať podmienenú logiku na úrovni skupiny a otázky).
  • Tailoring - Keď viete, ktoré otázky sa majú položiť, tailoring (niekedy nazývaný piping) určuje, ako sa otázka položí. Podporuje nielen jednoduchú substitúciu (napríklad {TOKEN:FIRSTNAME}), ale aj časovanie slovies a skloňovanie podstatných mien podľa pohlavia alebo počtu vašich účastníkov. Umožňuje tiež meniť správu, ktorú účastníkovi doručíte, podľa toho, či odpovedal (alebo ako odpovedal) na iné otázky.
  • Rovnice - EM pridáva nový typ otázky s názvom Rovnica, ktorý ukladá výsledok výrazu. Výsledky týchto rovníc sa vypočítajú a zapíšu do databázy, aj keď ich na stránke skryjete. Preto sú užitočné pre skryté výpočty skóre, navigáciu založenú na zložitých rovniciach, hodnotenia a prehľady, ktoré sa majú vygenerovať a byť ľahko dostupné v databáze.

Relevantnosť a kaskádová relevantnosť

Každý typ otázky má teraz možnosť Relevantnosť, ktorá riadi, či sa otázka zobrazí. EM spracúva každú rovnicu relevantnosti v poradí, v akom sa majú zobrazovať v prieskume. Ak je výraz pravdivý (alebo chýba - kvôli podpore starších prieskumov), otázka sa zobrazí. Ak nie je relevantná, otázka sa skryje a hodnota sa v databáze nastaví na NULL. Ak v skupine nie sú žiadne relevantné otázky, celá skupina sa preskočí.

Ak je navyše akákoľvek premenná vo výraze nerelevantná, výraz sa vždy vyhodnotí ako nepravdivý. To umožňuje kaskádovú relevantnosť, takže nemusíte písať veľmi dlhé rovnice relevantnosti pre každú otázku.

Povedzme, že máte 5 otázok Q1-Q5 a chcete zobraziť Q2 iba vtedy, ak sa odpovedalo na Q1, Q3 iba vtedy, ak sa odpovedalo na Q2, atď. Rovnice relevantnosti môžu byť:

Kód otázky Relevantnosť Otázka
Q1 1 Aké je vaše meno?
Q2 Q1 {Q1}, koľko máte rokov?
Q3 Q2 Takže máte {Q2} rokov. Ste ženatý/vydatá?
Q4 Q3 == "Y" {Q1}, ako dlho ste ženatý/vydatá?
Q5 Q4 Koľko máte detí, {Q1}?

Výpočty relevantnosti fungujú aj v JavaScripte - takže všetky vyššie uvedené otázky môžete umiestniť na jednu stránku a bude to fungovať podľa očakávania. EM v skutočnosti úplne nahrádza spôsob, akým EM spracúva formáty prieskumu po celom prieskume, po skupinách a po otázkach. Všetky teraz používajú presne ten istý navigačný systém, takže fungujú rovnako bez ohľadu na štýl prieskumu.

Kým ste na tej istej stránke, všetky údaje, ktoré ste zadali, tam zostanú, len budú skryté. Ak teda zadáte nejaké informácie, potom vyberiete možnosť, ktorá ich urobí nerelevantnými, a potom ich znova urobíte relevantnými, vaše odpovede budú stále k dispozícii. Akonáhle však prejdete na inú stránku, všetky nerelevantné odpovede sa stratia, aby sa zachovala integrita súboru údajov.

Relevantnosť na úrovni skupiny

Expression Manager podporuje aj relevantnosť na úrovni skupiny. Vďaka tomu je jednoduchšie implementovať cyklenie. Predpokladajme, že chcete zhromaždiť informácie až o 10 entitách (napríklad o produktoch alebo osobách v domácnosti), pričom najprv zistíte, koľko entít vyžaduje doplňujúce otázky (napríklad otázkou, koľko ľudí žije v domácnosti, alebo tým, že respondenti označia, ktoré produkty z dlhého zoznamu sa im páčia). Keď viete, koľko entít vyžaduje doplňujúce otázky, môžete pre každú z 10 skupín doplňujúcich otázok použiť relevantnosť na úrovni skupiny, napríklad {count >= 1}, {count >=2}, ... {count >= 10}. V rámci každej skupiny môžete mať podmienenú logiku na úrovni otázky (napr. doplňujúce otázky špecifické pre pohlavie alebo vek každého respondenta). Rovnice relevantnosti na úrovni otázky a skupiny sa spájajú operátorom AND, čím sa určuje, čo sa má zobraziť.

Prispôsobenie / Piping

Všetko v zložených zátvorkách sa teraz považuje za výraz (s jednou výnimkou opísanou nižšie). Výrazy majú prístup ku všetkým LimeReplacementFields, ku všetkým premenným (cez viacero aliasov), ku všetkým typickým operátorom rovníc (matematickým, logickým a porovnávacím) a k desiatkam funkcií (ktoré fungujú dynamicky aj na strane klienta).

Pomocou týchto rovníc môžete robiť napríklad toto:

  1. Podmienene zobrazovať prispôsobené správy respondentom na základe predchádzajúcich odpovedí
  2. Vytvárať hodnotenia a zobrazovať ich výsledky (alebo podľa nich podmienene vetviť či zobrazovať správy), a to bez použitia samotného modulu hodnotení
  3. Časovať slovesá a skloňovať podstatné mená v otázkach, odpovediach a reportoch.
  4. Zobraziť súhrny odpovedí pred stránkou „Zobraziť vaše odpovede“ na konci prieskumu

Rovnice

Existuje nový typ otázky s názvom Rovnica. Je podobný otázke typu Boilerplate, avšak hodnotu zobrazeného obsahu ukladá do databázy. Ak teda text otázky typu Rovnica obsahuje výpočet hodnotenia, táto hodnota sa uloží do databázy v premennej, ktorú možno zobraziť vo verejných alebo súkromných štatistikách.

Tým sa rieši častá požiadavka na ukladanie skóre hodnotenia do databázy.

Syntax

Všetko, čo je uzavreté v zložených zátvorkách, sa teraz považuje za výraz (s jednou výnimkou: na začiatku ani na konci nesmie byť medzera - je to potrebné, aby sa Expression Manager nepokúšal spracovať vložený JavaScript).

Upozorňujeme, že výrazy sa môžu rozprestierať na viacerých riadkoch, pokiaľ za otváracou zloženou zátvorkou ani pred zatváracou zloženou zátvorkou nie je medzera. To je užitočné najmä pri vnorených príkazoch if(), ako je tento:

{if(is_empty(PFTotals),
 '',
 if(PFTotals >= -5 && PFTotals <= -4,
   'Very Soft',
   if(PFTotals >= -3 && PFTotals <= -2,
     'Soft',
     if(PFTotals == -1,
       'Somewhat Soft',
       if(PFTotals == 0,
         'Moderate',
         if(PFTotals == 1,
           'Somewhat Hard',
           if(PFTotals >= 2 && PFTotals <= 3,
             'Hard',
             if(PFTotals >= 4 && PFTotals <= 5,
               'Very Hard',
               ''
             )
           )
         )
       )
     )
   )
 )
)}
Expression Manager podporuje nasledujúcu syntax:
  • Všetky štandardné matematické operátory (napr. +,-,*,/,!)
  • Všetky štandardné porovnávacie operátory (napr. <,<=,==,!=,>,>=, plus tieto ekvivalenty: lt,le,eq,ne,gt,ge)
  • Zátvorky (na zoskupovanie podvýrazov)
  • Podmienkové operátory (napr. &&,| | a tieto ekvivalenty: and,or)
  • Reťazce v jednoduchých a dvojitých úvodzovkách (do každého z nich možno vložiť reťazce s druhým typom úvodzoviek)
  • Operátor čiarky (možno mať zoznam výrazov a vrátiť len posledný výsledok)
  • Operátor priradenia (=)
  • Preddefinované premenné (na odkazovanie na otázky, atribúty otázok a odpovede) - napr. všetky kódy SGQA
  • Preddefinované funkcie (už ich je 70+ a ďalšie sa dajú ľahko pridať)

Operátory

Syntax EM dodržiava bežnú prioritu operátorov:

Úroveň Operátor(y) Popis
1 () zátvorky na zoskupovanie alebo volanie funkcií
2 ! - + unárne operátory: negácia, záporné znamienko, kladné znamienko
3 * / násobenie, delenie
4 + - sčítanie, odčítanie
5 < <= > >= lt le gt ge relačné porovnania
6 == != eq ne porovnania rovnosti
7 and logické AND
8 or logické OR
9 = operátor priradenia
10 , operátor čiarky

Upozornenie k operátoru plus (+) =

Kvôli konzistencii medzi JavaScriptom a PHP operátor plus (+) sčítava, ak sú oba operandy číselné, ale zreťazuje, ak sú oba operandy nečíselné reťazce. Na zreťazenie však odporúčame používať funkciu join() a na sčítanie funkciu sum(), pretože tak je váš zámer jasnejší a vyhnete sa neočakávaným výsledkom, ak ste očakávali reťazce, ale dostali ste čísla (alebo naopak).

Upozornenie na nezhodu medzi číslom a reťazcom a abecedné porovnávanie

Keď porovnávate hodnoty relačnými operátormi alebo operátormi rovnosti, dávajte pozor na nezhodu typov. Hodnota zadaná používateľom alebo vybraný kód odpovede sa môže použiť ako číslo, ak je to zjavne číslo. Ak jednu z hodnôt uzavriete do ", porovnanie sa vynúti ako textové (abecedné porovnanie). Ak chcete porovnávať numericky, číslo nikdy neuzatvárajte do úvodzoviek, ".

Napríklad Q0.NAOK > "50" je pravdivé, ak je Q0.NAOK číselná otázka s hodnotou 9. Je to preto, že operátor > predpokladá abecedné porovnanie, nie numerické.

Ak chcete mať istotu, že sa porovná celočíselná hodnota, môžete použiť intval(Q0.NAOK) > 50, len nezabudnite, že ak Q0.NAOK nie je číslo (je prázdne alebo je to reťazec), potom intval(Q0.NAOK) == 0. Na porovnanie reťazcových hodnôt ("A" < "B") použite priamo strcmp: strcmp(Q0.NAOK,"B") alebo strcmp(Q0.NAOK,"A5").

Upozornenie k používaniu operátora priradenia (=)

Operátorom priradenia by ste sa mali vyhýbať, pokiaľ to nie je nevyhnutné, pretože môžu spôsobiť neočakávané vedľajšie účinky. Ak napríklad zmeníte hodnotu predchádzajúcej odpovede, kaskádová logika relevantnosti a validácie medzi touto otázkou a aktuálnou otázkou sa neprepočíta, takže môžete skončiť s vnútorne nekonzistentnými údajmi (napr. otázky, ktoré zostali zodpovedané, ale mali byť nastavené na NULL, alebo otázky, ktoré sa preskočili, ale mali byť zodpovedané). Vo všeobecnosti platí, že ak chcete premennej priradiť hodnotu, mali by ste vytvoriť otázku typu Rovnica a jej hodnotu nastaviť pomocou výrazu. Existujú však zriedkavé prípady, keď ľudia tento operátor skutočne potrebujú, preto sme ho sprístupnili.

Aby sme vás na tento operátor upozornili, zobrazuje sa v syntaktických rovniciach červeným písmom (aby ste ho nezamenili s „==“).

Používanie operátora priradenia

Hlavné dôvody, prečo môžete chcieť použiť priradenie:

  • Potrebujete nastaviť predvolenú hodnotu pre otázku, ktorá neakceptuje predvolené hodnoty pomocou rovnice (napríklad zoznam s prepínačmi, kde vám rozhranie umožňuje vybrať jednu z možností odpovede, ale nedovoľuje zadať rovnicu). Buďte však opatrní, pretože LimeSurvey nedokáže overiť, či vaša rovnica vytvára jednu z povolených odpovedí pre danú otázku.
  • Potrebujete nasilu zmeniť odpoveď na predchádzajúcu otázku na základe neskoršej odpovede
  • Potrebujete zložitú kvótu: použitie jednej skrytej otázky s jednou voľbou pre kvótu a jej nastavenie pomocou priradenia
  • atď...

Na tento účel môžete použiť celý systém Expression Manager.

  Priradenie sa vykonáva iba v PHP. Neaktualizuje žiadne hodnoty na tej istej stránke, ale iba keď používateľ prechádza ďalej, späť, ukladá …


  Ak na tento účel nepoužijete typ otázky Rovnica: priradenie sa vykoná až po dokončení logiky aktuálnej stránky. Odporúčaný spôsob je vždy použiť otázku Rovnica.


Niekoľko príkladov:

  • Nastavenie odpovede na otázku s krátkym textom na malé písmená: {QCODE=strtolower(QCODE.NAOK)}
  • Nastavenie predvolenej odpovede pre typ otázky pole na začiatku prieskumu: {Q1_SQ1=((is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)}
  • Nastavenie predvolenej odpovede pre typ otázky pole textov na začiatku prieskumu: {Q1_SQY1_SQX1 = ((is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)}
  • Nastavenie odpovede s podmienkou: {QCODE=if(YesNo="Y","A1","")}

Zabezpečenie XSS

Pri zapnutom XSS nie je možné používať niektoré funkcie Expression Manageru:

  • začatie HTML značky v jednom výraze a jej ukončenie v inom výraze
  • použitie zložitého výrazu v URL.

Príklad a riešenie

  • {if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")} nefunguje so zabezpečením XSS, tu môžete použiť {if(1,"<strong>information</strong>","information")}
  • <a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a>, tu môžete použiť otázku typu rovnica, pretože použitie úplného kódu otázky je v poriadku: <a href="/script.php?value={EQUATION.NAOK}">next</a>

Prístup k premenným

Expression Manager poskytuje prístup len na čítanie ku všetkým premenným, ktoré môžeme potrebovať. Z dôvodu spätnej kompatibility poskytuje prístup k nasledujúcemu:

  • TOKEN:xxx - hodnota tokenu (napr. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (iba pre NEanonymný prieskum).
  • QCODE.shown - zobrazená hodnota odpovede (napr. "Áno") pri použití Expression Manageru.
  • Všetky hodnoty {XXX} používané šablónami.
  • V texte otázky môžete použiť {QID}, ktoré sa nahradí ID otázky, a {SGQ}, ktoré sa nahradí hodnotou SGQA otázky

Expression Manager vám navyše umožňuje odkazovať na premenné pomocou kódu otázky (stĺpec 'title' v tabuľke otázok v databáze). Je to tiež označenie premennej, ktoré sa používa pri exporte údajov do SPSS, R alebo SAS. Ak máte napríklad otázky o mene, veku a pohlaví, môžete tieto premenné nazvať name, age a gender namiesto 12345X13X22, 12345X13X23 a 12345X13X24. Vďaka tomu sa rovnice ľahšie čítajú a overuje sa ich logika, a otázky môžete presúvať bez nutnosti sledovať čísla skupín alebo otázok.

Dôležité: Bezpečné je odkazovať iba na premenné, ktoré sa nachádzajú v predchádzajúcich stránkach alebo otázkach.

Expression Manager vám ďalej umožňuje pristupovať k mnohým vlastnostiam otázky:


Syntax Význam Príklad Výsledok príkladu
Qcode alias pre Qcode.code {implode(',',name,gender)} 'Tom','M'
Qcode.code zvolený kód odpovede na otázku, ak je relevantná (inak prázdne), alebo textová hodnota, ak nejde o otázku s kódovanými odpoveďami {implode(',',name.code,gender.code)} 'Tom','M'
Qcode.NAOK rovnaké ako Qcode - pozrite diskusiu o NAOK {gender.NAOK} 'M'
Qcode.value hodnota hodnotenia otázky, ak je relevantná (inak prázdne), alebo textová hodnota, ak nejde o otázku s kódovanými odpoveďami {gender.value} '1'
Qcode.valueNAOK rovnaké ako Qcode.value - pozrite diskusiu o NAOK {gender.valueNAOK} '1'
Qcode.shown zobrazená hodnota otázky {implode(',',name.shown,gender.shown)} 'Tom','Male'
Qcode.question text otázky {gender.question} 'What is your gender?'
Qcode.mandatory určuje, či je otázka povinná (Y/N) {gender.mandatory} 'N'
Qcode.qid interné číslo otázky (nie poradové číslo) {gender.qid} 337
Qcode.type typ otázky {gender.type} 'G'
Qcode.jsName správny názov v JavaScripte pre otázku, bez ohľadu na to, či je deklarovaná na tejto stránke alebo mimo nej {gender.jsName} 'java1827X3X337'
Qcode.gid interné číslo skupiny (nie poradové číslo) {gender.gid} 3
Qcode.qseq poradové číslo otázky, počnúc od 0 {gender.qseq} 5
Qcode.gseq poradové číslo skupiny, počnúc od 0 {gender.gseq} 1
Qcode.relevanceStatus určuje, či je otázka momentálne relevantná (0 alebo 1) {gender.relevanceStatus} 1
Qcode.relevance rovnica relevantnosti na úrovni otázky {gender.relevance} '!is_empty(name)'
Qcode.grelevance rovnica relevantnosti na úrovni skupiny {gender.grelevance} 'num_children >= 5'
Qcode.sgqa hodnota SGQA tejto otázky {gender.sgqa} '1827X3X337'

Problém s HTML editorom

  Tento problém bol opravený po verzii 2.05 build 140803


Ak používate HTML editor, niektoré znaky sa nahradia HTML entitami.

  • & sa nahradí &amp;
  • < sa nahradí &lt;
  • > sa nahradí &gt;

Ak používate HTML editor, musíte použiť:

  • and namiesto &
  • lt namiesto <
  • le namiesto <=
  • gt namiesto >
  • ge namiesto >=

Pomenovanie premenných Qcode

Tu sú podrobnosti o tom, ako zostaviť Qcode (a pristupovať k niektorým vlastnostiam) podľa typu otázky. Qcode sa vo všeobecnosti zostavuje takto:

 QuestionCode . '_' . SubQuestionCode . '_' . ScaleId

Kód podotázky a ID škály sa používajú alebo nepoužívajú v závislosti od typu otázky - pozrite tabuľku nižšie. Pre comment a other sú kódy otázok QuestionCode_comment a QuestionCode_other

Typ Popis Kód Podotázky Možnosti odpovede Škály Kód odpovede Zobrazená odpoveď Relevantnosť
5 5 možností (prepínače) Q1 1-5 {Q1} {Q1.shown} {Q1==3}
B Pole (výber z 10 bodov) - prepínače Q2 L1-L6 1-10 {Q2_L2} {Q2_L2.shown} {Q2_L2==7}
A Pole (výber z 5 bodov) - prepínače Q3 1-5 1-5 {Q3_1} {Q3_1.shown} {Q3_1>=3}
1 Pole (flexibilné štítky) - dvojitá škála Q4 sq1-sq5 0:a1-a3 1:b1-b3 {Q4_sq1_0} {Q4_sq1_1.shown} {Q4_sq1_1=='b2'}
H Pole (flexibilné) - formát stĺpcov Q5 1-5 s,m,t {Q5_1} {Q5_1.shown} {Q5_1=='s'}
F Pole (flexibilné) - formát riadkov Q6 F1-F5 1-5 {Q6_F3} {Q6_F3.shown} {Q6_F3==4}
E Otázky so škálou (Nárast/Bez zmeny/Pokles) - prepínače Q7 1-7 I,S,D {Q7_4} {Q7_4.shown} {Q7_4=='D'}
: Pole (viacnásobné flexibilné) 1 až 10 Q8 ls1,todo,ls2 min,max,avg {Q8_ls1_max} {Q8_ls2_avg.shown} {Q8_ls2_min==7}
; Pole (viacnásobné flexibilné) text Q9 hp,st,sw 1st,2nd,3rd {Q9_hp_3rd} {Q9_hp_3rd.shown} {Q9_hp_3rd=='Peter'}
C Pole (Áno/Neistý/Nie) - prepínače Q10 1-5 Y,N,U {Q10_1} {Q10_1.shown} {Q10_3=='Y'}
X Otázka s pevným textom (boilerplate) Q11 {Q11.shown}
D Dátum Q12 {Q12} {Q12.shown}
* Rovnica Q13 {Q13} {Q13.shown} {Q13>5}
~124~ Nahrať súbor (zaznamenáva počet nahraných súborov) Q14 {Q14} {Q14>0}
G Rozbaľovací zoznam - pohlavie Q15 M,F {Q15} {Q15.shown} {Q15=='M'}
U Rozsiahle textové pole Q16 {Q16} {Q16.shown} {strlen(Q16)>100}
I Otázka na jazyk Q17 {Q17} {Q17.shown} {Q17=='en'}
! Zoznam - rozbaľovací Q18 1-5 {Q18} {Q18.shown} {Q18==3}
L Zoznam - rozbaľovací zoznam/prepínače Q19 A-Z {Q19} {Q19.shown} {Q19=='X'}
O Zoznam s komentárom - rozbaľovací zoznam/prepínače + textové pole Q20 A-F {Q20},{Q20comment} {Q20.shown} {Q20=='B'}
T Dlhý text Q21 {Q21} {Q21.shown} {strstr(Q21,'hello')>0}
M Možnosť výberu viacerých možností - začiarkavacie políčka Q22 A-F, other {Q22_E}, {Q22_other} {Q22_E.shown}, {Q22_other.shown} {Q22_E=='Y'}
P Možnosť výberu viacerých možností s komentárom - začiarkavacie políčko + text Q23 A-F {Q23_D}, {Q23_Dcomment} {Q23_D.shown} {!is_empty(Q23)}
K Viacnásobná číselná otázka Q24 self,mom,dad {Q24_self} {Q24_self.shown} {Q24_self>30}
Q Viacnásobný krátky text Q25 A-F {Q25_B} {Q25_B.shown} {substr(Q25_B,1,1)=='Q'}
N Číselná otázka Q26 {Q26} {Q26.shown} {Q26 > 30}
R Poradie Q27 1-4 {Q27_1} {Q27_1.shown} {Q27_1==3}
S Krátky text Q28 {Q28} {Q28.shown} {Q28=='mine'}
Y Áno/Nie - prepínače Q29 {Q29} {Q29.shown} {Q29=='Y'}

Rezervované premenné 'this', 'self' a 'that'

Pomerne často potrebujete vyhodnotiť všetky časti otázky, napríklad spočítať, koľko podotázok bolo zodpovedaných, alebo sčítať skóre. Inokedy chcete spracovať len určité riadky alebo stĺpce otázky (napríklad získať súčty riadkov alebo stĺpcov a uložiť ich do databázy). Tieto rezervované premenné z tohto procesu robia relatívne jednoduchú záležitosť.

Premenná 'this' sa používa výhradne v rozšírených možnostiach otázky "Rovnica na overenie celej otázky" a "Rovnica na overenie podotázky". Rozvinie sa na názvy premenných každej bunky v týchto otázkach. Ak teda chcete zabezpečiť, aby bol každý údaj väčší ako tri, nastavíte "Rovnicu na overenie podotázky" na (this > 3).

Premenné 'self' a 'that' sú výkonnejšie a slúžia ako makrá, ktoré sa rozvinú pred spracovaním rovníc. Možnosti syntaxe sú:

  • self
  • self.suffix
  • self.sub-selector
  • self.sub-selector.suffix

suffix je ktorákoľvek z bežných prípon qcode (napr. NAOK, value, shown)

sub-selector je jedno z nasledujúceho:

  • comments - iba podotázky, ktoré sú komentármi (napr. z možnosti výberu viacerých možností s komentárom a zo zoznamu s komentárom)
  • nocomments - iba podotázky, ktoré nie sú komentármi
  • sq_X - kde X je identifikátor riadka alebo stĺpca. Vyberú sa iba podotázky zodpovedajúce vzoru X. Upozorňujeme, že vyhľadávanie sa vykonáva na úplnom identifikátore kódu, potom sa zhoduje sq_X a zahŕňa podotázky nX, X, Xn (napr. ak použijete sq_1, zahrnuté budú podotázky a1, 1a, 1, 11 alebo 001). Dávajte pozor na otázky s dvojitou škálou, kde kódy podotázok sú QCODE_SQCODE_1 a QCODE_SQCODE_1, a na otázky typu poradie, kde kódy podotázok sú QCODE_1, QCODE_2 ....
  • nosq_X - kde X je identifikátor riadka alebo stĺpca. Vyberú sa iba podotázky, ktoré nezodpovedajú vzoru X. Upozorňujeme, že vyhľadávanie sa vykonáva na úplnom identifikátore kódu, potom sa zhoduje nosq_X a nezahŕňa podotázky nX, X, Xn

Príklady:

  • Bola zodpovedaná nejaká časť otázky? {count(self.NAOK)>0}
  • Aké je skóre hodnotenia pre túto otázku? {sum(self.value)}

Môžete ich použiť aj na získanie súčtov riadkov a stĺpcov. Povedzme, že máte pole čísel s riadkami A-E a stĺpcami 1-5.

  • Aký je celkový súčet? {sum(self.NAOK)}
  • Aký je súčet riadka B? {sum(self.sq_B.NAOK)}
  • Aký je súčet stĺpca 3? {sum(self.sq_3.NAOK)}

Premenná 'that' je podobná premennej 'self', ale umožňuje odkazovať na iné otázky. Jej syntax je:

  • that.qname
  • that.qname.suffix
  • that.qname.sub-selector
  • that.qname.sub-selector.suffix

qname je názov otázky bez akýchkoľvek prípon podotázok. Ak teda vytvoríte otázku 'q1', toto je jej qname

Príklady:

  • Bola zodpovedaná nejaká časť otázky q1? {count(that.q1.NAOK)>0}
  • Aké je skóre hodnotenia pre q2? {sum(that.q2.NAOK)}
  • Aký je celkový súčet pre q3? {sum(that.q3.NAOK)}
  • Aký je súčet riadka C v q4? {sum(that.q4.sq_C.NAOK)}
  • Aký je súčet stĺpca 2 v q4? {sum(that.q4.sq_2.NAOK)}

Premenné 'self' a 'that' môžete použiť v akejkoľvek relevantnosti, validácii alebo prispôsobení textu.

Jedno upozornenie: keď použijete funkciu Zobraziť súbor logiky, zobrazí sa rozvinutá hodnota 'self' a 'that'. Vďaka tomu uvidíte skutočnú rovnicu, ktorá sa vygeneruje, aby ste (a Expression Manager) mohli overiť, že premenné existujú. Môže to pôsobiť zmätočne, pretože môžete vidieť pomerne dlhé rovnice. Ak však upravíte otázku, uvidíte pôvodnú rovnicu s použitím 'self' a/alebo 'that'

Tiež si všimnite, že tieto premenné by ste nemali používať, ak (a) chcete explicitne pomenovať každú premennú použitú vo rovnici, alebo (b) používate premenné, ktoré nemajú podotázky (napr. otázky s jednou odpoveďou). V takýchto prípadoch je predpona 'that' zbytočná a riskujete neočakávané výsledky.

Použitie NAOK

NAOK --> "Not Applicable" (NA) is alright (OK) – „Nehodí sa“ je v poriadku

Použitie NAOK znamená, že všetky alebo niektoré premenné sú irelevantné (t. j. "Not Applicable" (NA) is alright (OK) – „Nehodí sa“ je v poriadku).

Ak vložíte do akejkoľvek rovnice premennú z otázky a táto otázka (alebo podotázka) je skrytá podmienkou, celá rovnica sa vypne.

Napríklad: count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) vždy vráti prázdny reťazec, ak je niektorá podotázka otázky Q1 odfiltrovaná. Na spočítanie zaškrtnutých podotázok v takejto otázke môžete použiť count(Q1_SQ1.NAOK,Q1_SQ2.NAOK,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Ak je podotázka skrytá, Expression Manager vráti prázdny reťazec.

Bez NAOK: ak je skrytá jedna otázka alebo jedna podotázka, Expression Manager vždy vráti prázdny reťazec, čo je rovnaké ako vrátiť hodnotu false.

Prípona .shown vždy používa systém NAOK (prázdny reťazec, ak je skrytá), ale ak potrebujete kód odpovede, vždy je vhodné pridať .NAOK za kód otázky. Výnimkou je prípad, keď to potrebujete a viete, čo robíte.

Ďalší príklad a informácie nájdete v časti Overriding Cascading Conditions

Prístup k funkciám

Expression Manager poskytuje prístup k matematickým, reťazcovým a používateľom definovaným funkciám, ako je uvedené nižšie. Pre tieto funkcie má ekvivalenty v PHP a JavaScripte, takže fungujú rovnako na strane servera (PHP) aj na strane klienta (JavaScript). Pridať nové funkcie je jednoduché.

Implementované funkcie

Aktuálne sú dostupné nasledujúce funkcie:

Funkcia Význam Syntax
abs Absolútna hodnota number abs(number)
acos Arkus kosínus number acos(number)
addslashes Citovať reťazec pomocou lomítok string addslashes(string)
asin Arkus sínus number asin(number)
atan Arkus tangens number atan(number)
atan2 Arkus tangens dvoch premenných number atan2(number, number)
ceil Zaokrúhliť nahor number ceil(number)
checkdate Vráti pravdu (1), ak ide o platný dátum v gregoriánskom kalendári bool checkdate(month,day,year)
convert_value Previesť číselnú hodnotu pomocou vstupnej a výstupnej tabuľky číselných hodnôt number convert_value(fValue, iStrict, sTranslateFromList, sTranslateToList)
cos Kosínus number cos(number)
count spočítať počet zodpovedaných (neprázdnych) otázok v zozname number count(arg1, arg12, ..., argN)
countif Spočítať počet zodpovedaných otázok v zozname, ktoré sa rovnajú prvému argumentu number countif(matches, arg1, arg2, ... argN)
countifop Spočítať počet zodpovedaných otázok v zozname, ktoré spĺňajú kritériá (arg op value) number countifop(op, value, arg1, arg2, ... argN)
date Formátovať miestny dátum/čas string date(format [, timestamp=time()])
exp Vypočíta exponent e number exp(number)
fixnum Zobraziť čísla s čiarkou ako oddeľovačom desatinných miest, ak je to potrebné string fixnum(number)
floor Zaokrúhliť nadol number floor(number)
gmdate Formátovať svetový dátum/čas string gmdate(format [, timestamp=time()])
html_entity_decode Previesť všetky HTML entity na zodpovedajúce znaky (vždy používa ENT_QUOTES a UTF-8) string html_entity_decode(string)
htmlentities Previesť všetky použiteľné znaky na HTML entity (vždy používa ENT_QUOTES a UTF-8) string htmlentities(string)
expr_mgr_htmlspecialchars Previesť špeciálne znaky na HTML entity (vždy používa ENT_QUOTES a UTF-8) string htmlspecialchars(string)
expr_mgr_htmlspecialchars_decode Previesť špeciálne HTML entity späť na znaky (vždy používa ENT_QUOTES a UTF-8) string htmlspecialchars_decode(string)
idate Formátovať miestny čas/dátum ako celočíselné string idate(string [, timestamp=time()])
if (Updated in 3.0.2 ) if v štýle Excelu: if(test,result_if_true[,result_if_false = ""]) if(test,result_if_true[,result_if_false = ""])
implode Spojiť položky poľa pomocou reťazca string implode(glue,arg1,arg2,...,argN)
intval Získať celočíselnú hodnotu premennej int intval(number [, base=10])
is_empty Určiť, či sa premenná považuje za prázdnu bool is_empty(var)
is_float Zistiť, či je typ premennej float bool is_float(var)
is_int Zistiť, či je typ premennej celé číslo bool is_int(var)
is_nan Zistiť, či premenná nie je číslo bool is_nan(var)
is_null Zistiť, či je premenná hodnoty NULL bool is_null(var)
is_numeric Zistiť, či je premenná číslo alebo číselný reťazec bool is_numeric(var)
is_string Zistiť, či je typ premennej reťazec bool is_string(var)
join (New in 2.0 build 130129) Spojiť prvky do nového reťazca join(arg1, arg2, ... argN)
list Vráti zoznam neprázdnych hodnôt oddelených čiarkami string list(arg1, arg2, ... argN)
listifop (New in 3.16.1 ) Vráti zoznam oddelený znakom 'glue' zadanej vlastnosti otázky (retProp) z otázok v zozname, ktoré spĺňajú kritériá (cmpProp op value) string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
log Logaritmus čísla so základom base, ak je zadaný, inak prirodzený logaritmus. number log(number,base=e)
ltrim Odstrániť medzery (alebo iné znaky) zo začiatku reťazca string ltrim(string [, charlist])
max Nájdi najvyššiu hodnotu number max(arg1, arg2, ... argN)
min Nájdi najnižšiu hodnotu number min(arg1, arg2, ... argN)
mktime Získať UNIX časovú pečiatku pre dátum (každý zo 6 argumentov je voliteľný) number mktime([hour [, minute [, second [, month [, day [, year ]]]]]])
modulo-function Funkcia modulo zatiaľ nie je podporovaná. Namiesto nej môžete použiť funkciu floor() floor(x/y)==(x/y)
nl2br Vloží HTML zalomenia riadkov pred všetky znaky nového riadka v reťazci string nl2br(string)
number_format Formátovať číslo oddelením tisícov string number_format(number)
pi Získať hodnotu pí number pi()
pow Exponenciálny výraz number pow(base, exp)
quoted_printable_decode Previesť reťazec quoted-printable na 8-bitový reťazec string quoted_printable_decode(string)
quoted_printable_encode Previesť 8-bitový reťazec na reťazec quoted-printable string quoted_printable_encode(string)
quotemeta Citovať metaznaky string quotemeta(string)
rand Generuj náhodné číslo, pozrite tento príklad int rand() OR int rand(min, max)
regexMatch porovnať reťazec s regulárnym výrazom bool regexMatch(pattern,input)
round Zaokrúhliť číslo na voliteľnú presnosť number round(val [, precision])
rtrim Odstrániť medzery (alebo iné znaky) z konca reťazca string rtrim(string [, charlist])
sin Sínus number sin(arg)
sprintf Vráť naformátovaný reťazec string sprintf(format, arg1, arg2, ... argN)
sqrt Druhá odmocnina number sqrt(arg)
stddev Vypočítať výberovú štandardnú odchýlku pre zoznam čísel number stddev(arg1, arg2, ... argN)
str_pad Doplniť reťazec na určitú dĺžku iným reťazcom string str_pad(input, pad_length [, pad_string])
str_repeat Zopakuj reťazec string str_repeat(input, multiplier)
str_replace Nahradiť všetky výskyty hľadaného reťazca náhradným reťazcom string str_replace(search, replace, subject)
strcasecmp Binárne bezpečné porovnanie reťazca nerozlišujúce malé a veľké písmená int strcasecmp(str1, str2)
strcmp Binárne bezpečné porovnanie reťazca int strcmp(str1, str2)
strip_tags Odobrať HTML a PHP tagy z reťazca string strip_tags(str, allowable_tags)
stripos Nájsť pozíciu prvého výskytu unicode reťazca bez rozlišovania veľkosti písmen (od 0, vráti false, ak sa nenašiel) int stripos(haystack, needle [, offset=0])
stripslashes Zrušiť citovanie citovaného reťazca string stripslashes(string)
stristr Strstr nezolišujúci malé a veľké písmená string stristr(haystack, needle [, before_needle=false])
strlen Zadať dĺžku reťazca int strlen(string)
strpos Nájsť pozíciu prvého výskytu unicode reťazca (od 0, vráti false, ak sa nenašiel) int strpos(haystack, needle [ offset=0])
strrev Obrátiť reťazec string strrev(string)
strstr Nájsť prvý výskyt reťazca string strstr(haystack, needle[, before_needle=false])
strtolower Zmeniť reťazec na malé písmená string strtolower(string)
strtotime Previesť takmer akýkoľvek anglický textový popis dátumu a času na UNIX časovú pečiatku int strtotime(string)
strtoupper Zmeniť reťazec na veľké písmená string strtoupper(string)
substr Vrátiť časť unicode reťazca string substr(string, start [, length])
sum Vypočítať súčet hodnôt v poli number sum(arg1, arg2, ... argN)
sumifop Sčítať hodnoty zodpovedaných otázok v zozname, ktoré spĺňajú kritériá (arg op value) number sumifop(op, value, arg1, arg2, ... argN)
tan Tangens number tan(arg)
time Vrátiť aktuálnu UNIX časovú pečiatku number time()
trim Odstrániť medzery (alebo iné znaky) zo začiatku a konca reťazca string trim(string [, charlist])
ucwords Zmeniť prvé písmeno každého slova v reťazci na veľké string ucwords(string)
unique Vráti pravdu, ak sú všetky vyplnené odpovede unikátne boolean unique(arg1, ..., argN)

Funkcie, ktoré sú plánované alebo zvažované

Ďalšie funkcie, ktoré sú plánované (alebo zvažované), ale zatiaľ nie sú implementované, sú uvedené nižšie. Niektoré z nich slúžia na spätnú kompatibilitu s iným nástrojom na prieskumy.

Syntax Význam Poznámky
e() vráti hodnotu e
formatDate(X,PAT) vráti reťazcovú hodnotu dátumu X naformátovanú podľa vzoru formátu dátumu Java PAT
formatNumber(X,PAT) vráti reťazcovú hodnotu čísla X naformátovanú podľa vzoru formátu čísla Java PAT
getAnsOption(X) Základný doplnok ExpressionAnswerOptions
getAnsOption(X,Y) Základný doplnok ExpressionAnswerOptions
getRelevance(X) vráti rovnicu relevantnosti pre otázku X
getStartTime() vráti dátum zodpovedajúci systémovému času, kedy sa začal rozhovor
getType(X) vráti reťazcový názov dátového typu - napr. *NA*, ak isNA()
gotoFirst() skočí na prvú relevantnú skupinu otázok - porušuje bežný tok systému
gotoNext() skočí na ďalšiu relevantnú skupinu otázok - porušuje bežný tok systému
gotoPrevious() skočí na predchádzajúcu relevantnú skupinu otázok - porušuje bežný tok systému
isAsked(X) vráti true, ak odpoveď nie je typu *NA*, *INVALID* ani *UNASKED*
isInvalid(X) vráti true, ak je odpoveď typu *INVALID*
isNA(X) vráti true, ak je odpoveď typu *NA*
isNotUnderstood(X) vráti true, ak je odpoveď typu *HUH*
isRefused(X) vráti true, ak je odpoveď typu *REFUSED*
isSpecial(X) vráti true, ak je odpoveď typu *UNASKED*, *NA*, *REFUSED*, *INVALID*, *UNKNOWN* alebo *HUH*
isUnknown(X) vráti true, ak je odpoveď typu *UNKNOWN*
jumpTo(X) skočí na skupinu obsahujúcu pomenovanú otázku -- porušuje bežný tok systému
jumpToFirstUnasked() skočí na prvú nezobrazenú otázku čím obíde predtým zodpovedané otázky porušuje bežný tok systému
lastIndexOf(X,Y) vráti posledný index (od 0) reťazca Y v reťazci X. Ak X neobsahuje Y, vráti -1
list(X,...) reťazec obsahujúci zoznam kladných hodnôt oddelených čiarkou, pričom posledné dve sú oddelené slovom „and“
mean(X,...) vráti priemer zoznamu hodnôt
numAnsOptions(X) vráti počet možností odpovede, ktoré má otázka X
orlist(X,...) reťazec obsahujúci zoznam kladných hodnôt oddelených čiarkou, pričom posledné dve sú oddelené slovom „or“
parseDate(X,PAT) vráti hodnotu dátumu z reťazca X spracovaného podľa vzoru formátu dátumu Java PAT
parseNumber(X,PAT) vráti číselnú hodnotu z reťazca X spracovaného podľa vzoru formátu čísla Java PAT
showAllResponsesExcept( questionList,attributeList,attributeTitleList) ; attributeList = zoznam atribútov oddelených znakom | (napr. question#, title, text, type - môžete tak určiť, čo sa zobrazí); attributeTitleList = zoznam hlavičiek tabuľky oddelených znakom |, aby bolo možné report lokalizovať.
showTheseResponses( questionList,attributeList,attributeTitleList) ; attributeList = zoznam atribútov oddelených znakom | (napr. question#, title, text, type - môžete tak určiť, čo sa zobrazí); attributeTitleList = zoznam hlavičiek tabuľky oddelených znakom |, aby bolo možné report lokalizovať.

Expression Manager vie, ktoré premenné sú lokálne

Aby mohol Expression Manager správne zostaviť JavaScript pre stránku, musí vedieť, ktoré premenné sú na stránke nastavené a aké je ich JavaScript ID (napr. pre document.getElementById(x)). Musí tiež vedieť, ktoré premenné sú nastavené na iných stránkach (aby zabezpečil, že potrebné polia <input type='hidden' value='x'> sú prítomné a vyplnené).

Kaskádové podmienky

Ak je ktorákoľvek z premenných nerelevantná, celá rovnica bude nerelevantná (false). V nasledujúcej tabuľke napríklad N/A znamená, že jedna z premenných nebola relevantná.

Operátor Príklad a b Výsledok
+ (unary) +a N/A false
! !a N/A false
== (or eq) a == b N/A 5 false
== (or eq) a == b N/A 0 false
== (or eq) a == b N/A N/A false
!= (or ne) a != b N/A 5 false
!= (or ne) a != b N/A N/A false
!= (or ne) a != b N/A 0 false
> (or gt) a > b N/A 5 false
>= (or ge) a >= b N/A 5 false
< (or lt) a < b N/A 5 false
<= (or le) a <= b N/A 5 false
and a and b N/A 5 false
and a and b N/A N/A false
or a or b N/A N/A false
or a or b N/A 5 false
+ a + b N/A 5 false
* a * b N/A 5 false
/ a / b 5 N/A false
() (a) N/A false
(exp) (a && b) N/A 5 false
(exp) op (exp) (b + b) > (a && b) N/A 5 false
funkcia sum(a,b,b) N/A 5 false
funkcia max(a,b) N/A 5 false
funkcia min(a,b) N/A 5 false
funkcia implode(', ',a,b,a,b) N/A 5 false
funkcia if(a,a,b) N/A 5 false
funkcia is_empty(a) N/A false
funkcia is_empty(a) 0 (alebo prázdne) true
funkcia !is_empty(a) N/A false

Prepísanie kaskádových podmienok

Povedzme, že chcete zobraziť priebežný súčet všetkých relevantných odpovedí. Môžete skúsiť použiť rovnicu {sum(q1,q2,q3,...,qN)}. Tá sa však interne preloží na LEMif(LEManyNA('q1','q2','q3',...,'qN'),,sum(LEMval('q1'),LEMval('q2'),LEMval('q3'),...,LEMval('qN'))). Ak je teda ktorákoľvek z hodnôt q1-qN nerelevantná, rovnica vždy vráti false. V tomto prípade sum() zobrazí 0, kým nebudú zodpovedané všetky otázky.

Aby ste sa tomu vyhli, ku každej premennej môžete pridať príponu „.NAOK“ (znamená, že Not Applicable je v poriadku). V takom prípade nastane nasledujúce správanie. Povedzme, že máte premennú q1.NAOK

  1. q1 sa nepridá do klauzuly LEManyNA()
  2. LEMval('q1') bude naďalej kontrolovať, či je odpoveď relevantná, a ak nie je, vráti '' (jednotlivé nerelevantné odpovede sa teda ignorujú, ale neznehodnotia celý výraz).

Riešením problému s priebežným súčtom je teda použiť rovnicu sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK).

Použitie prípony .NAOK tiež umožňuje autorom navrhnúť prieskumy, ktoré majú niekoľko možných ciest, ktoré sa neskôr opäť zbiehajú do spoločných ciest. Povedzme napríklad, že respondenti odpovedia na prieskum spôsobom, ktorý je mimo bežného rozsahu odpovedí. Autor môže respondentov upozorniť, že nemusia dostať platné výsledky, a opýtať sa ich, či naozaj chcú v prieskume pokračovať. Ak odpovedia Áno, zobrazia sa zvyšné otázky. Podmienka pre „zvyšné otázky“ by overovala, či boli úvodné odpovede v bežnom rozsahu ALEBO či respondent odpovedal Áno na otázku, ktorá je relevantná, iba ak odpovedal mimo bežného rozsahu.

Ako Expression Manager podporuje podmienené mikro-prispôsobenie?

Tu je príklad mikro-prispôsobenia (kde Typ otázky=='expr' znamená rovnicu):

Kód otázky Relevantnosť Typ otázky Otázka
name 1 text Ako sa voláte?
age 1 text Koľko máte rokov?
badage !is_empty(age) expr {(age<16) or (age>80)}
agestop badage message Ľutujeme, {name}, na tento test máte príliš {if( (age<16),'málo rokov',if( (age>80),'veľa rokov','stredný vek') ) }.
kids !badage yesno Máte deti?
parents 1 expr {!badage && kids=='Y'}
numKids parents text Koľko máte detí?
kid1 parents && numKids >= 1 text Koľko rokov má vaše prvé dieťa?
kid2 parents && numKids >= 2 text Koľko rokov má vaše druhé dieťa?
kid3 parents && numKids >= 3 text Koľko rokov má vaše tretie dieťa?
kid4 parents && numKids >= 4 text Koľko rokov má vaše štvrté dieťa?
kid5 parents && numKids >= 5 text Koľko rokov má vaše piate dieťa?
sumage 1 expr {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)}
report parents yesno {name}, uviedli ste, že máte {age} rokov a že máte {numKids} detí. Súčet veku vašich prvých {min(numKids,5)} detí je {sumage}

Všetky tieto otázky môžu byť na jednej stránke (napr. v rovnakej skupine) a zobrazia sa iba relevantné otázky. Okrem toho, keď zadávate vek detí, výraz sum() v poslednej otázke sa na stránke dynamicky aktualizuje.

Expression Manager túto funkcionalitu poskytuje tak, že každý výraz obklopí pomenovaným prvkom <span>. Zakaždým, keď sa hodnota zmení, prepočíta výraz, ktorý sa má zobraziť v tomto prvku <span>, a zobrazenie sa obnoví. Na tej istej stránke môžete mať desiatky, ba až stovky takýchto prispôsobených výrazov a stránka ich všetky prekreslí jedným obnovením obrazovky.

Mapovanie funkcií LimeSurvey 1.91+ na Expression Manager

Stará funkcia Nová funkcia Poznámky
Podmienky Relevantnosť Môžete používať veľmi zložité podmienené rovnice a získate prístup k širšiemu rozsahu premenných
Hodnotenia Rovnica Akékoľvek skóre hodnotenia je možné preštruktúrovať na rovnicu. Tým sa zabezpečí, že sa skóre zapíše do databázy, a zároveň uvidíte dynamické zmeny hodnoty skóre na aktuálnej stránke
Náhrady Expression Manager Jadro systému berie vstupný reťazec a všetko v zložených zátvorkách považuje za výraz - zvláda teda všetky historické typy náhrad. Aby sa nenarušil vložený JavaScript, Expression Manager spracúva obsah v zložených zátvorkách iba vtedy, ak (a) v zložených zátvorkách nie je na začiatku ani na konci medzera - napr. {expr} je výraz, ale { expr}, {expr } a { expr } výrazmi nie sú. Expression Manager navyše nespracúva obsah vo vlastných reťazcoch (napr. {list('hi','there {braces}')} vygeneruje „hi there {braces}“). Ignoruje tiež escapované zložené zátvorky (napr. \{this is not an expression\})
Validácia Expression Manager Plán je vziať aktuálne atribúty otázky min/max a nechať ich spracovať Expression Managerom. Hodnoty min/max tak môžu byť samy výrazmi

Zvýraznenie syntaxe

Na pomoc pri zadávaní a validácii výrazov poskytuje EM zvýraznenie syntaxe s nasledujúcimi funkciami:

Typy a významy zvýraznenia syntaxe

Farba Ukážka Význam Popisok Poznámky
béžové pozadie Ukážka celá rovnica žiadny Všetko v zložených zátvorkách, čo je rozpoznané ako rovnica (t. j. na začiatku ani na konci nie je medzera), bude farebne označené béžovým pozadím, aby sa odlíšilo od okolitého textu
tučný červený text Ukážka chyba Vysvetlenie chyby Môže ísť o neznámu premennú alebo chybu vo funkcii, ... Prieskum môže byť úplne nefunkčný, verejnému používateľovi sa to nezobrazuje.
modrý text Ukážka názov funkcie význam a povolená syntax Názvy funkcií alebo veci, ktoré by mali byť funkciami, keďže za nimi nasleduje otváracia zátvorka, sú zobrazené tučným modrým textom. Popisky zobrazujú význam a povolenú syntax funkcie.
sivý text Ukážka reťazec žiadny reťazce v jednoduchých a dvojitých úvodzovkách sú zobrazené sivým textom
azúrový text Ukážka premenná nastavená na tej istej stránke, [názov alebo kód SGQA]: otázka; hodnota; answerList zobrazujúci kódy pre každú hodnotu Každá premenná, ktorá je nastavená na tej istej stránke ako aktuálna otázka, je zobrazená azúrovým textom, čo znamená, že ju možno aktualizovať v JavaScripte. Popisok zobrazuje jej názov, samotnú otázku a jej súčasnú hodnotu (alebo prázdne, ak nie je nastavená). Ak typ otázky očakáva odpovede z vymenovanej množiny hodnôt, zobrazí sa priradenie kódov k zobrazovaným hodnotám.
zelený text Ukážka premenná nastavená na predchádzajúcej stránke [názov alebo kód SGQA]: otázka; hodnota; answerList zobrazujúci kódy pre každú hodnotu Každá premenná, ktorá je nastavená na predchádzajúcej stránke, je zobrazená tučným zeleným textom. Popisok zobrazuje jej názov, samotnú otázku a jej súčasnú hodnotu (alebo prázdne, ak nie je nastavená). Ak typ otázky očakáva odpovede z vymenovanej množiny hodnôt, zobrazí sa priradenie kódov k zobrazovaným hodnotám.
tučný ružový text Ukážka premenná nastavená na neskoršej stránke vo všeobecnosti: na začiatku prieskumu je prázdna, ale môže byť vyplnená pomocou indexu alebo návratu späť [názov alebo kód SGQA]: otázka; hodnota; answerList zobrazujúci kódy pre každú hodnotu Každá premenná, ktorá je nastavená na nasledujúcej stránke, je zobrazená tučným ružovým textom. Popisok zobrazuje jej názov, samotnú otázku a jej súčasnú hodnotu (alebo prázdne, ak nie je nastavená). Ak typ otázky očakáva odpovede z vymenovanej množiny hodnôt, zobrazí sa priradenie kódov k zobrazovaným hodnotám.
tučný hnedý text Ukážka náhradná hodnota Lime hodnota Náhradné reťazce Lime (ako {TOKEN:xxx}, {PRIVACY_MESSAGE}) sú zobrazené tučným hnedým textom.
červený text Ukážka operátor priradenia (=) varovná správa Ak použijete operátor priradenia (=), tento operátor sa zobrazí červeným textom. Má to pomôcť predísť náhodnému opätovnému priradeniu hodnôt, keď ste v skutočnosti chceli skontrolovať, či a == b, namiesto nastavenia hodnoty a = b.
normálny čierny text Ukážka interpunkcia žiadny Všetka ostatná interpunkcia vo výraze je zobrazená normálnym čiernym textom.
text v červenom rámčeku okolo chyby je hrubá červená čiara chyba syntaxe popis chyby Každá zistená chyba syntaxe je zobrazená červeným rámčekom okolo chyby. Popisok zobrazuje chybu. Medzi príklady patria neuzavreté zátvorky, použitie nedefinovaných funkcií, odovzdanie nesprávneho počtu argumentov funkciám, zle štruktúrované výrazy (napr. chýbajúce operátory medzi premennými), pokus o priradenie novej hodnoty premennej len na čítanie, pokus o priradenie hodnôt niečomu, čo nie je premenná, alebo použitie nepodporovanej syntaxe. Upozorňujeme, že systém na zisťovanie chýb syntaxe môže nahlásiť iba jednu chybu vo výraze, aj keď je chýb viac; ak sa však zistia nejaké chyby, zobrazí sa aspoň jedna.

Ďalšie čítanie

Ukážkové prieskumy Expression Manageru

Prípady použitia a návody

Príklady krok za krokom

Štatistické funkcie Expression Manageru

Referenčná príručka pre vývojárov

Plán vývoja/Stav/Zoznam úloh