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 à la couche d’entités ou en tant que couche associée si la répétition contient une question de type géopoint, géotrace ou 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 la 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 situées sous cette entrée, saisissez les questions que vous souhaitez inclure dans la répétition.
  4. Immédiatement après les questions, tapez end repeat dans la colonne type.

Un groupe de questions est créé dans l’enquête ; vous pouvez l’ajouter plusieurs fois aux résultats de l’enquête. Par défaut, le nombre de fois que vous pouvez répéter les questions n’est pas limité.

Les localisations 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 l’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 (commencer la répéttion) dans la colonne type de l’onglet survey (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 la répétition.
  5. Dans la dernière ligne, tapez end repeat dans la colonne type .

Lorsqu’un utilisateur ouvre l’enquête, les répétitions, dont le nombre est défini dans la colonne repeat_count (nombre_répétitions), sont déjà créées. L’utilisateur ne peut ni 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 les répétitions. Sachez toutefois que les questions dans les répétitions auxquelles une instruction obligatoire conditionnelle ou pertinente est appliquée ne sont 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 vierges 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. De nouveaux enregistrements répétés supplémentaires sont acceptés uniquement si allowAdds est défini sur true (vrai) dans la colonne bind::esri:parameters. Si allowAdds est défini sur false (faux), 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. Dans ce but, 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 :

  • count
  • sum
  • min
  • max
  • join

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 fonctions sum et count sont calculées 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 fonctions min et max n’est possible qu’en dehors de la répétition.

Remarque :

Lorsqu’elles sont utilisées dans l’application de terrain Survey123, les fonctions sum et count peuvent être placées dans la répétition ou en dehors de celle-ci. Si sum et count doivent être utilisées dans l’application Web Survey123, elles doivent être placées en dehors de la répétition. Une valeur sum ou count externe à la répétition peut être référencée dans un calcul interne à la répétition.

Vous pouvez utiliser la fonction join 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 un formulaire 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

Les limitations connues et les comportements inattendus suivants s’appliquent lorsque des répétitions sont utilisée dans Survey123 :

  • Si une 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 de réponse à l’enquête échouent.
  • Si une enquête contient plusieurs répétitions, dont une comportant une question de type géopoint, géotrace ou géoforme, la dénomination de la relation risque d’être 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.