Tällä sivulla käsitellään edistyneitä malleja toistoryhmien käyttöön rtSurveyssa. Toistoryhmien perusteista katso Ryhmittely ja toistot.


Dynaaminen toistomäärä

Oletuksena luetteloija päättää kuinka monta kertaa toistaa. Voit kiinnittää toistojen lukumäärän käyttämällä repeat_count:tia:

typenamelabelrepeat_count
begin_repeathousehold_membersKotitalouden jäsen${num_members}
textmember_nameJäsenen nimi
integermember_ageIkä
end_repeat

Toisto suoritetaan täsmälleen ${num_members} kertaa, jossa num_members kerättiin aiemmin lomakkeessa. Luetteloija ei voi lisätä tai poistaa tapauksia.


Indeksoitu pääsy: indexed-repeat()

Pääse tietyn toistotapauksen kenttäarvoon toistoryhmän ulkopuolelta käyttämällä indexed-repeat(repeatedField, repeatGroup, index):

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

Tämä on hyödyllinen yhteenvetokenttien rakentamisessa tai “ensisijaisen” jäsenen tietojen viittaamisessa toiston jälkeen.


Nykyinen tapausnumero: index()

Toistoryhmän sisällä index() palauttaa nykyisen tapauksen 1-pohjaisen sijainnin. Käytä sitä kunkin toiston nimeämiseen tai ainutlaatuisten tunnisteiden luomiseen:

typenamelabel
begin_repeatplotsPelto
noteplot_labelPelto numero ${index()}
textplot_idPellon tunnus
end_repeat

Saman tapauksen kenttien viittaaminen

Toiston sisällä käytä ${fieldname} viittaaksesi toiseen kenttään samassa toistotapauksessa. indexed-repeat():ia ei tarvita saman silmukan sisällä:

typenamelabelrelevant
begin_repeatmembersJäsen
textmember_nameNimi
integermember_ageIkä
textschool_nameKoulun nimi${member_age} < 18
end_repeat

Päivittävien kenttien viittaaminen toiston sisältä

Toistoryhmän ulkopuolella (yläpuolella) olevia kenttiä voidaan viitata normaalisti ${fieldname}:lla:

typenamelabel
textvillageKylän nimi
begin_repeatplotsMaatalousmaa
noteplot_contextPellot kylässä ${village}
end_repeat

Toistodatan yhteenveto

Käytä toiston koostefunktioita toistoryhmän ulkopuolella yhteenvedon luomiseen:

FunktioEsimerkkiKuvaus
count(group)count(${household_members})Tapausten lukumäärä
sum(field)sum(${loan_amount})Numeerisen kentän summa
min(field)min(${member_age})Pienin arvo
max(field)max(${member_age})Suurin arvo
join(sep, field)join(', ', ${member_name})Pilkuilla eroteltu lista
count-if(group, expr)count-if(${members}, ${member_age} < 18)Ehdollinen lukumäärä
sum-if(field, expr)sum-if(${loan_amount}, ${loan_amount} > 500)Ehdollinen summa
join-if(sep, field, expr)join-if(', ', ${name}, ${age} >= 18)Ehdollinen liittäminen

Esimerkki: Kotitalousyhteenveto

typenamelabelcalculation
integernum_membersKuinka monta jäsentä?
begin_repeatmembersJäsen${num_members}
textmember_nameNimi
integermember_ageIkä
end_repeat
calculatetotal_memberscount(${members})
calculatechildren_countcount-if(${members}, ${member_age} < 18)
calculateadult_namesjoin-if(', ', ${member_name}, ${member_age} >= 18)
notesummary${total_members} jäsentä; ${children_count} alle 18-vuotiasta. Aikuiset: ${adult_names}

Sisäkkäiset toistot

Toistoryhmä voi sisältää toisen toistoryhmän. Käytä tätä harkiten — sisäkkäiset toistot lisäävät monimutkaisuutta ja voivat olla hämmentäviä luetteloijille.

typenamelabel
begin_repeathouseholdsKotitalous
texthh_idKotitaloustunnus
begin_repeathh_membersJäsen
textmember_nameJäsenen nimi
end_repeat
end_repeat

Viitattaessa ulomman toiston kenttään sisemmästä toistosta, käytä ${fieldname} — se ratkaisee lähimpään vastaavaan yläisäntään:

hh_members-toiston sisällä ${hh_id} palauttaa nykyisen kotitalouden tunnuksen, ei kaikkien kotitalouksien tunnuksia.


Järjestys toistoryhmissä: rank-index()

Kun rank-kenttä on toiston sisällä, käytä rank-index(instanceNumber, repeatedField) ulkopuolelta saadaksesi tietyn tapauksen ordinaalijarjestyksen:

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

rank-index(1, ${score}) palauttaa korkeimman pistemäärän tapausindeksin.


Parhaat käytännöt

  1. Käytä aina repeat_count:ia, kun toistojen lukumäärä tiedetään etukäteen — se estää luetteloijia lisäämästä tai poistamasta tapauksia vahingossa.
  2. Pidä toistoryhmät fokusoiduina — 20+ kysymyksen toisto per tapaus on vaikea navigoida.
  3. Nimeä toistoryhmät selkeästi (esim. household_members, ei repeat1) — nimi näkyy funktiokutsuissa ja viedyissä tiedoissa.
  4. Testaa maksimaalisen odotetun tapausmäärän kanssa suorituskyvyn tarkistamiseksi.
  5. Käytä field-list-ulkoasua toistoryhmässä näyttääksesi kaikki kentät yhdellä näytöllä per tapaus (mobiili).

Rajoitukset

  • indexed-repeat() vaatii kelvollisen indeksin (1 tapausmäärään asti) — alueen ulkopuoliset indeksit palauttavat tyhjän.
  • Sisäkkäiset toistot yli 2 tasoa eivät ole suositeltuja ja saattavat aiheuttaa näyttöongelmia joillakin asiakkailla.
  • Koostefunktiot (sum, count jne.) toimivat koko toistoryhmälle — et voi koota osajoukkoa tapauksista ilman *-if-variantteja.
Oliko tämä sivu hyödyllinen?