Répétitions

Un fichier XLSForm peut répéter un groupe de questions plusieurs fois. Voici quelques exemples d’utilisation des répétitions :

  • Capturer plusieurs réponses à la même question dans une même enquête
  • Capturer de plus petits ensembles distincts d’enregistrements, par exemple, le nom, l’âge et le sexe des personnes composant un foyer
  • Capturer plusieurs questions carte dans une seule enquête
Répéter pour fournir plusieurs réponses à une seule question

Lorsque vous publiez une enquête contenant des répétitions, chaque répétition est créée en tant que table associée à votre couche d’entités ou en tant que couche associée si votre répétition contient une question de type géopoint, géotrace et géoforme.

Utiliser des répétitions

Pour répéter un groupe de questions dans Survey123 afin de capturer plusieurs réponses, procédez de la manière suivante dans l’onglet survey (enquête) de votre feuille de calcul :

  1. Sur la ligne où vous souhaitez commencer la répétition, saisissez begin repeat (commencer la répétition) dans la colonne type.
  2. Tapez un nom pour la répétition dans la colonne name.
  3. Dans les lignes suivantes, saisissez les questions que vous souhaitez inclure dans votre répétition.
  4. Immédiatement après les questions, tapez end repeat dans la colonne type.

Cela a pour effet de créer un groupe de questions dans votre enquête que pouvez ajouter plusieurs fois aux résultats de votre enquête. Par défaut, le nombre de fois que vous pouvez répéter les questions n’est pas limité.

Les emplacements des points provenant de la première question de type géopoint d’une répétition peuvent être affichés sur n’importe quelle carte dans votre enquête. Pour plus d’informations, reportez-vous à la rubrique Superpositions de points sur les cartes.

Limiter le nombre d’enregistrements répétés

Pour définir le nombre de répétitions dans Survey123, procédez comme suit :

  1. Sur la ligne où vous voulez commencer la répétition, saisissez begin repeat dans la colonne type de l'onglet enquête.
  2. Indiquez une valeur numérique correspondant au nombre de répétitions dans la colonne repeat_count. Vous pouvez également indiquer un nom de question ou un calcul qui renvoie une valeur numérique.
  3. Tapez un nom pour la répétition dans la colonne name.
  4. Dans les lignes situées sous cette entrée, saisissez les questions que vous souhaitez inclure dans votre répétition.
  5. Dans la dernière ligne, tapez end repeat dans la colonne type .

Au moment où un utilisateur ouvre votre enquête, la répétition aura déjà créé le nombre de répétitions défini dans la colonne repeat_count. Il ne peut pas créer ni supprimer de répétitions.

L’utilisateur doit parcourir les répétitions définies par la valeur repeat_count avant l’envoi de la réponse à l’enquête. Sinon, tous les enregistrements répétés ne sont pas envoyés. Pour vous assurer que toutes les répétitions sont envoyées, vous pouvez rendre les questions obligatoires dans vos répétitions. Sachez toutefois que les questions dans les répétitions auxquelles une instruction obligatoire conditionnelle ou pertinente est appliquée ne seront pas évaluées lors de l’envoi.

Remarque :

Une répétition avec un nombre de répétitions variable se comporte différemment selon que l’utilisateur crée une réponse d’enquête ou en modifie une qui a déjà été envoyée.

Lors de la création d’une réponse d’enquête, en cas de réduction du nombre de répétitions pour une répétition, un bouton affiché en haut de la répétition permet de supprimer tous les enregistrements dépassant le nouveau nombre de répétitions et contenant des données ; les enregistrements vides sont supprimés automatiquement. Que ce bouton soit activé ou non, les enregistrements dépassant le nouveau nombre de répétitions ne sont pas envoyés lors de la soumission de la réponse à l’enquête.

Lors de la mise à jour d’une réponse d’enquête, en cas de réduction du nombre de répétitions pour une répétition, un message affiché en haut de la répétition indique que le nombre d’enregistrements répétés a changé. L’utilisateur ne peut donc pas soumettre une réponse mise à jour dont le nombre d’enregistrements répétés est inférieur à celui d’origine. L’ajout de nouveaux enregistrements répétés est accepté uniquement si allowAdds est défini sur true dans la colonne bind::esri:parameters. Si allowAdds est défini sur false, l’utilisateur ne peut pas saisir plus d’enregistrements répétés que le nombre d’origine.

Fonctions agrégées

Vous pouvez utiliser les fonctions d’agrégation pour renvoyer des valeurs dérivant des réponses dans les répétitions. Pour cela, une question dans une répétition est référencée par une question en dehors de cette répétition. Par exemple, la formule suivante compte les réponses à une même question dans les répétitions :

count(${repeated_question})

