Un XLSForm puede repetir un grupo de preguntas varias veces. A continuación, se ofrecen varios ejemplos de posibles usos de las repeticiones:
- Capture varias respuestas a la misma pregunta en una encuesta.
- Capture conjuntos independientes y más pequeños de registros, como el nombre, la edad y el sexo de todas las personas que integran una unidad familiar.
- Capture varias preguntas de mapa en una sola encuesta.
Cuando publique una encuesta que incluya repeticiones, cada repetición se crea como una tabla relacionada en la capa de entidades o una capa relacionada si su repetición contiene una pregunta geopoint, geotrace o geoshape.
Usar repeticiones
Para repetir un grupo de preguntas en Survey123 con el fin de capturar varias respuestas, siga estos pasos en la pestaña survey de la hoja de cálculo:
- En la fila en la que desee iniciar la repetición, escriba begin repeat en la columna type.
- Proporcione un nombre para la repetición en la columna name.
- En las filas siguientes a esta entrada, introduzca las preguntas que desea incluir en la repetición.
- Justo después de las preguntas, escriba end repeat en la columna type.
En la encuesta se crea un grupo de preguntas que puede agregar repetidamente a los resultados de la encuesta. De manera predeterminada, no hay ninguna restricción en cuanto al número de veces que puede repetir las preguntas.
Las ubicaciones de puntos de la primera pregunta geopoint en una repetición se pueden mostrar en cualquier mapa de la encuesta. Para obtener más información, consulte Superposiciones de puntos en mapas.
Restringir el número de registros repetidos
Para definir el número de repeticiones en Survey123, defina un recuento de repeticiones completando los siguientes pasos:
- En la fila en la que desee iniciar la repetición, escriba begin repeat en la columna type de la pestaña survey.
- Proporcione un valor numérico para el número de repeticiones en la columna repeat_count. También puede proporcionar un nombre de pregunta o un cálculo que devuelve un valor numérico.
- Proporcione un nombre para la repetición en la columna name.
- En las filas siguientes a esta entrada, introduzca las preguntas que desea incluir en la repetición.
- En la última fila, escriba end repeat en la columna type.
Cuando un usuario abre la encuesta, ya se ha creado el número de repeticiones definido en la columna repeat_count. Los usuarios no pueden crear ni eliminar repeticiones.
El usuario debe navegar por todas las repeticiones definidas por el valor repeat_count antes de enviar la respuesta de la encuesta; de lo contrario, no se enviarán todos los registros repetidos. Para asegurarse de que se envíen todas las repeticiones, puede hacer que las preguntas sean obligatorias en las repeticiones. No obstante, tenga en cuenta que las preguntas de las repeticiones que tengan aplicada una instrucción relevant o conditionally required no se evaluarán en el envío.
Nota:
El comportamiento de una repetición que tiene un recuento de repeticiones cambiante es distinto dependiendo de si el usuario está creando una respuesta a la encuesta o editando una que se había enviado anteriormente.
Al crear una respuesta a la encuesta, el recuento de repeticiones de una repetición que se reduce presenta un botón en la parte superior de una repetición para eliminar todos los registros existentes por encima del nuevo recuento de repetición que contiene datos; los registros vacíos se eliminan automáticamente. Independientemente de si se pulsa este botón, al enviar la respuesta a una encuesta, no se envían los registros que rebasen el nuevo recuento de repeticiones.
Al editar una respuesta existente a una encuesta, el recuento de repeticiones de una repetición que se reduce muestra un mensaje en la parte superior de la repetición para advertir de que el número de registros de repetición ha cambiado. El usuario no puede enviar una respuesta editada que contenga un número de registros de repetición inferior al número original. Solo se permiten nuevos registros de repetición adicionales si allowAdds tiene el valor true en la columna bind::esri:parameters. Si allowAdds tiene el valor false, el usuario no puede introducir un número de registros de repetición superior al número original.
Funciones de agregación
Puede utilizar encuestas con funciones añadidas que devuelven valores derivados de respuestas en repeticiones. Para ello, una pregunta fuera de la repetición hace referencia a una pregunta de una repetición. Por ejemplo, la fórmula siguiente contará las respuestas a una pregunta única en repeticiones:
count(${repeated_question})
Puede usar las siguientes funciones para agregar respuestas:
- count
- sum
- min
- max
- join
Estas funciones solo se aplican a la respuesta de la encuesta actual. No se tienen en cuenta otros registros de la capa de entidades. También puede incluir preguntas con sum y count en la repetición. Sin embargo, aunque los valores de sum y count se calculen para cada nuevo registro que se agrega a la repetición, los cálculos de entradas anteriores de la repetición no se actualizan automáticamente. Puede refrescar manualmente estos cálculos con el botón Refrescar situado junto a la pregunta. El uso de min y max solo se admite fuera de la repetición.
Nota:
Cuando se utiliza en la aplicación de campo Survey123, las funciones sum, count y join se puede colocar dentro o fuera de la repetición. Si sum, count y join se van a utilizar en la aplicación web Survey123, deben colocarse fuera de la repetición. En un cálculo dentro de la repetición se puede hacer referencia a un valorsum, count o join de fuera de la repetición.
Puede utilizar la función join para concatenar preguntas que devuelven una cadena de caracteres. Puede utilizar también la función sum para conectar preguntas geopoint en la repetición como una pregunta geotrace o geoshape ajena a esta.
Para obtener información sobre el uso de estas funciones, consulte Fórmulas.
Devolver el índice de un registro repetido
Puede utilizar la función position(..) para devolver un entero que refleje el índice del registro de repetición en una repetición. Por ejemplo, el primer registro de una repetición devolverá 1, el segundo devolverá 2, y así sucesivamente. En el siguiente ejemplo, la función position(..) se usa en una pregunta de tipo entero oculta en una repetición:
Precaución:
La función position(..) siempre devuelve 0 en la aplicación de campo Survey123 o 1 en la aplicación web Survey123 cuando se utiliza fuera de una repetición o en un grupo que está dentro de una repetición.
También puede usar la función position(..) en una expresión. En el siguiente ejemplo, la función selected-at() utiliza position(..) para devolver la opción que se seleccionó en la pregunta select_multiple en la misma posición que el registro de repetición actual y mostrar la opción en la repetición como una nota. La función selected-at() empieza a contar las opciones desde cero, por lo que una se resta de position(..) para garantizar que los índices coincidan.
selected-at(${issues}, position(..)-1)
Puede usar la función position(..) junto con indexed-repeat() para extraer valores de preguntas de registros repetidos específicos.
Utilizar valores de repeticiones indexadas
Puede utilizar la función indexed-repeat() para devolver el valor de una pregunta específica de un registro de repetición. Requiere el nombre de la pregunta, el nombre de la repetición y el número de índice de la repetición, en ese orden. El siguiente ejemplo devuelve la respuesta a la pregunta room_no, para el tercer registro de la repetición floor:
indexed-repeat(${room_no}, ${floor}, 3)
Puede usar la función indexed-repeat() para las repeticiones dentro de repeticiones. Cuando se utiliza de esta forma, solo recibirá valores accesibles desde la repetición principal visible actualmente.
Precaución:
La función indexed-repeat() no se puede utilizar dentro de la repetición a la que hace referencia, ya que esto provocará una referencia circular. Por ejemplo, la siguiente expresión no se puede utilizar para un cálculo dentro de la repetición denominada defects:
indexed-repeat(${defect_type}, ${defects}, 3)
Limitaciones conocidas
A continuación, se muestran limitaciones conocidas y comportamientos inesperados relacionados con el uso de repeticiones en Survey123:
- Si la encuesta contiene una repetición vacía, sin ninguna pregunta entre begin repeat y end repeat, no se enviará ninguna respuesta de la encuesta.
- Si una encuesta contiene varias repeticiones, y una de estas repeticiones tiene una pregunta geopoint, geotrace o geoshape, la denominación de la relación podría publicarse desordenada.
- Las repeticiones anidadas admiten solo las relaciones de uno a muchos y cada elemento secundario puede tener un único elemento principal.
- Las repeticiones anidadas con una expresión en la columna relevant y una expresión de la columna repeat_count borran todos los datos guardados existentes en el primer registro repetido. Para evitarlo, incorpore la expresión relevante a la expresión repeat_count para que no se cree ningún registro repetido si la repetición no es relevante.