수식

수식을 사용하여 ArcGIS Survey123에서 더욱 스마트한 양식을 생성할 수 있습니다.

이전 질문은 ${field_name} 형식이 있는 공식에서 항상 참조되어야 합니다.

연산자

Survey123에서 지원되는 연산자는 다음과 같습니다.

연산자설명예시

.

현재 답

.=1

+

더하기

${question_one} + 4

-

빼기

${question_one} - 4

*

곱하기

${question_one} * 4

div

나누기

${question_one} div 4

=

같음

${price}=9.80

!=

같지 않음

${price}!=9.80

<

다음보다 작음

${price}<9.80

<=

다음보다 작거나 같음

${price}<=9.80

>

다음보다 큼

${price}>9.80

>=

보다 크거나 같음

${price}>=9.80

and

${price}>9.00 and ${price}<9.90

mod

모듈러스(나눈 후 나머지)

${question_one} mod ${question_two}

or

또는

${price}=9.80 or ${price}=9.70

함수

Survey123에 지원되는 함수는 다음과 같습니다.

함수설명예시

boolean(question, expression, or value)

제공된 값이 Null이 아니면 true를 반환합니다.

boolean-from-string()을 대신 사용하는 것을 권장합니다.

주의:

이 함수는 항상 Survey123 웹 앱에서 true를 반환합니다. 대안으로 빈 값을 참고하세요.

boolean(${question_one})

boolean-from-string()

지정된 문자열이 'true' 또는 '1'이면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

boolean-from-string(${question_one})

coalesce(value1, value2)

비어 있지 않은 첫 번째 값을 반환합니다. 이 함수는 두 개의 값만 지원합니다.

coalesce(${question_one}, ${question_two})

concat(value1, value2, …)

문자열 값의 연결을 반환합니다.

concat(${question_one}, ' and ', ${question_two})

contains(string, substring)

지정된 문자열에 하위 문자열이 포함된 경우 true를 반환합니다.

contains(${question_one}, 'red')

count(repeat)

반복 전반의 지정된 질문에 대한 응답 개수를 반환합니다. 자세한 내용은 집계 함수를 참고하세요.

비고:

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

count(${question})

count-selected(question)

select_oneselect_multiple 질문에 선택한 답변의 수를 반환합니다. 이 함수는 또한 다중 행 모양을 사용하여 이미지, 오디오, 파일 질문에 대한 첨부 파일 수를 반환합니다.

count-selected(${question_one})

date(question, expression, or value)

시간은 유지하지 않고 숫자 또는 문자열을 날짜 객체로 변환합니다.

date('2017-05-28T04:39:02+10:00')

date-time(question, expression, or string)

숫자 또는 문자열을 날짜 객체로 변환합니다.

date-time('2017-05-28T04:39:02+10:00')

decimal-date-time(question, expression, or string)

날짜 객체를 소수 날짜-시간 숫자로 변환합니다.

decimal-date-time(${date_question})

decimal-time(question, expression, or string)

시간 객체를 기기 표준 시간대의 시간(소수 형식)을 나타내는 숫자로 변환합니다.

decimal-time(${time_question})

ends-with(string, substring)

지정된 문자열이 하위 문자열로 끝나는 경우 true를 반환합니다.

ends-with(${question_one}, 'hand.')

false()

False

false()

format-date()

기존 날짜 또는 시간 값을 정의된 형식에 맞춥니다.

format-date(${previous_time}, '%H:%M')

if(condition, a, b)

조건이 true를 평가하면 a;를 반환하고 그렇지 않으면 b를 반환합니다.

if(selected(${question_one}, 'yes') and selected(${question_two}, 'yes'), 'yes', 'no')

indexed-repeat(질문, 반복, 색인 번호)

반복 레코드에서 특정 질문의 값을 반환합니다. 자세한 내용은 반복을 참고하세요.

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

int(question, expression, or value)

정수로 변환합니다. 변환은 데이터 유형에 따라 다릅니다.

비고:

이 함수가 비어 있는 경우 NaN을 반환하며 질문은 빈 상태로 남게 됩니다.

int(${question_one})

join(separator, question)

반복 내 지정된 질문에 대한 모든 답변을 지정된 구분 기호로 구분하여 연결합니다.

join(',', ${question_in_repeat})

jr:choice-name(choice_name, 'question')

단답형(select_one) 질문에 사용됩니다. 지정된 질문의 선택 항목 이름과 연관된 레이블을 반환합니다. 질문은 따옴표 안에 정의해야 합니다.

jr:choice-name(${select_one}, '${select_one}')

select_multiple 질문에 사용됩니다. 지정된 질문의 선택 항목 이름과 연관된 레이블을 반환합니다. 개별 답변에 대한 레이블을 추출하는 데 selected-at() 함수를 사용해야 합니다. 질문은 따옴표 안에 정의해야 합니다.

jr:choice-name(selected-at(${select_multiple}, 3), '${select_multiple}')

