Diese Seite behandelt fortgeschrittene Muster für die Arbeit mit Wiederholungsgruppen in rtSurvey. Für die Grundlagen zur Einrichtung einer Wiederholungsgruppe, siehe Gruppierung und Wiederholungen.


Dynamische Wiederholungsanzahl

Standardmäßig entscheidet der Interviewer, wie oft er wiederholt. Sie können die Anzahl der Wiederholungen mit repeat_count festlegen:

typenamelabelrepeat_count
begin_repeathousehold_membersHaushaltsmitglied${num_members}
textmember_nameName des Mitglieds
integermember_ageAlter
end_repeat

Die Wiederholung läuft genau ${num_members} Mal, wobei num_members zuvor im Formular erfasst wurde. Der Interviewer kann keine Instanzen hinzufügen oder entfernen.


Indiziierter Zugriff: indexed-repeat()

Greifen Sie auf den Feldwert einer bestimmten Wiederholungsinstanz von außerhalb der Wiederholungsgruppe zu mit indexed-repeat(repeatedField, repeatGroup, index):

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

Dies ist nützlich für das Erstellen von Zusammenfassungsfeldern oder für die Referenzierung der Daten des “primären” Mitglieds nach der Wiederholung.


Aktuelle Instanzposition: index()

Innerhalb einer Wiederholungsgruppe gibt index() die 1-basierte Position der aktuellen Instanz zurück. Verwenden Sie es, um jede Wiederholung zu beschriften oder eindeutige Bezeichner zu erstellen:

typenamelabel
begin_repeatplotsParzelle
noteplot_labelParzellennummer ${index()}
textplot_idParzellen-ID
end_repeat

Felder in derselben Instanz referenzieren

Innerhalb einer Wiederholung verwenden Sie ${fieldname}, um ein anderes Feld in derselben Wiederholungsinstanz zu referenzieren. indexed-repeat() ist innerhalb derselben Schleife nicht erforderlich:

typenamelabelrelevant
begin_repeatmembersMitglied
textmember_nameName
integermember_ageAlter
textschool_nameSchulname${member_age} < 18
end_repeat

Übergeordnete Felder von innerhalb einer Wiederholung referenzieren

Felder außerhalb (oberhalb) der Wiederholungsgruppe können normal mit ${fieldname} referenziert werden:

typenamelabel
textvillageDorfname
begin_repeatplotsLandwirtschaftliche Parzelle
noteplot_contextParzellen in ${village}
end_repeat

Wiederholungsdaten zusammenfassen

Verwenden Sie Wiederholungs-Aggregatfunktionen außerhalb der Wiederholungsgruppe zur Zusammenfassung:

FunktionBeispielBeschreibung
count(group)count(${household_members})Anzahl der Instanzen
sum(field)sum(${loan_amount})Summe eines numerischen Feldes
min(field)min(${member_age})Minimalwert
max(field)max(${member_age})Maximalwert
join(sep, field)join(', ', ${member_name})Kommagetrennte Liste
count-if(group, expr)count-if(${members}, ${member_age} < 18)Bedingte Zählung
sum-if(field, expr)sum-if(${loan_amount}, ${loan_amount} > 500)Bedingte Summe
join-if(sep, field, expr)join-if(', ', ${name}, ${age} >= 18)Bedingtes Verbinden

Beispiel: Haushaltszusammenfassung

typenamelabelcalculation
integernum_membersWie viele Mitglieder?
begin_repeatmembersMitglied${num_members}
textmember_nameName
integermember_ageAlter
end_repeat
calculatetotal_memberscount(${members})
calculatechildren_countcount-if(${members}, ${member_age} < 18)
calculateadult_namesjoin-if(', ', ${member_name}, ${member_age} >= 18)
notesummary${total_members} Mitglieder; ${children_count} unter 18. Erwachsene: ${adult_names}

Verschachtelte Wiederholungen

Eine Wiederholungsgruppe kann eine weitere Wiederholungsgruppe enthalten. Verwenden Sie dies sorgfältig — verschachtelte Wiederholungen erhöhen die Komplexität und können für Interviewer verwirrend sein.

typenamelabel
begin_repeathouseholdsHaushalt
texthh_idHaushalts-ID
begin_repeathh_membersMitglied
textmember_nameMitgliedsname
end_repeat
end_repeat

Um ein Feld in einer äußeren Wiederholung von der inneren Wiederholung aus zu referenzieren, verwenden Sie ${fieldname} — es löst sich zum nächsten passenden Vorfahren auf:

Innerhalb der hh_members-Wiederholung gibt ${hh_id} die ID des aktuellen Haushalts zurück, nicht aller Haushalte.


Rank innerhalb von Wiederholungsgruppen: rank-index()

Wenn ein rank-Feld innerhalb einer Wiederholung vorhanden ist, verwenden Sie rank-index(instanceNumber, repeatedField) von außen, um den ordinalen Rang einer bestimmten Instanz zu erhalten:

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

rank-index(1, ${score}) gibt den Instanzindex der höchsten Punktzahl zurück.


Empfohlene Vorgehensweisen

  1. Verwenden Sie immer repeat_count, wenn die Anzahl der Wiederholungen im Voraus bekannt ist — dies verhindert, dass Interviewer versehentlich Instanzen hinzufügen oder entfernen.
  2. Halten Sie Wiederholungsgruppen fokussiert — eine Wiederholung mit 20+ Fragen pro Instanz ist schwer zu navigieren.
  3. Benennen Sie Wiederholungsgruppen klar (z. B. household_members, nicht repeat1) — der Name erscheint in Funktionsaufrufen und exportierten Daten.
  4. Testen Sie mit der maximal erwarteten Anzahl von Instanzen, um die Leistung zu überprüfen.
  5. Verwenden Sie das field-list-Erscheinungsbild für die Wiederholungsgruppe, um alle Felder auf einem Bildschirm pro Instanz anzuzeigen (mobil).

Einschränkungen

  • indexed-repeat() erfordert einen gültigen Index (1 bis Instanzanzahl) — Indizes außerhalb des Bereichs geben leer zurück.
  • Verschachtelte Wiederholungen über 2 Ebenen hinaus werden nicht empfohlen und können bei einigen Clients Anzeigeprobleme verursachen.
  • Aggregatfunktionen (sum, count usw.) arbeiten auf der gesamten Wiederholungsgruppe — Sie können keine Teilmenge von Instanzen ohne die *-if-Varianten aggregieren.
War diese Seite hilfreich?