Denne side dækker avancerede mønstre for arbejde med gentagelsesgrupper i rtSurvey. For det grundlæggende om opsætning af en gentagelsesgruppe, se Grupperinger og gentagelser.


Dynamisk gentagelsesantal

Som standard bestemmer intervieweren, hvor mange gange der skal gentages. Du kan fastlåse antallet af gentagelser ved hjælp af repeat_count:

typenamelabelrepeat_count
begin_repeathousehold_membersHusholdningsmedlem${num_members}
textmember_nameMedlemsnavn
integermember_ageAlder
end_repeat

Gentagelsen kører præcis ${num_members} gange, hvor num_members er indsamlet tidligere i formularen. Intervieweren kan ikke tilføje eller fjerne instanser.


Indekseret adgang: indexed-repeat()

Adgang til en specifik gentagelsesinstans’ feltværdi fra udenfor gentagelsesgruppen ved hjælp af indexed-repeat(gentagetFelt, gentagelsesGruppe, indeks):

typenamelabelcalculation
calculatefirst_nameindexed-repeat(${member_name}, ${household_members}, 1)
calculatesecond_nameindexed-repeat(${member_name}, ${household_members}, 2)

Dette er nyttigt til at opbygge opsummeringsfelter eller referere til det “primære” members data efter gentagelsen.


Aktuel instansposition: index()

Inden for en gentagelsesgruppe returnerer index() den 1-baserede position for den aktuelle instans. Brug det til at mærke hver gentagelse eller oprette unikke identifikatorer:

typenamelabel
begin_repeatplotsPlot
noteplot_labelPlotnummer ${index()}
textplot_idPlot-ID
end_repeat

Krydsreferencer til felter i den samme instans

Inden for en gentagelse bruges ${feltnavn} til at referere til et andet felt i den samme gentagelsesinstans. Der er ikke brug for indexed-repeat() inden for den samme løkke:

typenamelabelrelevant
begin_repeatmembersMedlem
textmember_nameNavn
integermember_ageAlder
textschool_nameSkolenavn${member_age} < 18
end_repeat

Krydsreferencer til overordnede felter fra en gentagelse

Felter uden for (over) gentagelsesgruppen kan refereres normalt med ${feltnavn}:

typenamelabel
textvillageLandsbynavn
begin_repeatplotsLandbrugsplot
noteplot_contextPlot i ${village}
end_repeat

Opsummering af gentagelsesdata

Brug aggregatfunktioner for gentagelser udenfor gentagelsesgruppen til at opsummere:

FunktionEksempelBeskrivelse
count(group)count(${household_members})Antal instanser
sum(field)sum(${loan_amount})Sum af et numerisk felt
min(field)min(${member_age})Minimumsværdi
max(field)max(${member_age})Maksimumsværdi
join(sep, field)join(', ', ${member_name})Kommasepareret liste
count-if(group, expr)count-if(${members}, ${member_age} < 18)Betinget tælling
sum-if(field, expr)sum-if(${loan_amount}, ${loan_amount} > 500)Betinget sum
join-if(sep, field, expr)join-if(', ', ${name}, ${age} >= 18)Betinget sammenføjning

Eksempel: Husholdningsopsummering

typenamelabelcalculation
integernum_membersHvor mange medlemmer?
begin_repeatmembersMedlem${num_members}
textmember_nameNavn
integermember_ageAlder
end_repeat
calculatetotal_memberscount(${members})
calculatechildren_countcount-if(${members}, ${member_age} < 18)
calculateadult_namesjoin-if(', ', ${member_name}, ${member_age} >= 18)
notesummary${total_members} medlemmer; ${children_count} under 18. Voksne: ${adult_names}

Indlejrede gentagelser

En gentagelsesgruppe kan indeholde en anden gentagelsesgruppe. Brug dette forsigtigt — indlejrede gentagelser tilføjer kompleksitet og kan forvirre interviewere.

typenamelabel
begin_repeathouseholdsHusholdning
texthh_idHusholdnings-ID
begin_repeathh_membersMedlem
textmember_nameMedlemsnavn
end_repeat
end_repeat

For at referere til et felt i en ydre gentagelse fra den indre gentagelse bruges ${feltnavn} — det opløser til den nærmeste matchende forfader:

Inden i hh_members-gentagelsen returnerer ${hh_id} ID’et for den aktuelle husholdning, ikke alle husholdninger.


Rang inden for gentagelsesgrupper: rank-index()

Når et rank-felt findes inden i en gentagelse, bruges rank-index(instansNummer, gentagetFelt) udefra for at få den ordinale rang for en specifik instans:

typenamelabelcalculation
calculatetop_scorerrank-index(1, ${score})

rank-index(1, ${score}) returnerer instansindekset for den højeste score.


Bedste praksis

  1. Brug altid repeat_count, når antallet af gentagelser er kendt på forhånd — det forhindrer interviewere i utilsigtet at tilføje eller fjerne instanser.
  2. Hold gentagelsesgrupper fokuserede — en gentagelse med 20+ spørgsmål pr. instans er svær at navigere.
  3. Navngiv gentagelsesgrupper tydeligt (f.eks. household_members, ikke repeat1) — navnet vises i funktionskald og eksporterede data.
  4. Test med det maksimalt forventede antal instanser for at verificere ydelsen.
  5. Brug field-list appearance på gentagelsesgruppen for at vise alle felter på én skærm pr. instans (mobil).

Begrænsninger

  • indexed-repeat() kræver et gyldigt indeks (1 til antal instanser) — indekser uden for intervallet returnerer tomme værdier.
  • Indlejrede gentagelser ud over 2 niveauer anbefales ikke og kan forårsage visningsproblemer på nogle klienter.
  • Aggregatfunktioner (sum, count osv.) opererer på hele gentagelsesgruppen — du kan ikke aggregere en delmængde af instanser uden *-if-varianterne.
Var denne side nyttig?