Vous pouvez utiliser les fonctions suivantes pour agréger des réponses :

  • total
  • somme
  • min
  • max
  • joindre

Ces fonctions ne s'appliquent qu'aux réponses à l'enquête actuelle. Elles ne prennent pas en compte d’autres enregistrements dans la couche d’entités. Vous pouvez également inclure des questions utilisant sum et count dans la répétition. Toutefois, si les opérateurs sum et count seront calculés pour chaque nouvel enregistrement ajouté à la répétition, les calculs des entrées précédentes de la répétition ne sont pas mis à jour automatiquement. Vous pouvez actualiser manuellement ces calculs à l’aide du bouton Refresh (Actualiser) en regard de la question. L’utilisation des opérateurs min et max n’est possible qu’en dehors de la répétition.

Vous pouvez utiliser la fonction de jointure pour concaténer des questions qui renvoient une chaîne. Il est également possible d’utiliser la fonction sum pour associer des questions de type géopoint dans la répétition sous forme de question de type géotrace ou géoforme hors de la répétition.

Pour plus d’informations concernant l’utilisation de ces fonctions, consultez la rubrique Formules.

Renvoyer l’index d’un enregistrement de répétition

Vous pouvez utiliser la fonction position(..) pour renvoyer un entier reflétant l’index d’un enregistrement de répétition dans une répétition. Prenons l’exemple d’un cas où le premier enregistrement d’une répétition renvoie la valeur 1, le deuxième enregistrement la valeur 2, etc. Dans l’exemple suivant, la fonction position(..) est utilisée dans une question avec entier masquée au sein d’une répétition :

Exemple de fonction position(..) dans XLSForm
Attention :

La fonction position(..) renvoie toujours 0 dans l’application de terrain Survey123 ou 1 dans l’application Web Survey123 lorsqu’elle est utilisée hors d’une répétition ou dans un groupe qui se trouve dans une répétition.

Vous pouvez aussi utiliser la fonction position(..) dans une expression. Dans l’exemple suivant, la fonction selected-at() utilise position(..) pour renvoyer le choix qui a été sélectionné à la question de type select_multiple (choix multiples) à la même position que l’enregistrement de répétition en cours et afficher le choix dans la répétition sous forme de note. La fonction selected-at() commence à compter les choix à partir de zéro, donc un est soustrait de position(..) afin de garantir la correspondance des index.

selected-at(${issues}, position(..)-1)

Exemple des fonctions position(..) et selected-at() dans XLSForm

Vous pouvez utiliser la fonction position(..) avec indexed-repeat() pour extraire les valeurs de questions à partir d’enregistrements de répétition particuliers.

Utiliser les valeurs des répétitions indexées

Vous pouvez utiliser la fonction indexed-repeat() pour renvoyer la valeur d’une question spécifique dans un enregistrement de répétition. Le nom de la question, le nom de la répétition et le numéro d’index de la répétition sont alors requis dans cet ordre. L’exemple suivant renvoie la réponse à la question room_no, pour le troisième enregistrement de la répétition floor :

indexed-repeat(${room_no}, ${floor}, 3)

Vous pouvez utiliser la fonction indexed-repeat() pour les répétitions au sein de répétitions. Utilisée de cette manière, elle ne reçoit que les valeurs accessibles à partir de la répétition parent actuellement visible.

Attention :

La fonction indexed-repeat() ne peut pas être utilisée dans la répétition qu’elle référence car cela créerait une référence circulaire. Par exemple, l’expression suivante ne peut pas être utilisée pour un calcul dans la répétition nommée defects :

indexed-repeat(${defect_type}, ${defects}, 3)

Limitations connues

Quelques limitations connues et comportements inattendus sont associés à l’utilisation des répétitions dans Survey123 :

  • Si votre enquête contient une répétition vide, sans aucune question entre begin repeat (commencer la répétition) et end repeat (terminer la répétition), tous les envois d’une réponse à l’enquête vont échouer.
  • Si votre enquête contient plusieurs répétitions, dont une comportant une question de type géopoint, géotrace ou une géoforme, la dénomination de la relation est souvent publiée dans le désordre.
  • Les répétitions imbriquées prennent uniquement en charge les relations un vers plusieurs et chaque enfant ne peut avoir qu’un seul parent.
  • Les répétitions imbriquées avec à la fois une expression dans la colonne relevant (pertinent) et une expression dans la colonne repeat_count (nombre_répétitions) effacent toutes les données enregistrées existantes dans le premier enregistrement de répétition. Pour éviter cela, incorporez l’expression pertinente dans l’expression repeat_count (nombre_répétitions) afin de ne créer aucun enregistrement de répétition lorsque la répétition n’est pas pertinente.