Táto stránka pokrýva pokročilé vzory pre prácu so skupinami opakovaní v rtSurvey. Pre základné nastavenie skupiny opakovaní pozri Zoskupovanie a opakovania.


Dynamický počet opakovaní

Predvolene anketár rozhoduje, koľkokrát opakovať. Počet opakovaní môžete zafixovať pomocou repeat_count:

typenamelabelrepeat_count
begin_repeathousehold_membersČlen domácnosti${num_members}
textmember_nameMeno člena
integermember_ageVek
end_repeat

Opakovanie prebehne presne ${num_members}-krát, kde num_members bol zozbieraný skôr vo formulári. Anketár nemôže pridávať ani odstraňovať inštancie.


Indexovaný prístup: indexed-repeat()

Prístup k hodnote poľa konkrétnej inštancie opakovania zvonku skupiny opakovaní pomocou indexed-repeat(repeatedField, repeatGroup, index):

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

Toto je užitočné na vytváranie súhrnných polí alebo odkazovanie dát „primárneho" člena po opakovní.


Aktuálna pozícia inštancie: index()

Vo vnútri skupiny opakovaní, index() vráti pozíciu aktuálnej inštancie (začína od 1). Použite ho na označenie každého opakovania alebo vytváranie jedinečných identifikátorov:

typenamelabel
begin_repeatplotsParcela
noteplot_labelParcela číslo ${index()}
textplot_idID parcely
end_repeat

Odkazovanie polí v tej istej inštancii

V rámci opakovania použite ${fieldname} na odkazovanie iného poľa v tej istej inštancii opakovania. V rámci toho istého cyklu nie je potrebné indexed-repeat():

typenamelabelrelevant
begin_repeatmembersČlen
textmember_nameMeno
integermember_ageVek
textschool_nameNázov školy${member_age} < 18
end_repeat

Odkazovanie rodičovských polí zvnútra opakovania

Polia mimo (nad) skupinou opakovaní môžu byť odkazované normálne pomocou ${fieldname}:

typenamelabel
textvillageNázov obce
begin_repeatplotsPoľnohospodárska parcela
noteplot_contextParcely v ${village}
end_repeat

Sumarizácia dát opakovaní

Použite agregačné funkcie opakovania mimo skupiny opakovaní na sumarizáciu:

FunkciaPríkladPopis
count(group)count(${household_members})Počet inštancií
sum(field)sum(${loan_amount})Súčet číselného poľa
min(field)min(${member_age})Minimálna hodnota
max(field)max(${member_age})Maximálna hodnota
join(sep, field)join(', ', ${member_name})Zoznam oddelený čiarkami
count-if(group, expr)count-if(${members}, ${member_age} < 18)Podmienený počet
sum-if(field, expr)sum-if(${loan_amount}, ${loan_amount} > 500)Podmienený súčet
join-if(sep, field, expr)join-if(', ', ${name}, ${age} >= 18)Podmienené spojenie

Príklad: Súhrn domácnosti

typenamelabelcalculation
integernum_membersKoľko členov?
begin_repeatmembersČlen${num_members}
textmember_nameMeno
integermember_ageVek
end_repeat
calculatetotal_memberscount(${members})
calculatechildren_countcount-if(${members}, ${member_age} < 18)
calculateadult_namesjoin-if(', ', ${member_name}, ${member_age} >= 18)
notesummary${total_members} členov; ${children_count} mladších ako 18. Dospelí: ${adult_names}

Vnorené opakovania

Skupina opakovaní môže obsahovať inú skupinu opakovaní. Používajte to opatrne — vnorené opakovania pridávajú komplexnosť a môžu byť mätúce pre anketárov.

typenamelabel
begin_repeathouseholdsDomácnosť
texthh_idID domácnosti
begin_repeathh_membersČlen
textmember_nameMeno člena
end_repeat
end_repeat

Na odkazovanie poľa vo vonkajšom opakovaní zvnútra vnútorného opakovania použite ${fieldname} — preloží sa na najbližšieho zodpovedajúceho predka:

Vo vnútri opakovania hh_members, ${hh_id} vráti ID aktuálnej domácnosti, nie všetkých domácností.


Poradie vo vnútri skupín opakovaní: rank-index()

Keď pole rank existuje vo vnútri opakovania, použite rank-index(instanceNumber, repeatedField) zvonku na získanie poradia konkrétnej inštancie:

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

rank-index(1, ${score}) vráti index inštancie s najvyšším skóre.


Najlepšie postupy

  1. Vždy používajte repeat_count ak je počet opakovaní vopred známy — zabraňuje anketárom náhodne pridávať alebo odstraňovať inštancie.
  2. Udržujte skupiny opakovaní zamerané — opakovanie s viac ako 20 otázkami na inštanciu je ťažko navigovateľné.
  3. Pomenujte skupiny opakovaní jasne (napr. household_members, nie repeat1) — názov sa objavuje vo volaní funkcií a exportovaných dátach.
  4. Testujte s maximálnym očakávaným počtom inštancií na overenie výkonu.
  5. Použite vzhľad field-list na skupinu opakovaní, aby sa všetky polia zobrazili na jednej obrazovke na inštanciu (mobil).

Obmedzenia

  • indexed-repeat() vyžaduje platný index (1 až počet inštancií) — indexy mimo rozsahu vracajú prázdnu hodnotu.
  • Vnorené opakovania nad 2 úrovne sa neodporúčajú a môžu spôsobiť problémy s zobrazením na niektorých klientoch.
  • Agregačné funkcie (sum, count atď.) operujú na celej skupine opakovaní — podmnožinu inštancií nemôžete agregovať bez variantov *-if.
Bola táto stránka užitočná?