Ova stranica pokriva napredne obrasce za rad sa grupama ponavljanja u rtSurvey-u. Za osnove postavljanja grupe ponavljanja, pogledajte Grupisanje i ponavljanja.


Dinamički broj ponavljanja

Podrazumevano, anketar odlučuje koliko puta da ponovi. Možete fiksirati broj ponavljanja koristeći repeat_count:

typenamelabelrepeat_count
begin_repeathousehold_membersČlan domaćinstva${num_members}
textmember_nameIme člana
integermember_ageGodine
end_repeat

Ponavljanje se izvršava tačno ${num_members} puta, gde je num_members prikupljeno ranije u formularu. Anketar ne može dodavati ili uklanjati instance.


Indeksovani pristup: indexed-repeat()

Pristupite vrednosti polja specifične instance ponavljanja izvan grupe ponavljanja koristeći indexed-repeat(repeated_polje, grupa_ponavljanja, indeks):

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

Ovo je korisno za izgradnju rezimea polja ili referenciranje podataka “primarnog” člana nakon ponavljanja.


Pozicija trenutne instance: index()

Unutar grupe ponavljanja, index() vraća poziciju trenutne instance počevši od 1. Koristite je za označavanje svakog ponavljanja ili kreiranje jedinstvenih identifikatora:

typenamelabel
begin_repeatplotsParcela
noteplot_labelBroj parcele ${index()}
textplot_idID parcele
end_repeat

Referenciranje polja u istoj instanci

Unutar ponavljanja, koristite ${ime_polja} za referenciranje drugog polja u istoj instanci ponavljanja. Nije potrebno koristiti indexed-repeat() unutar iste petlje:

typenamelabelrelevant
begin_repeatmembersČlan
textmember_nameIme
integermember_ageGodine
textschool_nameNaziv škole${member_age} < 18
end_repeat

Referenciranje roditeljskih polja unutar ponavljanja

Polja izvan (iznad) grupe ponavljanja mogu se normalno referencirati sa ${ime_polja}:

typenamelabel
textvillageNaziv sela
begin_repeatplotsPoljoprivredna parcela
noteplot_contextParcele u ${village}
end_repeat

Sumiranje podataka ponavljanja

Koristite agregate funkcije ponavljanja izvan grupe ponavljanja za sumiranje:

FunkcijaPrimerOpis
count(group)count(${household_members})Broj instanci
sum(field)sum(${loan_amount})Zbir numeričkog polja
min(field)min(${member_age})Minimalna vrednost
max(field)max(${member_age})Maksimalna vrednost
join(sep, field)join(', ', ${member_name})Lista razdvojena zarezima
count-if(group, expr)count-if(${members}, ${member_age} < 18)Uslovni broj
sum-if(field, expr)sum-if(${loan_amount}, ${loan_amount} > 500)Uslovni zbir
join-if(sep, field, expr)join-if(', ', ${name}, ${age} >= 18)Uslovni spoj

Primer: Rezime domaćinstva

typenamelabelcalculation
integernum_membersKoliko članova?
begin_repeatmembersČlan${num_members}
textmember_nameIme
integermember_ageGodine
end_repeat
calculatetotal_memberscount(${members})
calculatechildren_countcount-if(${members}, ${member_age} < 18)
calculateadult_namesjoin-if(', ', ${member_name}, ${member_age} >= 18)
notesummary${total_members} članova; ${children_count} ispod 18. Odrasli: ${adult_names}

Ugnežđena ponavljanja

Grupa ponavljanja može sadržati drugu grupu ponavljanja. Koristite ovo pažljivo — ugnežđena ponavljanja dodaju složenost i mogu zbuniti anketare.

typenamelabel
begin_repeathouseholdsDomaćinstvo
texthh_idID domaćinstva
begin_repeathh_membersČlan
textmember_nameIme člana
end_repeat
end_repeat

Za referenciranje polja u spoljnom ponavljanju iz unutrašnjeg ponavljanja, koristite ${ime_polja} — ono se razrešava na najbliži odgovarajući predak:

Unutar ponavljanja hh_members, ${hh_id} vraća ID trenutnog domaćinstva, ne svih domaćinstava.


Rangiranje unutar grupa ponavljanja: rank-index()

Kada polje rank postoji unutar ponavljanja, koristite rank-index(instanceNumber, polje_ponavljanja) izvan da dobijete redni rang specifične instance:

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

rank-index(1, ${score}) vraća indeks instance sa najvišim skorom.


Najbolje prakse

  1. Uvek koristite repeat_count kada je broj ponavljanja unapred poznat — sprečava anketare da slučajno dodaju ili uklanjaju instance.
  2. Zadržite grupe ponavljanja fokusiranima — ponavljanje sa 20+ pitanja po instanci je teško za navigaciju.
  3. Jasno imenujte grupe ponavljanja (npr. household_members, ne repeat1) — ime se pojavljuje u pozivima funkcija i izvezenim podacima.
  4. Testirajte sa maksimalnim očekivanim brojem instanci da biste proverili performanse.
  5. Koristite izgled field-list na grupi ponavljanja za prikaz svih polja na jednom ekranu po instanci (mobilni).

Ograničenja

  • indexed-repeat() zahteva validan indeks (1 do broja instanci) — indeksi van opsega vraćaju prazan rezultat.
  • Ugnežđena ponavljanja dublja od 2 nivoa nisu preporučena i mogu izazvati probleme sa prikazom na nekim klijentima.
  • Agregate funkcije (sum, count, itd.) rade na celoj grupi ponavljanja — ne možete agregirati podskup instanci bez varijanti *-if.
Da li je ova stranica bila korisna?