Šiame puslapyje aprašomi pažangūs kartojimų grupių naudojimo modeliai rtSurvey sistemoje. Pagrindinę informaciją apie kartojimų grupių konfigūravimą rasite Grupavimas ir kartojimai.


Dinaminis kartojimų skaičius

Pagal numatymą surašytojas nusprendžia, kiek kartų kartoti. Galite fiksuoti kartojimų skaičių naudodami repeat_count:

typenamelabelrepeat_count
begin_repeathousehold_membersNamų ūkio narys${num_members}
textmember_nameNario vardas
integermember_ageAmžius
end_repeat

Kartojimas vykdomas tiksliai ${num_members} kartų, kur num_members buvo surinkta anksčiau formoje. Surašytojas negali pridėti ar pašalinti egzempliorių.


Indeksuota prieiga: indexed-repeat()

Pasiekite konkretaus kartojimo egzemplioriaus lauko reikšmę iš kartojimų grupės išorės naudodami indexed-repeat(kartotasLaukas, kartojimųGrupė, indeksas):

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

Tai naudinga kuriant suvestinių laukus arba nurodant „pagrindinio" nario duomenis po kartojimo.


Dabartinio egzemplioriaus pozicija: index()

Kartojimų grupės viduje index() grąžina dabartinio egzemplioriaus 1 nuo pradžios skaičiuojamą poziciją. Naudokite jį kiekvienam kartojimui žymėti arba unikalių identifikatorių kūrimui:

typenamelabel
begin_repeatplotsSklypas
noteplot_labelSklypo numeris ${index()}
textplot_idSklypo ID
end_repeat

Laukų nuoroda tame pačiame egzemplioriuje

Kartojimo viduje naudokite ${lauko_pavadinimas}, kad nurodytumėte kitą lauką tame pačiame kartojimo egzemplioriuje. Nereikia indexed-repeat() toje pačioje kilpoje:

typenamelabelrelevant
begin_repeatmembersNarys
textmember_nameVardas
integermember_ageAmžius
textschool_nameMokyklos pavadinimas${member_age} < 18
end_repeat

Pirminių laukų nuoroda iš kartojimo vidaus

Laukai už kartojimų grupės ribų (aukščiau) gali būti nurodomi normaliai su ${lauko_pavadinimas}:

typenamelabel
textvillageKaimo pavadinimas
begin_repeatplotsŽemės ūkio sklypas
noteplot_contextSklypai ${village} kaime
end_repeat

Kartojimų duomenų apibendrinimas

Naudokite kartojimų agregavimo funkcijas kartojimų grupės išorėje apibendrinimui:

FunkcijaPavyzdysAprašymas
count(group)count(${household_members})Egzempliorių skaičius
sum(field)sum(${loan_amount})Skaitinio lauko suma
min(field)min(${member_age})Minimali reikšmė
max(field)max(${member_age})Maksimali reikšmė
join(sep, field)join(', ', ${member_name})Kableliais atskirtas sąrašas
count-if(group, expr)count-if(${members}, ${member_age} < 18)Sąlyginis skaičius
sum-if(field, expr)sum-if(${loan_amount}, ${loan_amount} > 500)Sąlyginė suma
join-if(sep, field, expr)join-if(', ', ${name}, ${age} >= 18)Sąlyginis sujungimas

Pavyzdys: namų ūkio suvestinė

typenamelabelcalculation
integernum_membersKiek narių?
begin_repeatmembersNarys${num_members}
textmember_nameVardas
integermember_ageAmžius
end_repeat
calculatetotal_memberscount(${members})
calculatechildren_countcount-if(${members}, ${member_age} < 18)
calculateadult_namesjoin-if(', ', ${member_name}, ${member_age} >= 18)
notesummary${total_members} nariai; ${children_count} iki 18 metų. Suaugusieji: ${adult_names}

Įdėtiniai kartojimai

Kartojimų grupė gali turėti kitą kartojimų grupę. Naudokite tai atsargiai — įdėtiniai kartojimai prideda sudėtingumo ir gali klaidinti surašytojus.

typenamelabel
begin_repeathouseholdsNamų ūkis
texthh_idNamų ūkio ID
begin_repeathh_membersNarys
textmember_nameNario vardas
end_repeat
end_repeat

Norėdami nurodyt lauką išoriniame kartojime iš vidinio kartojimo, naudokite ${lauko_pavadinimas} — jis išsprendžia iki artimiausio atitinkančio pirminio:

hh_members kartojimo viduje ${hh_id} grąžina dabartinio namų ūkio ID, o ne visų namų ūkių.


Reitingas kartojimų grupėse: rank-index()

Kai kartojimo viduje yra rank laukas, naudokite rank-index(egzemplioriausNumeris, kartotasLaukas) iš išorės, kad gautumėte konkretaus egzemplioriaus eilinį reitingą:

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

rank-index(1, ${score}) grąžina aukščiausio balo egzemplioriaus indeksą.


Geriausios praktikos

  1. Visada naudokite repeat_count, kai kartojimų skaičius yra žinomas iš anksto — tai neleidžia surašytojams atsitiktinai pridėti ar pašalinti egzempliorių.
  2. Laikykite kartojimų grupes sutelktas — kartojimas su 20+ klausimų kiekvienam egzemplioriui yra sunku naršyti.
  3. Aiškiai pavadinkite kartojimų grupes (pvz., household_members, o ne repeat1) — pavadinimas rodomas funkcijų skambučiuose ir eksportuotų duomenų.
  4. Patikrinkite su maksimaliu tikėtinu egzempliorių skaičiumi, kad patikrintumėte našumą.
  5. Naudokite field-list išvaizdą kartojimų grupėje, kad rodytumėte visus laukus viename ekrane kiekvienam egzemplioriui (mobilieji).

Apribojimai

  • indexed-repeat() reikalauja galiojančio indekso (nuo 1 iki egzempliorių skaičiaus) — už diapazono ribų esantys indeksai grąžina tuščią reikšmę.
  • Įdėtiniai kartojimai daugiau nei 2 lygių nerekomenduojami ir gali sukelti ekrano problemų kai kuriuose klientuose.
  • Agregavimo funkcijos (sum, count ir kt.) veikia visoje kartojimų grupėje — negalite agreguoti egzempliorių pogrupį be *-if variantų.
Ar šis puslapis buvo naudingas?