max(value1, value2, ...)

반복 전반의 지정된 범위 즉 단일 질문의 최대값을 반환합니다.

max(${question_one}, ${question_two})

min(value1, value2, ...)

반복 전반의 지정된 범위 즉 단일 질문의 최소값을 반환합니다.

min(${question_one}, ${question_two})

not(expression)

식이 true를 반환하면 false 값을 반환하고 식이 false를 반환하면 true 값을 반환합니다.

not(selected(., 'yes'))

now()

이 인스턴트의 타임스탬프를 반환합니다. 이 함수는 시간 및 날짜와 시간 질문에 사용됩니다. 날짜 질문의 today()와 동일하게 작동합니다.

now()

number(question, expression, or value)

숫자로 변환합니다. 변환은 데이터 유형에 따라 다릅니다.

비고:

이 함수가 비어 있는 경우 NaN을 반환하며 질문은 빈 상태로 남게 됩니다.

number(${question_one})

once()

질문에 값이 이미 있으면 기존 값을 반환합니다. 이 함수는 양식에서 반복 레코드를 탐색할 때 값이 변경되지 않도록 하기 위해 반복 질문에 random() 또는 uuid()를 사용하는 경우에 유용합니다.

once(uuid())

position(..)

반복 안에 있는 현재 레코드의 색인을 반환합니다. 자세한 내용은 반복을 참고하세요.

position(..)

pulldata()

외부 CSV 파일에서 값을 반환합니다. 자세한 내용은 CSV에서 값 가져오기를 참고하세요.

pulldata('users', 'email', 'name', ${respondent_name})

pulldata("@exif")

이미지의 EXIF 메타데이터에서 값을 반환합니다. 자세한 내용은 이미지 메타데이터 추출을 참고하세요.

pulldata("@exif", ${photo}, "GpsLatitude")

pulldata("@geopoint")

지오포인트 질문에서 값을 반환합니다. 자세한 내용은 지오포인트 값 추출을 참고하세요.

pulldata("@geopoint", ${location}, "horizontalAccuracy")

pulldata("@javascript")

양식에서 JavaScript 함수를 실행하고 결과를 반환합니다. 자세한 내용은 현장조사 양식의 JavaScript 함수를 참고하세요.

pulldata("@javascript", "functions.js", "uniqueID", ${buildings})

pulldata("@json")

JSON 객체에서 값을 반환합니다. 자세한 내용은 JSON에서 값 가져오기를 참고하세요.

pulldata("@json", ${json_output}, "attributes.ZIP_CODE")

pulldata("@layer")

ArcGIS 피처 레이어, 피처 테이블 또는 쿼리 지원 맵 서비스를 쿼리하고 결과를 반환합니다. 자세한 내용은 피처 레이어 쿼리를 참고하세요.

pulldata("@layer", "getRecordAt", "https://services.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/World_Time_Zones/FeatureServer/0", ${location})

pulldata("@property")

기기 또는 로그인한 사용자에 대한 정보를 반환합니다. 자세한 내용은 기기 및 사용자 등록정보를 참고하세요.

pulldata("@property", 'username')

random()

0(포함)에서 1(제외) 사이의 무작위 값을 반환합니다.

random()

regex()

질문의 입력에 정규식을 적용합니다. 패턴이 일치하는 경우 true를 반환합니다. 자세한 내용은 정규식을 참고하세요.

regex(., '^\d{5}$')

selected(question, value)

답변을 선택했는지 확인합니다. 이 함수는 단답형선다형 질문에 사용됩니다.

selected(${question_one}, 'a')

selected-at(question, number)

select_multiple 질문에 사용됩니다. 지정된 숫자에 대한 선택 항목의 이름을 반환하며 계산은 0에서부터 시작합니다. 예를 들어 '2'의 경우 세 번째 선택 항목을 반환합니다.

selected-at(${question_one}, 2)

starts-with(string, substring)

지정된 문자열이 하위 문자열로 시작하는 경우 true를 반환합니다.

starts-with(${question_one}, 'The')

string(question, expression, or value)

문자열로 변환합니다. 변환은 데이터 유형에 따라 다릅니다.

string(${question_one})

string-length(question, expression, or value)

비어 있지 않은 문자열의 길이를 반환합니다.

string-length(${question_one})

substr(question, start, end)

특정 시작의 하위 문자열 시작을 반환하고 지수 끝 -1의 문자로 확장합니다. 여기서 시작과 끝이 0에서 시작합니다.

substr(${question_one}, 1, 2)

sum(repeat)

반복 전반의 지정된 질문에 대한 모든 응답의 합을 반환합니다. 자세한 내용은 집계 함수를 참고하세요.

비고:

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

sum(${question})

today()

현지 정오로 내부에 저장되어 있는 오늘 날짜를 반환합니다. 이 함수는 날짜 질문에 사용됩니다.

today()

true()

True

true()

uuid()

무작위 UUID 문자열을 반환합니다.

uuid()

version()

설정 워크시트에 정의된 설문조사의 버전을 반환합니다.

version()

Survey123에서는 다음과 같은 계산 함수가 지원됩니다.

함수설명예시

acos(value)

값의 아크 코사인을 반환합니다.

acos(${question_one})

asin(value)

값의 아크 사인을 반환합니다.

asin(${question_one})

atan(value)

값의 아크 탄젠트를 반환합니다.

atan(${question_one})

atan2(value1, value2)

값의 몫에 대한 아크 탄젠트를 반환합니다.

atan2(${question_one}, ${question_two})

cos(value)

값의 코사인을 라디안 단위 각도로 반환합니다.

cos(${question_one})

sin(value)

값의 사인을 라디안 단위 각도로 반환합니다.

sin(${question_one})

tan(value)

값의 탄젠트를 라디안 단위 각도로 반환합니다.

tan(${question_one})

exp(value)

값의 자연 지수를 반환합니다.

exp(${question_one})

exp10(value)

10의 거듭제곱 값을 반환합니다.

exp10(${question_one})

log(value)

값의 자연 로그를 반환합니다.

log(${question_one})

log10(value)

값의 상용 로그를 반환합니다.

log10(${question_one})

pi()

pi를 반환합니다.

pi()

pow(value, power)

지정된 값으로 거듭제곱한 값을 반환합니다.

pow(${question_one}, 3)

round(value, power)

반올림 값을 반환합니다.

round(${question_one}, 5)

sqrt(value)

값의 제곱근을 반환합니다.

sqrt(${question_one})

제약 조건

현장조사 질문에 제약 조건을 추가하여 응답으로 허용되는 입력을 제한합니다. 특정 범위의 숫자, 문자와 숫자의 조합 또는 일반 패턴 매칭 등이 제약 조건에 포함됩니다. 스프레드시트에서 제약 조건 식은 제약 조건 필드에 입력되며 정보 텍스트는 현장조사 워크시트의 constraint_message 열에 입력됩니다. 제약 조건 식에서 질문에 대한 입력은 항상 마침표로 표현됩니다.

예를 들어 다음 수식을 사용하여 정수 필드의 입력을 양수로만 제한할 수 있습니다.

.>= 0

다음 수식이 date 필드에 적용된 경우에는 사용자가 오늘 이전의 값을 입력하지 못하게 됩니다.

.>= today()

제약 조건에서 계산을 사용할 수도 있습니다. 다음 수식은 사용자가 오늘부터 14일 이후의 날짜까지만 선택할 수 있도록 하는 계산을 수행합니다.

(.>= today()) and (.<=(today() + (1000 * 60 * 60 * 24 * 14)))

팁:

수식에 -1~1의 소수 값이 포함된 경우에는 예기치 않은 오류를 방지하기 위해 값에 선행 0을 포함합니다. 선행 0이 없으면 소수점을 연산자 .(또는 -.)으로 착각할 수 있습니다. 예를 들어 다음 식은 잘못된 것입니다.

.> .25 and .< 24.25

다음 식은 정상적으로 실행됩니다.

.> 0.25 and .< 24.25

정규식

정규식은 문자열에서 패턴을 일치시키는 데 사용되는 문자의 시퀀스입니다. Survey123에서 패턴이 일치하면 식이 true를 반환하고 패턴이 일치하지 않으면 식이 false를 반환합니다.

정규식을 사용하여 다양한 패턴 매칭을 통해 제공된 형식으로 유효한 응답을 제한하거나, 특정 콘텐츠가 포함되도록 할 수 있습니다. 다음 예시에서는 질문에 대한 응답에 도로라는 단어가 포함되어 있어야 합니다.

regex(., 'road')

현재 필드 식에 예시의 시작이 사용된 기간을 적용합니다. 다른 필드의 이름을 그 자리에 추가하는 경우 해당 필드에 정규식을 대신 적용하며, 이는 관련식에 적합합니다. 쉼표는 이 필드 정의와 식 간의 구분 기호로 사용됩니다.

이 정규식을 사용하면 응답이 도로라는 단어와 정확하게 매칭(이 단어 앞 또는 뒤에 아무것도 없음)됩니다.

regex(., '^road$')

정규식은 질문의 입력을 표준 형식으로 제한하는 데 적합합니다. 다음 예시에서는 5자리의 미국 우편 번호 입력만 허용됩니다.

regex(., '^\d{5}$')

다음 예시에서는 응답을 다음 사진과 같은 현재 인도네시아 자동차 번호판 형식과 매칭합니다.

표준 인도네시아 자동차 번호판

regex(., '^[A-Z]{1,2}\d{4}[A-Z]{2,3}$')

대충 표준화된 형식에는 복잡한 정규식이 필요할 수 있습니다. Survey123 웹 앱에서 사용하는 이 정규식은 이메일 주소의 형식과 일치하도록 문자열 필드 입력을 제한합니다.

regex(., '^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$')

위의 식을 수정한 다음 식은 영어가 아닌 문자를 허용하며 이메일 주소의 형식과 일치하도록 입력을 제한합니다.

regex(., '^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\u0400-\uffff\-0-9]+\.)+[a-zA-Z\u0400-\uffff]{2,}))$')

Survey123 웹 앱에서 정규식을 사용하기도 하는 이 예시는 웹 주소의 형식과 일치하는 응답만 수락하도록 필드를 제한합니다.

regex(., '^((https?|ftps?)\://|)(((?:(?:[\da-zA-Z](?:[-\da-zA-Z]{0,61}[\da-zA-Z])?)\.)+(?:[a-zA-Z](?:[-\da-zA-Z]{0,61}[\da-zA-Z])?)\.?)|localhost)(\:\d+)?(/(?:[^?#\s/]+/)*(?:[^?#\s/]+(?:\?[^?#\s/]*)?(?:#[A-Za-z][\w.:-]*)?)?)?')

정규식에 대한 자세한 내용은 Mozilla Developer Network 설명서를 참조하세요. 정규식에 사용되는 문자와 해당 함수 목록은 Survey123 템플릿의 참조 워크시트 또는 빠른 참조를 참고하세요.

계산

계산은 질문의 계산 열에서 수행됩니다. 보통 계산은 계산 유형의 질문과 연관되지만 정수, 소수, 텍스트, 단답형 질문에 적용될 수도 있습니다. 계산 질문의 필드 이름을 참조하여 관련성 또는 제약 조건 식을 계산 결과로 채울 수 있습니다.

계산 질문 유형은 숨겨지며 양식에 나타나지 않습니다. 따라서 피처 레이어에는 포함되지만 양식에 나타날 필요가 없는 값을 보관하는 데 이 질문 유형을 사용할 수도 있습니다.

예를 들어, 계산 유형 질문을 생성하여 이름을 calc로 지정한 다음 계산 열에 다음 식을 삽입합니다.

${question_1} + ${question_2} + ${question_3}

그 결과를 사용하여 다음 질문의 관련성을 설정합니다.

${calc} <= 100

계산은 date 필드의 응답에 사용할 수 있습니다. 다음 계산은 입력된 날짜와 오늘 날짜 간의 년 수를 계산하며 이러한 수식은 나이를 계산하는 데 적합합니다.

int((today() - ${birth_date}) div (1000 * 24 * 60 * 60 * 365.25))

값의 일부만 필요하거나 전체 답의 잘려진 버전이 필요한 경우도 있습니다. substr 연산자는 문자열의 일부(이 연산자 다음에 선언된 숫자에 의해 정의됨)만 반환합니다. 첫 번째 문자는 선택할 첫 지점을 지정하며 두 번째 값은 길이를 지정합니다(두 번째 값이 없는 경우에는 문자열 끝까지 반환됨). 다음 예시에서 substr 연산자는 문자열의 10번째 문자에서 15번째 문자까지를 제외한 나머지 부분을 제거합니다.

substr(${previous_question}, 10, 15)

첫 번째 숫자가 음수이면 substr은 문자열의 처음부터가 아니라 끝부터 수를 셉니다. 다음 예시는 답변의 마지막 다섯 자만 반환합니다.

substr(${previous_question}, -5)

calculationMode 매개변수를 사용하여 양식에서 계산 시점을 제어할 수 있습니다. 자세한 내용은 계산 모드를 참고하세요.

반복의 집계 함수에 계산 열을 사용할 수도 있습니다. 자세한 내용은 반복을 참고하세요.

계산을 사용하는 경우 다음 모범 사례를 따릅니다.

  • random()을(를) 사용할 때는 결과로 0이 반환되지 않도록 하기 위해 상수를 추가해야 합니다(예: random()+0.5). 값이 0일 경우 빈 답이 생성됩니다.
  • 제약 조건에서와 같이, 수식에 -1~1의 모든 소수 값이 포함된 경우에는 오류를 방지하기 위해 값에 선행 0을 포함해야 합니다.
  • 계산 결과의 데이터 유형은 각 계산 요소의 데이터 유형에 의해 좌우됩니다. 즉, 두 정수에 대한 계산이 수행될 경우 계산 결과는 정수입니다. 계산에 문자열 데이터 유형이 포함되어 있으면 + 연산자는 값을 더하는 대신 값을 연결합니다. 예기치 않은 결과를 방지하려면 number() 함수를 사용하여 계산의 문자열 값이 숫자로 처리되도록 해야 합니다. 예를 들어 question1(정수 유형)과 question2(텍스트 유형)를 더하는 계산은 ${question1} + number(${question2})입니다.
팁:

계산 질문의 XLSForm 기본 바인딩 유형은 string입니다. 이 기본값을 덮어쓰려면 질문에 대한 bind::type 열에 필요한 유형(예시: int 또는 decimal)을 입력합니다. 또는 원하는 질문 유형(예시: integer 또는 decimal)을 사용하고 이 질문의 모양을 숨김으로 설정할 수 있습니다.

주의:

텍스트 질문에 수학적 함수 또는 연산자를 사용할 경우 Survey123NaN 웹 앱에 Survey123 결과가 반환됩니다. 텍스트 질문을 연결하려면 concat() 연산자 대신 + 함수를 사용합니다.

복합 수학 함수

계산 열에서는 좀 더 복잡한 수학 연산도 처리할 수 있습니다. 다음 예시에서는 파이(π) 및 거듭제곱 함수를 사용하여 반경이 주어진 부지의 면적을 파악합니다.

pi() * pow(${plot_radius}, 2)

나무의 높이를 측정하는 일반적인 방법은 관측 지점의 눈높이에서 나무 꼭대기까지의 각도 및 동일한 관측 지점에서 나무 밑동까지의 거리를 측정하는 것입니다. 나무 꼭대기까지의 각도를 도 단위로 측정한 경우 다음 계산을 사용하여 도를 라디안으로 변환합니다.

${angle_to_top_degrees} * (pi() div 180)

이제 라디안으로 각도를 측정하면 다음 계산을 통해 나무의 높이(소수점 두 자리로 반올림)를 파악할 수 있습니다.

round(((tan(${angle_to_top_radians}) * ${distance_to_tree}) + ${height_to_eyes}),2)

날짜 서식

format-date 필드에 calculation 함수를 사용하여 날짜 및 시간 값의 형식을 지정할 수 있습니다. 이는 날짜 부분을 사용자에게 표시하거나 문자열로 지속하려는 경우 유용할 수 있습니다.

이 예시에서 이전 시간 또는 날짜/시간 질문에 포함된 값은 24시간 내에 반환됩니다.

format-date(${previous_time},'%H:%M')

format-date 함수에 사용할 수 있는 한정자는 다음과 같습니다.

한정자설명

%3

0이 추가된 밀리초 표시(000-999)

%a

세 자리 문자 짧은 텍스트 일

%b

축약된 월 이름

%d

0이 추가된 일

%e

%h

시간(24시간)

%H

0이 추가된 시간(24시간)

%m

0이 추가된 월

%M

0이 추가된 분

%n

숫자로 된 월

%S

0이 추가된 초

%W

주수

비고:

%W 한정자는 날짜 질문에 계산이 사용되는 날짜 형식 함수에서 사용할 수 없습니다. 한정자는 기본값이 있는 날짜 질문에 사용할 수 있습니다.

%y

2자리 연도

%Y

4자리 연도

비고:

날짜와 시간 질문은 1분 미만의 시간 해상도를 지원하지 않습니다. 날짜가 1분 미만인 시간 해상도를 취득하려면 startend 질문을 사용하는 것이 좋습니다.

빈 값

다른 질문을 참조하는 제약 조건과 계산을 사용할 때에는 해당 질문이 비어 있는 경우(즉 답이 없음)에 어떻게 될지를 고려해야 합니다. 빈 값은 다음과 같이 표현됩니다.

  • 정수 및 소수 질문의 경우 NaN(숫자 아님)으로 표현됩니다. 이 값은 유효한 값이 없음을 나타내는 특수값입니다.
  • 텍스트 질문의 경우 ''(빈 문자열)로 표현됩니다. 단답형(select_one), 선다형(select_multiple), 순위, 숨김 질문의 기본 데이터 유형도 텍스트입니다. 단답형(select_one), 선다형(select_multiple), 숨김 질문 유형이 비어 있거나 사용자가 순위 질문을 변경하지 않았다면 이러한 질문 유형에는 빈 문자열이 포함됩니다.

값이 숫자인지 텍스트인지에 따라 계산 동작이 달라집니다.

정수 또는 소수 질문에서는 다음과 같이 동작합니다.

  • NaN 값이 포함된 수학 식은 완료되지 않고 질문은 빈 상태로 남습니다.
  • min() 및 max() 함수는 완료되며 NaN 값이 무시됩니다.
  • 다른 값과 비교한 NaN 값은 값 비교가 is not equal인 계산에서만 true입니다. 다른 모든 식에서는 false가 반환됩니다.

텍스트 질문에서는 다음과 같이 동작합니다.

  • 빈 값이 제공된 경우 텍스트 질문에 대한 연결이 완료됩니다. 예를 들어 concat("Hello" + ${firstName}, ", how are you?")의 경우 firstName 질문이 비어 있다면 "Hello , how are you?"이(가) 결과로 생성됩니다.
  • min() 및 max() 함수는 완료되며 빈 문자열이 무시됩니다.
  • 빈 텍스트 답은 다른 빈 텍스트 답과 같으며 비어 있지 않은 텍스트보다 항상 작습니다.

string-length 함수를 사용하여 질문이 비어 있는지 확인할 수 있습니다. string-length 함수는 모든 질문 유형에 사용할 수 있습니다. 예를 들어 string-length(${Question1})의 경우 0이 비어 있다면 Question1을 반환합니다.

또한 count-selected 함수를 사용하여 단답형(select_one) 또는 선다형(select_multiple) 질문이 비어 있는지 확인할 수 있습니다. 예를 들어 count-selected(${question2})의 경우 question2에 선택 사항이 없으면 0을 반환합니다.

선다형(select_multiple) 및 순위 질문

선다형(select_multiple) 및 순위 질문 유형에 대한 응답은 다른 모든 질문 유형과 다르게 저장됩니다. 선다형(select_multiple) 질문에서 선택한 각 답변은 선택된 순서대로 입력되며 쉼표로 구분됩니다. 예를 들어 답변 'A'와 'B'를 순서대로 선택하면 'A,B' 응답이 제공됩니다. 순위 질문에 대한 응답 또한 제출 시 최고 순위에서 최저 순위까지 선택 항목에 순위를 매겨 쉼표로 구분된 목록으로 저장됩니다.

일부 XLSForm 기능은 선다형(select_multiple) 및 순위 질문에 사용할 수 없습니다. 예를 들어 선다형 질문을 참조하는 질문의 관련성 열에 답변 'A'를 입력했는데 현장조사 응답이 'A,B'인 경우, 이 응답은 관련 응답으로 간주되지 않습니다. 이 경우 해결 방법은 selected() 함수를 사용하여 목록에 포함된 값이 값 중에 있는지 확인하는 것입니다.

다음 식을 질문의 관련성 열에 사용했다면 사용자가 참조된 선다형 질문의 응답 중 하나로 'A'를 선택한 경우 해당 질문을 표시합니다. 그 이외의 선다형 질문 응답이 이 동작을 변경하지 않습니다.

selected(${previous_question}, 'A')

CSV에서 값 가져오기

질문의 계산 열에 pulldata() 함수를 사용하면 CSV 파일의 데이터를 미리 불러올 수 있습니다. CSV 파일을 포함하는 데는 두 가지 방법이 있습니다. 파일을 현장조사의 media 폴더에 수동으로 저장하거나 ArcGIS에서 호스팅하는 .csv 파일에 연결하면 됩니다.

pulldata() 함수를 사용하려면 다음과 같은 4개 매개변수를 순서대로 지정해야 합니다.

  1. 값 목록이 포함되어 있는 CSV 파일의 이름. 이 이름에는 .csv 파일 이름 접두사가 포함되지 않습니다.
  2. 반환하려는 값이 포함되어 있는 CSV 파일 내 열의 이름.
  3. 값을 찾는 데 사용할 CSV 파일 내 키 필드의 이름.
  4. 키 필드에서 찾을 키 값.

이러한 값은 직접 정의하거나 현장조사의 다른 곳에서 정의된 변수를 통해 정의할 수 있습니다. 다음 예시의 계산에서는 info라는 이름의 CSV 파일에서 이전 질문을 통해 알아낸 사용자 이름의 이메일 주소를 반환합니다.

pulldata('info', 'email', 'name', ${respondent_name})

동일한 pulldata() 함수를 제약 조건 열에 사용하여 CSV 파일에 없는 답변은 사용자가 제출하지 못하도록 할 수도 있습니다. 이 동일한 수식이 제약 조건 열에 사용된 경우에는 CSV 파일의 이름 열에 없는 값은 양식에 허용되지 않습니다.

pulldata() 함수에는 몇 가지 제한 사항이 있습니다. 키 필드의 이름에는 선택 항목 워크시트의 이름 열과 같은 제한 사항이 있습니다. 즉, 이러한 값에는 ASCII 문자가 아닌 문자나 공백을 사용할 수 없습니다. 또한 이러한 값은 CSV 파일이므로 이러한 필드에 쉼표를 사용할 경우 pulldata() 함수에서 잘못된 결과가 생성됩니다.

CSV 파일의 값이 255자를 넘는 경우에는 CSV 콘텐츠로 채우려는 질문과 pulldata() 함수의 입력으로 사용되는 질문의 bind::esri:fieldLength 열에 더 큰 값을 입력해야 합니다. 이러한 필드 중 하나의 최대 길이보다 큰 값이 CSV 파일에 포함되어 있는 경우, 현장조사 응답 제출에 실패하며 코드 1000 오류가 표시됩니다.

비고:

pulldata() 함수는 선다형 질문의 값을 채우는 데 사용할 수 없습니다.

pulldata() 함수를 사용할 때 CSV 열 이름에는 공백, 하이픈, 기타 특수 문자를 포함할 수 없습니다.

최상의 결과를 위해, UTF-8 문자 인코딩을 사용하여 .csv 파일을 인코딩합니다. Microsoft Excel을 사용하여 .csv 파일을 생성하는 경우 CSV UTF-8로 저장합니다.

JSON에서 값 가져오기

pulldata("@json") 함수를 사용하여 JSON 객체에서 개별 속성을 추출할 수 있습니다. 이 함수는 pulldata("@javascript")pulldata("@layer")와 같은 기타 함수를 보완하는 데 주로 사용됩니다. 이 함수에는 다음과 같은 구문이 있습니다.

pulldata("@json", <question name>, "<JSON property>")

pulldata("@json")에 대한 매개변수는 다음과 같습니다.

  • question name - JSON 객체가 포함된 질문의 이름입니다. 예시: ${json_response}.
  • JSON property - JSON에서 가져오려는 속성입니다. JSON 구조에서 속성의 위치를 지정하려면 마침표를 사용하세요. 예를 들어, City 객체에서 address 속성을 가져오려면 "address.City"를 사용합니다.

다음 예시에서 역 지오코드 작업의 결과는 json_response라는 텍스트 질문에서 JSON으로 반환됩니다.

pulldata("@json") 계산이 있는 XLSForm

로케이터에서 다음과 유사한 응답이 반환됩니다.

{
	"address": {
		"Match_addr": "Eiffel Tower",
		"LongLabel": "Eiffel Tower, Paris, Île-de-France, FRA",
		"ShortLabel": "Eiffel Tower",
		"Addr_type": "POI",
		"Type": "Historical Monument",
		"PlaceName": "Eiffel Tower",
		"AddNum": "",
		"Address": "",
		"Block": "",
		"Sector": "",
		"Neighborhood": "Paris 07",
		"District": "Paris",
		"City": "Paris",
		"MetroArea": "",
		"Subregion": "Paris",
		"Region": "Île-de-France",
		"RegionAbbr": "",
		"Territory": "",
		"Postal": "",
		"PostalExt": "",
		"CntryName": "France",
		"CountryCode": "FRA"
	},
	"location": {
		"x": 2.294520000000034,
		"y": 48.85832000000005,
		"spatialReference": {
			"wkid": 4326,
			"latestWkid": 4326
		}
	}
}

pulldata("@json") 함수는 City 객체에서 address 속성을 가져오는 데 사용됩니다.

pulldata("@json", ${json_response}, "address.City")

location 객체에서 위도 및 경도를 가져옵니다.

pulldata("@json", ${json_response}, "location.x")

pulldata("@json", ${json_response}, "location.y")

비고:
마침표는 상위 객체의 개별 속성에 접근하는 데 사용됩니다. 마침표가 속성의 일부 또한 구성하는 경우 이를 대괄호 [ ]로 묶어야 합니다. 예를 들어, City.Population 객체에서 address이라는 이름의 속성을 가져오려면 식은 pulldata("@json", ${json_response}, "address.[City.Population]").입니다.

피처 레이어 쿼리

pulldata("@layer") 함수를 사용하여 피처 레이어, 피처 테이블 또는 쿼리 지원 맵 서비스를 쿼리할 수 있습니다. 속성 쿼리 또는 공간 쿼리를 수행할 수 있습니다. 속성 쿼리는 getRecord 또는 getValue 연산을 사용합니다.

pulldata("@layer", "getRecord", "<URL>", "<WHERE clause>")
pulldata("@layer", "getValue", "<JSON property>", "<URL>", "<WHERE clause>")

공간 쿼리는 getRecordAt 또는 getValueAt 연산을 사용합니다.

pulldata("@layer", "getRecordAt", "<URL>", <location>, "<WHERE clause>")
pulldata("@layer", "getValueAt", "<JSON property>", "<URL>", <location>, "<WHERE clause>")

getRecordgetRecordAt 연산은 단일 피처와 모든 해당 속성을 포함하는 JSON 피처 객체를 반환합니다. getValuegetValueAt 연산은 전체 쿼리 응답 대신 피처 객체에서 단일 값을 반환합니다.

pulldata("@layer")에 대한 매개변수는 다음과 같습니다.

매개변수설명
JSON property

getValuegetValueAt 연산에 필요합니다. 쿼리 응답에서 검색할 값입니다.

예시: "attributes.COUNTRY"

location

getRecordAtgetValueAt 연산에 필요합니다. 피처 레이어로 쿼리할 포인트 위치입니다. 이는 지오포인트 질문이어야 합니다.

예시: ${location}

URL

필수입니다. 쿼리할 피처 레이어 또는 테이블의 URL입니다. 이 매개변수는 추가 요청 매개변수를 수락합니다.

예시: "https://services.arcgis.com/P3ePLMYs2RVChkJx/ArcGIS/rest/services/World_Countries/FeatureServer/0"

WHERE clause

선택 사항입니다. 피처 레이어 또는 테이블을 필터링하는 WHERE 식입니다. WHERE 절이 제공되지 않으면 기본값인 "1=1"이 사용됩니다.

예시: "COUNTRY='Canada'"

팁:

pulldata("@layer") 함수는 쿼리 응답의 첫 번째 레코드를 반환합니다. 원하는 결과를 얻을 수 있도록 쿼리를 설계하고 테스트합니다. WHERE 절 및 아래에 설명된 추가 요청 매개변수를 사용하여 쿼리를 세부 조정할 수 있습니다.

