반복

XLSForm에는 질문 그룹을 여러 번 반복할 수 있습니다. 반복은 다음과 같은 예시에서 사용할 수 있습니다.

  • 하나의 현장조사에서 동일한 질문에 대한 여러 답변을 취득합니다.
  • 한 가구 내의 각 구성원에 대해 이름, 나이, 성별과 같이 더 작은 규모의 레코드 컬렉션을 각각 취득합니다.
  • 하나의 현장조사에서 여러 맵 질문을 취득합니다.
단일 질문에 대해 여러 응답을 제공하기 위한 반복

반복이 포함된 현장조사를 발행하면 각 반복은 피처 레이어의 릴레이트 테이블 또는 관련 레이어(반복에 지오포인트, 지오추적, 지오쉐이프 질문이 포함된 경우)로 생성됩니다.

반복 사용

Survey123에서 질문 그룹을 반복하여 여러 응답을 취득하려면 스프레드시트의 현장조사 탭에서 다음 단계를 완료합니다.

  1. 반복을 시작할 행의 유형 열에 반복 시작을 입력합니다.
  2. 반복의 이름을 Name 열에 제공합니다.
  3. 이 항목 아래의 행에서 반복에 포함하려는 질문을 입력합니다.
  4. 질문을 입력한 직후에 반복 종료Type 열에 입력합니다.

현장조사에 질문 그룹이 생성되며 이러한 질문 그룹은 현장조사 결과에 반복적으로 추가할 수 있습니다. 기본 설정에 따라 질문을 반복할 수 있는 횟수에는 제한이 없습니다.

반복 내 첫 번째 지오포인트 질문의 포인트 위치는 현장조사의 모든 맵에 표시될 수 있습니다. 자세한 내용은 맵의 포인트 중첩을 참고하세요.

반복 레코드 수 제한

Survey123에서 반복 수를 정의하려면 다음 단계를 완료하여 반복 수를 설정합니다.

  1. 반복을 시작할 행에서 현장조사 탭의 유형 열에 반복 시작을 입력합니다.
  2. 반복 수에 대한 숫자 값을 repeat_count 열에 제공합니다. 숫자 값을 반환하는 계산 또는 질문 이름도 제공할 수 있습니다.
  3. 반복의 이름을 Name 열에 제공합니다.
  4. 이 항목 아래의 행에서 반복에 포함하려는 질문을 입력합니다.
  5. 마지막 행에서 반복 종료Type 열에 입력합니다.

사용자가 현장조사를 열면 repeat_count 열에 설정된 반복 횟수가 생성되어 있습니다. 사용자는 반복을 생성하거나 삭제할 수 없습니다.

사용자는 현장조사 응답이 제출되기 전에 repeat_count 값으로 정의된 모든 반복을 탐색해야 합니다. 그렇지 않으면 일부 반복 레코드가 제출되지 않습니다. 모든 반복이 제출되도록 하려면 반복 내 필수 질문을 만들어야 합니다. 관련이 있거나 조건에 따라 필수문이 적용되는 반복 내 질문은 제출 시 평가되지 않습니다.

비고:

반복 수 변경에 따른 반복 동작은 사용자가 현장조사 응답을 작성할지 아니면 이전에 제출한 응답을 편집할지에 따라 달라집니다.

현장조사 응답을 작성하는 경우 반복 수를 줄이면 새 반복 수보다 높은 값을 가진 모든 레코드를 삭제하는 버튼이 반복 상단에 나타나며 비어 있는 레코드는 자동으로 삭제됩니다. 해당 버튼을 눌렀는지와 상관없이 현장조사 응답을 제출하면 새 반복 수보다 높은 레코드는 발송되지 않습니다.

기존 현장조사 응답을 편집하는 경우, 반복 수를 줄이면 반복 레코드 수가 변경되었다는 메시지가 반복 상단에 표시됩니다. 사용자는 기존 반복 레코드 수보다 적을 경우 편집된 응답을 제출할 수 없습니다. 새 추가 반복 레코드는 bind::esri:parameters 열에 allowAddstrue로 설정된 경우에만 허용됩니다. allowAddsfalse로 설정된 경우에는 사용자가 기존 반복 레코드 수를 초과해서 입력할 수 없습니다.

집계 함수

집계 함수를 사용하여 반복 전반의 응답에서 파생된 값을 반환할 수 있습니다. 이를 위해서는 반복 내부의 질문이 반복 외부의 질문에서 참조됩니다. 예를 들어 다음 수식에서는 반복 전반의 단일 질문에 대한 응답 수를 계산합니다.

count(${repeated_question})

