Funktioner
Strengfunktioner
Når du arbejder med strenge i udtryk, er det vigtigt at bruge enkeltanførselstegn (’’) til at omslutte bogstavelige strenge. Der er dog en undtagelse, når du vil inkludere enkeltanførselstegn i en bogstavelig streng. I sådanne tilfælde kan du bruge dobbeltanførselstegn ("") til at omslutte hele strengen.
For eksempel:
- Korrekt: if(${yesno} = 1, “en streng med ’enkeltanførselstegn’ i den”, “ingen enkeltanførselstegn her”)
- Forkert: if(${yesno} = 1, ’en streng med ’enkeltanførselstegn’ i den’, ‘ingen enkeltanførselstegn her’)
Vedrørende smarte anførselstegn er det afgørende at være opmærksom på deres tilstedeværelse, da de kan forårsage problemer i udtryk. Mange rich text-editorer konverterer automatisk rette anførselstegn ("" eller ‘’) til smarte anførselstegn eller buede anførselstegn ("" eller ‘’), hvilket kan resultere i syntaksfejl eller uventet adfærd. For at undgå dette skal du sikre, at du konsekvent bruger rette anførselstegn (’’) i dine udtryk.
rtSurvey understøtter forskellige funktioner, herunder:
string(felt): Konverterer et felt til en streng.- Eksempel:
string(34.8)konverteres til'34.8'.
- Eksempel:
string-length(felt): Returnerer længden af et strengfelt.- Eksempel:
string-length(.) > 3 and string-length(.) < 10kan bruges til at sikre, at det aktuelle felt er mellem 3 og 10 tegn.
- Eksempel:
substr(feltEllerStreng, startindeks, slutindeks): Returnerer en delstreng startende vedstartindeksog sluttende lige førslutindeks. Indekser starter ved 0 for det første tegn i strengen.- Eksempel:
substr(${phone}, 0, 3)returnerer de første tre cifre i et telefonnummer.
- Eksempel:
concat(a, b, c, ...): Sammensætter felter (og/eller strenge).- Eksempel:
concat(${firstname}, ' ', ${lastname})returnerer et fuldt navn ved at kombinere værdierne i felternefirstnameoglastname.
- Eksempel:
linebreak(): Returnerer et linjeskifttegn.- Eksempel:
concat(${field1}, linebreak(), ${field2}, linebreak(), ${field3})returnerer en liste med tre feltværdier med linjeskift imellem.
- Eksempel:
lower(): Konverterer en streng til alle små bogstaver.- Eksempel:
lower('Gadenavn')returnerer “gadenavn”.
- Eksempel:
upper(): Konverterer en streng til alle store bogstaver.- Eksempel:
upper('Gadenavn')returnerer “GADENAVN”.
- Eksempel:
select_one og select_multiple funktioner
count-selected(felt): Returnerer antallet af valgte elementer i et select_multiple-felt.- Eksempel:
count-selected(.) = 3kan bruges som et betingelsesudtryk til at sikre, at præcis tre valg er valgt.
- Eksempel:
selected(felt, værdi): Returnerer sand eller falsk afhængigt af, om den angivne værdi er valgt i select_one- eller select_multiple-feltet.- Eksempel:
selected(${color}, 'Blue')kan bruges som et relevansudtryk til kun at vise en gruppe eller et felt, hvis respondenten valgte “Blue” som sin yndlingsfarve. - Bemærk: Den anden parameter bør altid angive valgværdien, ikke valglabelen. Brug værdien fra value-kolonnen i choices-regnearket i formulardefinitionen.
- Eksempel:
selected-at(felt, nummer): Returnerer det valgte element ved den angivne position i et select_multiple-felt. Når det oversendte tal er 0, returneres det første valgte element; når tallet er 1, returneres det andet valgte element, og så videre.- Eksempel:
selected-at(${fruits}, 0) = 'Apple'kan bruges som et relevansudtryk til kun at vise en gruppe eller et felt, hvis det første valgte valg er “Apple”. - Bemærk: Den returnerede værdi vil være valgværdien, ikke valglabelen.
- Eksempel:
choice-label(felt, værdi): Returnerer labelen for et select_one- eller select_multiple-felts valg som defineret i choices-regnearket i formulardefinitionen.- Eksempel 1:
choice-label(${country}, ${country})returnerer valglabelen for det aktuelt valgte valg i feltet med navnetcountry. - Eksempel 2:
choice-label(${languages}, selected-at(${languages}, 0))returnerer labelen for det første valgte valg i feltet med navnetlanguages. - Bemærk: Denne funktion henter valglabelen, ikke værdien.
- Eksempel 1:
Gentagede feltfunktioner
I rtSurvey, hvis du vil stille det/de samme spørgsmål flere gange, kan du placere et felt inde i en gentagelsesgruppe. Dette resulterer i flere instanser af det samme felt. Følgende funktioner kan hjælpe dig med at håndtere disse gentagne felter og de gentagne data, de producerer. Se hjælpeemnet om gentagne felter for flere detaljer.
join(streng, gentagetFelt): For et felt inden for en gentagelsesgruppe genereres en strengadskilt liste af værdier. Den første parameter angiver afgrænsningstegnet til adskillelse af værdierne.- Eksempel:
join(', ', ${member_name})genererer en enkelt kommasepareret liste fra alle indtastede navne.
- Eksempel:
join-if(streng, gentagetFelt, udtryk): Fungerer præcis ligesomjoin(), bortset fra at den kontrollerer hver instans i gentagelsesgruppen ved hjælp af det angivne udtryk. Hvis udtrykket evalueres til falsk, udelades elementet fra outputtet.- Eksempel:
join-if(', ', ${member_name}, ${age} >= 18)genererer en kommasepareret liste over navne på kun voksne medlemmer (dem med alder 18 og derover).
- Eksempel:
count(gentagelsesgruppe): Returnerer det aktuelle antal gange en gentagelsesgruppe er gentaget.- Eksempel:
count(${gruppenavn})returnerer antallet af instanser af gruppen.
- Eksempel:
count-if(gentagelsesgruppe, udtryk): Fungerer præcis ligesomcount(), bortset fra at den kontrollerer hver instans i gentagelsesgruppen ved hjælp af det angivne udtryk. Hvis udtrykket evalueres til falsk, udelades elementet.- Eksempel:
count-if(${members}, ${age} >= 18)returnerer antallet af voksne medlemmer baseret på aldersfeltet inden for “members” gentagelsesgruppen.
- Eksempel:
sum(gentagetFelt): For et felt inden for en gentagelsesgruppe beregnes summen af alle værdier.- Eksempel:
sum(${loan_amount})returnerer den samlede værdi af alle lån.
- Eksempel:
sum-if(gentagetFelt, udtryk): Fungerer præcis ligesomsum(), bortset fra at den kontrollerer hver instans ved hjælp af det angivne udtryk.- Eksempel:
sum-if(${loan_amount}, ${loan_amount} > 500)returnerer den samlede værdi af alle lån, der er over 500.
- Eksempel:
min(gentagetFelt): For et felt inden for en gentagelsesgruppe beregnes minimum af alle værdier.- Eksempel:
min(${member_age})returnerer alderen på det yngste medlem i gruppen.
- Eksempel:
min-if(gentagetFelt, udtryk): Fungerer præcis ligesommin(), bortset fra at den kontrollerer hver instans ved hjælp af det angivne udtryk.- Eksempel:
min-if(${member_age}, ${member_age} >= 18)returnerer alderen på den yngste voksne i gruppen.
- Eksempel:
max(gentagetFelt): For et felt inden for en gentagelsesgruppe beregnes maksimum af alle værdier.- Eksempel:
max(${member_age})returnerer alderen på det ældste medlem i gruppen.
- Eksempel:
max-if(gentagetFelt, udtryk): Fungerer præcis ligesommax(), bortset fra at den kontrollerer hver instans ved hjælp af det angivne udtryk.- Eksempel:
max-if(${member_age}, ${member_age} >= 18)returnerer alderen på den ældste voksne i gruppen.
- Eksempel:
index(): Kaldet inden for en gentagelsesgruppe returneres indeksnummeret for den aktuelle gruppe eller instans.- Eksempel:
index()returnerer 1 for den første instans, 2 for den anden, og så videre.
- Eksempel:
indexed-repeat(gentagetFelt, gentagelsesgruppe, indeks): Referencer et felt eller en gruppe, der er inden for en gentagelsesgruppe, fra uden for den gentagelsesgruppen.- Eksempel 1:
indexed-repeat(${name}, ${names}, 1)returnerer det første navn, der er tilgængeligt, når namefeltet er inden for en forudgående gentagelsesgruppe med navnet “names”. - Eksempel 2:
indexed-repeat(${name}, ${names}, index())henter det navn, der svarer til instansnummeret for den aktuelle gentagelsesgruppe.
- Eksempel 1:
rank-index(indeks, gentagetFelt): Denne funktion beregner den ordinale rang for den angivne instans af et gentaget felt til brug uden for gentagelsesgruppen. Rang 1 tildeles instansen med den højeste værdi, rang 2 til instansen med den næsthøjeste værdi, og så videre. Hvis du sender et ugyldigt indeks eller et indeks til en instans med en ikke-numerisk værdi, returneres en rang på 999.- Eksempel:
rank-index(1, ${random_draw})beregner rangen for den første instans baseret på værdien af densrandom_draw-felt sammenlignet med andre instansers værdier.
- Eksempel:
rank-index-if(indeks, gentagetFelt, udtryk): Denne funktion fungerer ligesomrank-index(), men den kontrollerer hver instans i det gentagne felts gentagelsesgruppe ved hjælp af det angivne udtryk. Hvis udtrykket evalueres til falsk, udelades elementet fra beregningen.- Eksempel:
rank-index-if(1, ${age}, ${age} >= 18)beregner alderrangeringen inden for gruppen af voksne, idet kun instanser, hvor alderen er større end eller lig med 18, medtages.
- Eksempel:
Talfunktioner
| Operator | Operation | Eksempel | Eksempelsvar |
|---|---|---|---|
+ | Addition | 1 + 1 | 2 |
- | Subtraktion | 3 - 2 | 1 |
* | Multiplikation | 3 * 2 | 6 |
div | Division | 10 div 2 | 5 |
mod | Modulus | 9 mod 2 | 1 |
rtSurvey understøtter talfunktioner, herunder:
number(felt): Konverterer feltets værdi til et tal.- Eksempel:
number('34.8')= 34.8
- Eksempel:
int(felt): Konverterer feltets værdi til et heltal.- Eksempel:
int('39.2')= 39
- Eksempel:
min(felt1, ..., feltx): Returnerer minimumsværdien blandt de oversendte felter.- Eksempel:
min(${father_age}, ${mother_age})returnerer alderen på enten moderen eller faderen, alt efter hvem der er yngst.
- Eksempel:
max(felt1, ..., feltx): Returnerer maksimumsværdien blandt de oversendte felter.- Eksempel:
max(${father_age}, ${mother_age})returnerer alderen på enten moderen eller faderen, alt efter hvem der er ældst.
- Eksempel:
format-number(felt): Formaterer værdien af et heltal- eller decimalfelt i henhold til brugerens lokaleindstillinger.- Eksempel:
format-number(${income})Dette udtryk kan formatere “120000” som “120.000”.
- Eksempel:
round(felt, cifre): Afrunder den numeriske feltværdi til det angivne antal cifre efter decimalpunktet.- Eksempel:
round(${interest_rate}, 2)
- Eksempel:
abs(tal): Returnerer den absolutte værdi af et tal.pow(base, eksponent): Returnerer værdien af den første parameter opløftet til potensen af den anden parameter.log10(feltEllerVærdi): Returnerer titalslogaritmen af det oversendte felt eller den oversendte værdi.sin(feltEllerVærdi): Returnerer sinus af det oversendte felt eller den oversendte værdi, udtrykt i radianer.cos(feltEllerVærdi): Returnerer cosinus af det oversendte felt eller den oversendte værdi, udtrykt i radianer.tan(feltEllerVærdi): Returnerer tangens af det oversendte felt eller den oversendte værdi, udtrykt i radianer.asin(feltEllerVærdi): Returnerer arcussinus af det oversendte felt eller den oversendte værdi, udtrykt i radianer.acos(feltEllerVærdi): Returnerer arcuscosinus af det oversendte felt eller den oversendte værdi, udtrykt i radianer.atan(feltEllerVærdi): Returnerer arcustangens af det oversendte felt eller den oversendte værdi, udtrykt i radianer.atan2(x, y): Returnerer vinklen i radianer dannet ved punktet med koordinaterne (x, y) og den positive x-akse. Resultatet er i intervallet -pi() til pi().sqrt(feltEllerVærdi): Returnerer den ikke-negative kvadratrod af det oversendte felt eller den oversendte værdi.exp(x): Returnerer værdien af e^x.pi(): Returnerer værdien af pi.
Dato- og tidsfunktioner
Datoværdier i rtSurvey gemmes som strenge i formatet YYYY-MM-DD. Datetime-værdier gemmes som ISO 8601-strenge (YYYY-MM-DDTHH:MM:SS). Brug decimal-date-time() til at konvertere til et tal til aritmetik (f.eks. beregning af varighed).
today(): Returnerer dags dato som en streng i formatetYYYY-MM-DD. Evalueres én gang, når formularen åbnes.- Eksempel:
today()→'2024-03-15' - Typisk brug: kolonnen
defaulttil at forudfylde dags dato, eller irelevant/constrainttil at sammenligne med et datofelt.
- Eksempel:
now(): Returnerer den aktuelle dato og tid som en ISO 8601-streng. Evalueres hver gang udtrykket beregnes.- Eksempel:
now()→'2024-03-15T14:32:00.000+03:00' - Typisk brug: Registrering af det præcise tidsstempel for en specifik hændelse under undersøgelsen.
- Eksempel:
date(værdi): Konverterer en værdi (streng eller tal) til en datostreng. Nyttigt til at tvangsomdanne beregnede værdier til en datotype.- Eksempel:
date('2024-03-15')→'2024-03-15'
- Eksempel:
date-time(værdi): Konverterer en værdi til en datetime-streng.- Eksempel:
date-time(${event_timestamp})
- Eksempel:
decimal-date-time(værdi): Konverterer en dato- eller datetime-streng til et decimaltal, der repræsenterer millisekunder siden Unix-epoken divideret med 86400000 (dvs. brøkdele af dage siden 1970-01-01). Brug dette til at udføre aritmetik på datoer.- Eksempel: Varighed i dage mellem to datoer:
decimal-date-time(${end_date}) - decimal-date-time(${start_date}) - Eksempel: Varighed i minutter mellem to datetimes:
(decimal-date-time(${end_time}) - decimal-date-time(${start_time})) * 1440
- Eksempel: Varighed i dage mellem to datoer:
format-date(dato, format): Formaterer en datoværdi ved hjælp af en mønsterstreng.- Formattokens:
%Y(4-cifret år),%y(2-cifret år),%m(måned 01–12),%d(dag 01–31),%a(forkortet ugedag),%b(forkortet månedsnavn) - Eksempel:
format-date(today(), '%d/%m/%Y')→'15/03/2024'
- Formattokens:
format-date-time(datetime, format): Formaterer en datetime-værdi ved hjælp af en mønsterstreng. Accepterer alleformat-date-tokens plus:%H(time 00–23),%h(time 01–12),%M(minutter 00–59),%S(sekunder 00–59),%3(millisekunder),%P(AM/PM)- Eksempel:
format-date-time(now(), '%d/%m/%Y %H:%M')→'15/03/2024 14:32'
Booleske funktioner
boolean(værdi): Konverterer enhver værdi til et boolesk. Returnerersandfor ikke-tomme strenge, ikke-nul tal ogsand; returnererfalskfor tomme strenge,0ogfalsk.- Eksempel:
boolean(${name})returnerersand, hvisnameikke er tomt.
- Eksempel:
boolean-from-string(streng): Returnerersand, hvis strengen er'1'eller'true'(ikke versalfølsom); returnererfalskellers.- Eksempel:
boolean-from-string(${enabled_flag})— nyttigt, når et felt gemmer'true'/'false'som tekst.
- Eksempel:
true(): Returnerer den booleske værdisand.- Eksempel: I kolonnen
requiredsvarertrue()tilyes.
- Eksempel: I kolonnen
false(): Returnerer den booleske værdifalsk.- Eksempel:
if(${skip_section} = 'yes', false(), true())— indstil dynamisk required.
- Eksempel:
not(udtryk): Returnerer den logiske negation af udtrykket.- Eksempel:
not(${consent} = 'yes')— vis en advarsel, når samtykke IKKE er givet. - Eksempel:
not(selected(${issues}, 'none'))— kræv detaljer kun, hvis “ingen” ikke er valgt.
- Eksempel:
Yderligere strengfunktioner
starts-with(streng, præfiks): Returnerersand, hvisstrengbegynder medpræfiks.- Eksempel:
starts-with(${phone}, '+45')kontrollerer, om telefonnummeret begynder med den danske landekode.
- Eksempel:
contains(streng, delstreng): Returnerersand, hvisstrengindeholderdelstreng.- Eksempel:
contains(${email}, '@')kontrollerer, at en e-mailadresse har et@-tegn.
- Eksempel:
substring-before(streng, søgetekst): Returnerer den del afstreng, der vises før den første forekomst afsøgetekst.- Eksempel:
substring-before(${full_name}, ' ')udtrækker det første ord (fornavn).
- Eksempel:
substring-after(streng, søgetekst): Returnerer den del afstreng, der vises efter den første forekomst afsøgetekst.- Eksempel:
substring-after(${email}, '@')udtrækker domænedelen af en e-mailadresse.
- Eksempel:
normalize-space(streng): Fjerner foranstillede og efterstillede mellemrum og samler alle interne mellemrumssekvenser til ét mellemrum.- Eksempel:
normalize-space(${name})— renser et navn, der kan være skrevet med ekstra mellemrum.
- Eksempel:
translate(streng, søgetegn, erstatningstegn): Erstatter hvert tegn istreng, der forekommer isøgetegn, med det tilsvarende tegn ierstatningstegn.- Eksempel:
translate(${phone}, ' -()', '')fjerner mellemrum, bindestreger og parenteser fra et telefonnummer.
- Eksempel:
Yderligere matematiske funktioner
floor(tal): Returnerer det største heltal, der er mindre end eller lig medtal(runder mod negativ uendelig).- Eksempel:
floor(4.9)= 4,floor(-2.1)= -3
- Eksempel:
ceiling(tal): Returnerer det mindste heltal, der er større end eller lig medtal(runder mod positiv uendelig).- Eksempel:
ceiling(4.1)= 5,ceiling(-2.9)= -2
- Eksempel:
random(): Returnerer et tilfældigt decimaltal mellem 0,0 (inklusiv) og 1,0 (eksklusiv). Bruges typisk icalculate-felter til at tildele tilfældige værdier eller randomisere spørgsmålsrækkefølgen.- Eksempel:
int(random() * 6) + 1→ tilfældigt tal 1–6 (terningekast)
- Eksempel:
coalesce(a, b): Returnerera, hvisaer ikke-tom; ellers returneresb. Nyttigt som en fallback, når et felt kan være tomt.- Eksempel:
coalesce(${preferred_name}, ${full_name})— brug foretrukket navn hvis angivet, ellers brug fuldt navn.
- Eksempel:
once(værdi): Evaluererværdiog gemmer den, men kun hvis det aktuelle felt er tomt. Hvis feltet allerede har en værdi, returnereronce()den eksisterende værdi uændret. Dette forhindrer genberegning i at overskrive brugerinput.- Eksempel:
once(today())i kolonnendefaultindstiller dags dato én gang og opdateres ikke, hvis intervieweren genåbner formularen. - Eksempel:
once(uuid())genererer et UUID én gang og holder det stabilt på tværs af genredigeringer.
- Eksempel:
Geofunktioner
area(geoshape_værdi): Beregner arealet i kvadratmeter omsluttet af en geoshape-værdi (polygon).- Eksempel:
area(${field_boundary})— beregn arealet af et undersøgt felt i m². - Eksempel:
round(area(${field_boundary}) div 10000, 2)— konverter til hektar.
- Eksempel:
distance(koordinater): Beregner den samlede stilængde i meter for en geotrace (linje), eller afstanden mellem to geopoints.- For en geotrace:
distance(${route})returnerer den samlede stistrejklængde i meter. - For to geopoints:
distance(concat(${point_a}, ' ', ${point_b}))returnerer afstanden mellem dem. - Eksempel:
round(distance(${road_trace}) div 1000, 3)— vejlængde i kilometer.
- For en geotrace:
Valideringsfunktioner
regex(værdi, mønster): Returnerersand, hvisværdimatcher det regulære udtrykmønster. Bruges i kolonnenconstrainttil mønsterbaseret validering.- Eksempel:
regex(., '^[0-9]{10}$')— valider et 10-cifret tal. - Eksempel:
regex(., '^[A-Z]{2}[0-9]{6}$')— valider et pasportnummerformat (2 store bogstaver efterfulgt af 6 cifre). - Eksempel:
regex(., '^[^@]+@[^@]+\.[^@]{2,}$')— grundlæggende e-mailformatkontrol.
- Eksempel:
checklist(min, max, v1, v2, ...): Evaluerer en liste af booleske udtryk og returnerersand, hvis antallet afsandeværdier er mellemminogmax(inklusiv). Send-1forminellermaxfor at springe den grænse over.- Eksempel:
checklist(2, 3, ${q1} = 'yes', ${q2} = 'yes', ${q3} = 'yes')— passerer, hvis præcis 2 eller 3 af de tre betingelser er sande.
- Eksempel:
weighted-checklist(min, max, v1, w1, v2, w2, ...): Ligesomchecklist(), men hver værdi har en vægt. Summen af vægte forsandeværdier skal være mellemminogmax.- Eksempel:
weighted-checklist(10, -1, ${has_toilet}, 4, ${has_sink}, 3, ${has_shower}, 5)— summen af vægte for tilstedeværende faciliteter skal være mindst 10.
- Eksempel:
Hjælpefunktioner
uuid(): Genererer et tilfældigt UUID (RFC 4122 v4-format) som en streng.- Typisk brugt med
once()til at generere et stabilt unikt ID:once(uuid())
- Typisk brugt med
version(): Returnerer værdien af formularensversion-attribut som angivet i settings-regnearket.- Nyttigt i
calculate-felter til at indlejre formularversionen i eksporterede data.
- Nyttigt i
position(): Når kaldt inden for en gentagelsesgruppe, returneres det 1-baserede indeks for den aktuelle gentagelsesinstans.- Se også:
index()(alias),indexed-repeat()til at referere til gentagelsesværdier fra udenfor gruppen.
- Se også:
thousandsep(længde, separator, værdi): Formaterer et tal med et tusindestalseparatortegn.længdeer den minimale samlede strenglængde (udfyldt med mellemrum hvis kortere),separatorer det tegn, der skal bruges (f.eks.','), ogværdier det tal, der skal formateres.- Eksempel:
thousandsep(0, ',', 1234567)→'1.234.567'
- Eksempel:
substr-jsonpath(værdi, jsonpath): Udtrækker en delstreng fra en JSON-streng ved hjælp af et JSONPath-udtryk.- Eksempel:
substr-jsonpath(${api_response}, '$.data.name')— udtrækkername-feltet fra en JSON-streng gemt iapi_response. - Bruges typisk ved siden af
callapi()til at udtrække specifikke værdier fra API-svar.
- Eksempel: