Cette page couvre les schémas avancés pour travailler avec des groupes de répétition dans rtSurvey. Pour les bases de la configuration d’un groupe de répétition, consultez Regroupement et répétitions.


Nombre de répétitions dynamique

Par défaut, l’enquêteur décide du nombre de répétitions. Vous pouvez fixer le nombre de répétitions en utilisant repeat_count :

typenamelabelrepeat_count
begin_repeathousehold_membersMembre du ménage${num_members}
textmember_nameNom du membre
integermember_ageÂge
end_repeat

La répétition s’exécute exactement ${num_members} fois, où num_members a été collecté plus tôt dans le formulaire. L’enquêteur ne peut pas ajouter ou supprimer des instances.


Accès indexé : indexed-repeat()

Accédez à la valeur d’un champ d’une instance spécifique de répétition depuis l’extérieur du groupe de répétition en utilisant indexed-repeat(repeatedField, repeatGroup, index) :

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

C’est utile pour créer des champs récapitulatifs ou référencer les données du membre “principal” après la répétition.


Position de l’instance actuelle : index()

Dans un groupe de répétition, index() retourne la position (basée sur 1) de l’instance actuelle. Utilisez-le pour étiqueter chaque répétition ou créer des identifiants uniques :

typenamelabel
begin_repeatplotsParcelle
noteplot_labelParcelle numéro ${index()}
textplot_idIdentifiant de la parcelle
end_repeat

Référencer des champs dans la même instance

Dans une répétition, utilisez ${fieldname} pour référencer un autre champ dans la même instance de répétition. Il n’est pas nécessaire d’utiliser indexed-repeat() dans la même boucle :

typenamelabelrelevant
begin_repeatmembersMembre
textmember_nameNom
integermember_ageÂge
textschool_nameNom de l’école${member_age} < 18
end_repeat

Référencer des champs parents depuis l’intérieur d’une répétition

Les champs en dehors (au-dessus) du groupe de répétition peuvent être référencés normalement avec ${fieldname} :

typenamelabel
textvillageNom du village
begin_repeatplotsParcelle agricole
noteplot_contextParcelles dans ${village}
end_repeat

Résumer les données répétées

Utilisez les fonctions d’agrégation de répétition en dehors du groupe de répétition pour résumer :

FonctionExempleDescription
count(group)count(${household_members})Nombre d’instances
sum(field)sum(${loan_amount})Somme d’un champ numérique
min(field)min(${member_age})Valeur minimale
max(field)max(${member_age})Valeur maximale
join(sep, field)join(', ', ${member_name})Liste séparée par des virgules
count-if(group, expr)count-if(${members}, ${member_age} < 18)Comptage conditionnel
sum-if(field, expr)sum-if(${loan_amount}, ${loan_amount} > 500)Somme conditionnelle
join-if(sep, field, expr)join-if(', ', ${name}, ${age} >= 18)Jointure conditionnelle

Exemple : Résumé du ménage

typenamelabelcalculation
integernum_membersCombien de membres ?
begin_repeatmembersMembre${num_members}
textmember_nameNom
integermember_ageÂge
end_repeat
calculatetotal_memberscount(${members})
calculatechildren_countcount-if(${members}, ${member_age} < 18)
calculateadult_namesjoin-if(', ', ${member_name}, ${member_age} >= 18)
notesummary${total_members} membres ; ${children_count} de moins de 18 ans. Adultes : ${adult_names}

Répétitions imbriquées

Un groupe de répétition peut contenir un autre groupe de répétition. Utilisez ceci avec précaution — les répétitions imbriquées ajoutent de la complexité et peuvent être déroutantes pour les enquêteurs.

typenamelabel
begin_repeathouseholdsMénage
texthh_idIdentifiant du ménage
begin_repeathh_membersMembre
textmember_nameNom du membre
end_repeat
end_repeat

Pour référencer un champ dans une répétition externe depuis la répétition interne, utilisez ${fieldname} — il se résout au plus proche ancêtre correspondant :

Dans la répétition hh_members, ${hh_id} retourne l’identifiant du ménage actuel, pas de tous les ménages.


Classement dans les groupes de répétition : rank-index()

Quand un champ rank existe dans une répétition, utilisez rank-index(instanceNumber, repeatedField) depuis l’extérieur pour obtenir le rang ordinal d’une instance spécifique :

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

rank-index(1, ${score}) retourne l’index d’instance du score le plus élevé.


Bonnes pratiques

  1. Utilisez toujours repeat_count lorsque le nombre de répétitions est connu à l’avance — cela évite aux enquêteurs d’ajouter ou supprimer accidentellement des instances.
  2. Gardez les groupes de répétition focalisés — une répétition avec plus de 20 questions par instance est difficile à naviguer.
  3. Nommez les groupes de répétition clairement (ex. : household_members, pas repeat1) — le nom apparaît dans les appels de fonctions et les données exportées.
  4. Testez avec le nombre maximum d’instances attendu pour vérifier les performances.
  5. Utilisez l’apparence field-list sur le groupe de répétition pour afficher tous les champs sur un seul écran par instance (mobile).

Limitations

  • indexed-repeat() nécessite un index valide (de 1 au nombre d’instances) — les index hors plage retournent vide.
  • Les répétitions imbriquées au-delà de 2 niveaux ne sont pas recommandées et peuvent causer des problèmes d’affichage sur certains clients.
  • Les fonctions d’agrégation (sum, count, etc.) opèrent sur l’ensemble du groupe de répétition — vous ne pouvez pas agréger un sous-ensemble d’instances sans les variantes *-if.
Cette page vous a-t-elle été utile ?