pulldata("@layer") 함수는 효율성을 위해 쿼리 응답을 캐시합니다. 캐시를 무효화하고 함수가 실행될 때마다 새 요청을 하려면 URL에 time=now 매개변수를 추가합니다(예시: concat(${layer_url}, "?t=", now())).

다음 예시는 세계 표준 시간대의 폴리곤 피처 레이어를 쿼리하고 지오포인트가 있는 표준 시간대를 반환합니다.

pulldata("@layer") 계산이 포함된 XLSForm

getRecordAt 연산은 다음 구문을 사용하여 지오포인트가 교차하는 표준 시간대를 검색하는 데 사용됩니다.

pulldata("@layer", "getRecordAt", "https://services.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/World_Time_Zones/FeatureServer/0", ${location})

그런 다음 pulldata("@json") 함수를 사용하여 쿼리 응답에서 ZONE 속성을 추출합니다. 또는 쿼리 응답을 저장하기 위한 별도의 질문 없이 getValueAt 계산의 pulldata("@layer") 연산을 사용하여 ZONE 속성을 직접 검색할 수 있습니다. 다음 예시를 참고하세요.

pulldata("@layer", "getValueAt", "attributes.ZONE", "https://services.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/World_Time_Zones/FeatureServer/0", ${location})

제약 조건에서 pulldata("@layer")를 사용할 수 있습니다. 예를 들어 사용자가 관심 영역 외부의 위치를 ​​제출하지 못하도록 지오포인트 질문에 제약 조건을 적용할 수 있습니다.

pulldata("@layer") 제약 조건이 있는 XLSForm

getRecordAt 연산은 다음 구문을 사용하여 지오포인트가 있는 국가에 대한 JSON 피처 객체를 반환합니다.

pulldata("@layer", "getRecordAt", "https://services.arcgis.com/P3ePLMYs2RVChkJx/ArcGIS/rest/services/World_Countries/FeatureServer/0", ${location}, "COUNTRY='Canada'")

pulldata("@json")를 사용하여 텍스트 질문에서 국가 이름을 추출합니다. 그런 다음 해당 위치가 캐나다 지역에 속하도록 지오포인트 질문에 ${country}='Canada'의 제약 조건이 적용됩니다.

요청 매개변수

pulldata("@layer"), distance, orderByFields과 같은 추가 요청 매개변수를 사용하여 resultOffset 쿼리를 세부 조정할 수 있습니다. 요청 매개변수에 대한 자세한 내용은 쿼리(피처 서비스/레이어)를 참고하세요. pulldata("@layer") 함수는 피처 객체를 반환하는 요청만 지원합니다.

쿼리에 해당 매개변수를 포함하려면 물음표 뒤 URL에 추가합니다. 추가 매개변수는 앰퍼샌드로 구분됩니다. 다음 예시에서 orderByFieldsresultOffset 매개변수를 피처 레이어 URL에 추가하여 캘리포니아에서 10번째로 인구가 많은 카운티의 이름을 반환합니다.

pulldata("@layer", "getValue", "attributes.NAME", "https://services5.arcgis.com/jMCHJcLe13FaKCFB/arcgis/rest/services/US_Counties/FeatureServer/1?orderByFields=POPULATION DESC&resultOffset=9", "STATE_NAME = 'California'")

집계된 쿼리는 outStatistics 매개변수를 사용하여 피처 레이어에 대한 통계를 반환하는 데 사용할 수 있습니다. 이 매개변수로 계산할 수 있는 통계에는 개수, 합계, 최소값, 최대값, 평균, 표준편차, 분산이 포함됩니다.

다음 예시에서는 선택한 주의 카운티 개수가 반환됩니다.

pulldata("@layer", "getValue", "attributes.TotalCount", "https://services5.arcgis.com/jMCHJcLe13FaKCFB/arcgis/rest/services/US_Counties/FeatureServer/1?outStatistics=[{"statisticType": "count","onStatisticField": "objectId","outStatisticFieldName": "TotalCount"}]'), concat("STATE_NAME = '", ${state_name}, "'"))

다음 예시에서는 선택한 주의 모든 카운티에 대한 인구 필드의 합계가 반환됩니다.

pulldata("@layer", "getValue", "attributes.TotalPopulation", "https://services5.arcgis.com/jMCHJcLe13FaKCFB/arcgis/rest/services/US_Counties/FeatureServer/1?outStatistics=[{"statisticType": "sum","onStatisticField": "POPULATION","outStatisticFieldName": "TotalPopulation"}]'), concat("STATE_NAME = '", ${state_name}, "'"))

비고:

pulldata("@layer") 함수는 다음을 제외하고 쿼리(피처 서비스/레이어)에 나열된 모든 요청 매개변수를 지원합니다.

  • f
  • outFields
  • outSR
  • resultRecordCount
  • returnCountOnly
  • returnGeometry
  • returnIDsOnly
  • token