다음 함수를 사용하여 응답을 집계할 수 있습니다.

  • count
  • sum
  • min
  • max
  • join

이러한 함수는 현재 현장조사 응답에만 적용되며 피처 레이어의 다른 레코드는 고려하지 않습니다. 또한 반복 내 sumcount를 사용하는 질문을 포함할 수 있습니다. 하지만 sumcount 값은 반복에 추가되는 각각의 새 레코드에 대해 계산되며 반복 내의 이전 항목에 대한 계산은 자동으로 업데이트되지 않습니다. 이러한 계산은 질문 옆의 새로 고침 버튼을 사용하여 수동으로 새로 고침할 수 있습니다. minmax는 반복 외부에서만 사용할 수 있습니다.

비고:

Survey123 현장 앱에서 사용하는 경우, sumcount는 반복 내부 또는 외부에 배치할 수 있습니다. sumcountSurvey123 웹 앱에서 사용하려는 경우 반복 외부에 배치해야 합니다. 반복 외부의 sum 또는 count 값은 반복 내부의 계산에서 참조될 수 있습니다.

join 함수를 사용하여 문자열이 반환되는 질문을 연결할 수 있습니다. 또한 sum 함수를 사용하여 반복 내의 지오포인트 질문을 반복 외에 있는 지오추적 또는 지오쉐이프 질문으로 연결할 수 있습니다.

해당 함수를 사용하는 방법에 대한 자세한 내용은 공식을 참고하세요.

반복 레코드의 색인 반환

position(..) 함수를 사용하여 반복에서 반복 레코드의 색인을 반영하는 정수를 반환할 수 있습니다. 예를 들어, 반복에서 첫 번째 레코드는 1을 반환하며, 두 번째는 2를 반환합니다. 다음 예시에서 position(..) 함수는 반복의 숨겨진 정수 질문에 사용됩니다.

XLSForm에서 position(..) 함수의 예
주의:

position(..) 함수는 반복 외부 또는 반복 내 그룹에서 사용될 때 Survey123 현장 앱에서 항상 0을 반환하거나 Survey123 웹 앱에서 1을 반환합니다.

식에서 position(..) 함수를 사용할 수도 있습니다. 다음 예시에서 selected-at() 함수는 position(..)을(를) 사용하여 현재 반복 레코드와 같은 위치에 선다형(select_multiple) 질문에서 선택된 선택 항목을 반환하며 반복의 선택 항목을 참고 사항으로 표시합니다. selected-at() 함수는 선택 항목을 0부터 계산하기 시작하므로, 색인이 일치하도록 position(..)에서 1을 뺍니다.

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

XLSForm의 position(..) 및 selected-at() 함수 예시

position(..) 함수를 indexed-repeat()과(와) 조합해 사용하여 특정 반복 레코드에서 질문 값을 추출할 수 있습니다.

색인된 반복의 값 사용

indexed-repeat() 함수를 사용하여 반복 레코드에서 특정 질문의 값을 반환할 수 있습니다. 순서대로 질문 이름, 반복 이름 및 반복의 색인 번호가 필요합니다. 다음 예시에서는 반복 floor에서 세 번째 레코드에 대해 질문 room_no에 대한 답변을 반환합니다.

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

indexed-repeat() 함수를 반복 내의 반복에 사용할 수 있습니다. 이렇게 사용하면 현재 표시되는 상위 반복에서 접근 가능한 값만 받게 됩니다.

주의:

indexed-repeat() 함수는 순환 참조가 발생하기 때문에 참조하는 반복 내에서 사용할 수 없습니다. 예를 들어 다음 식은 defects라는 반복 내 계산에 사용할 수 없습니다.

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

제한 사항

Survey123에서 반복 사용 시 알려진 제한 사항과 예기치 않은 동작은 다음과 같습니다.

  • 현장조사에 빈 반복이 포함되어 있고 반복 시작반복 종료 사이에 질문이 없으면 모든 현장조사 응답이 제출되지 않습니다.
  • 현장조사에 여러 개의 반복이 포함되어 있고 이러한 반복 중 하나에 지오포인트, 지오추적, 지오쉐이프 질문이 있으면 관계 이름이 순서대로 발행되지 않을 수 있습니다.
  • 중첩된 반복은 일대다 관계만 지원하며 각 하위 관계는 하나의 상위 관계만 가질 수 있습니다.
  • 관련 열의 식 및 repeat_count 열의 식이 모두 포함된 중첩 반복은 첫 번째 반복 레코드의 저장된 기존 데이터를 모두 지웁니다. 이를 방지하려면 반복이 관련되지 않을 때 반복 레코드가 생성되지 않도록 관련 식을 repeat_count 식에 통합합니다.