보고서 쿼리

Survey123 웹사이트의 보고서 기능을 사용하면 개별 현장조사 응답에 대한 상세한 보고서를 생성하고, 여러 응답 간에 데이터를 요약하고, 결과를 집계할 수 있습니다. 이 항목에서는 쿼리를 사용하여 결과를 요약하고 집계하여 요약 섹션에 제공하는 방법에 대해 설명합니다.

요약 기능은 동시에 인쇄된 다른 보고서의 비용을 초과하여 크레딧을 사용하지 않습니다.

요약 섹션 추가

보고서에 요약 섹션을 포함하려면 요약 태그를 보고서 템플릿에 포함하세요. 요약 섹션은 보고서에 여러 레코드가 선택된 경우 한 번만 생성되는 반면 보고서 템플릿의 나머지 부분은 각 레코드에 대해 생성됩니다. 이 작업은 다음 구문을 사용하여 수행됩니다.

$<$summary>
...
$</>

요약 섹션은 보고서의 시작 및 끝 지점에 배치할 수 있지만, 보고서의 본문에는 배치할 수 없습니다. 예를 들어 템플릿에 제목이 포함되는 경우 이 제목은 보고서 시작 부분의 요약 섹션 내에 배치하거나, 요약 섹션이 닫힌 후에 배치해야 합니다.

맵이 요약 섹션에 포함되어 있는 경우 모든 입력 레코드의 모든 지오메트리가 단일 맵에 인쇄됩니다. 추가 구문을 사용하여 표시되는 지오메트리를 추가로 지정할 수도 있습니다. 다음 예시를 참고하세요.

  • ${inspectionLocation | size:400:300} - 모든 입력 레코드를 표시합니다.
  • ${inspectionLocation | orderByFields:"creationDate DESC" | resultRecordCount:3 | size:400:300} - 모든 입력 레코드 중 가장 최근의 레코드 3개를 표시합니다.
  • ${$shape | where:"1=1 !important" | drawingInfo:"currentLayer" | size:400:300} - 기본 레이어의 그리기 정보를 사용하여 기본 레이어의 모든 지오메트리를 인쇄합니다.
비고:

요약 섹션에서 첨부 파일 이름 및 크기는 제외하고 첨부 파일에서 등록정보 검색을 포함한 맵 또는 이미지 인쇄는 반복 이외에만 지원됩니다. 그렇지 않으면 오류 메시지가 표시됩니다.

다음 테이블에는 통계를 표시하거나 보고서 데이터의 표현을 구체화하는 데 유용한 지원 메소드가 포함되어 있습니다.

메소드설명예시

위치

특정 기준에 맞는 레코드만 반환합니다.

${#mainLayer | where:"status='broken'"}...${/}

통계

레이어의 특정 레코드에서 파생된 집계 함수입니다.

${mainLayer | where:"status='broken'" | stats:"count,objectId"}

orderByFields

보고서의 인쇄된 레코드를 하나 이상의 필드를 기준으로 오름차순 또는 내림차순으로 정렬합니다.

${#mainLayer | orderByFields:"state_name ASC,POP2000 DESC"}...${/}

resultRecordCount

인쇄할 특정 레코드 수를 설정합니다.

${#mainLayer | resultRecordCount:3}...${/}

returnDistinctValues

true로 설정하면 outFields와 함께 사용되는 경우 고유 값을 반환합니다. 이 메소드는 count 통계 유형과 함께 사용되는 경우 필드의 고유 값 개수를 반환합니다.

${#mainLayer | outFields:"status" | returnDistinctValues:true}...${/} 또는 ${mainLayer | stats:"count,stateName" returnDistinctValues:true}

outFields

returnDistinctValues와 함께 사용하여 필드 또는 필드 조합의 고유 값을 가져옵니다. 이 메소드는 쉼표로 구분된 필드 목록을 허용합니다.

${#mainLayer | outFields:"status" | returnDistinctValues:true}...${/}

집계 함수

요약 섹션은 보고서 템플릿의 모든 식을 허용할 뿐만 아니라, 많은 집계 함수를 사용할 때 적합합니다. 해당 함수를 사용하면 보고서를 위해 인쇄되는 모든 응답의 파생 결과를 반환할 수 있습니다. 이러한 함수는 전체 피처 레이어의 결과를 반환하지는 않습니다. 단 보고서가 모든 피처에 대해 생성되거나 추가 구문에 설명된 !important 한정자가 사용된 경우는 예외입니다. 집계 함수는 개별 보고서뿐만 아니라 반복에도 사용할 수 있습니다.

팁:

보고서를 미리 보는 경우 샘플 보고서 미리보기는 한 번에 최대 20개의 결과만 인쇄하지만 집계 함수는 인쇄하기로 선택한 모든 응답의 결과를 생성합니다.

요약 섹션에서 값을 추출 및 집계하려면 추출하려는 값의 필드 이름으로 레이어 또는 반복 이름을 정의해야 합니다. Survey123 웹디자이너에서 생성된 현장조사의 경우 현장조사에 사용되는 기본 레이어 이름은 survey입니다. 현장조사 응답에 사용되는 레이어 이름은 템플릿 관리 대화 상자에 제공되는 빠른 참조에서 찾을 수 있습니다.

집계 함수는 stats라는 필터를 사용하여 제어할 수 있습니다. 필터는 피처 서비스 쿼리와 동일하게 작동하며, 다음 형식을 사용합니다.

${layerName | stats:"outStatistics":"groupByFieldsForStatistics":"havingClause"}

outStatistics 매개변수는 사용되는 통계 연산과 필드를 정의하고, 요약 보고서를 위해 간소화되며, 세 개의 매개변수를 쉼표로 구분된 목록으로 허용합니다. 순서대로 다음을 정의하세요.

  • 통계 유형.
  • 결과를 가져올 질문입니다.
  • 필요에 따라 결과 계산의 필드 이름을 포함하세요. 이렇게 하면 필드 이름이 다른 현장조사 질문과 동일한 방식으로 다른 위치에서 참조될 수 있습니다.

groupByFieldsForStatisticshavingClause 매개변수는 피처 서비스 쿼리에서와 동일한 값을 허용하며, 선택 사항이므로 필요하지 않을 경우 생략할 수 있습니다.

다음 예시는 pop2000라는 질문에 제공된 모든 결과의 합계를 생성합니다.

${mainLayer | stats:"sum,pop2000"}

지원되는 통계 유형은 다음과 같습니다.

설명

avg

모든 응답 평균

count

응답 수

sum

총 응답 수

stddev

평균의 표준편차

min

질문에 대한 가장 낮은 응답

max

질문에 대한 가장 높은 응답

var

평균의 편차

range

모든 응답의 값 범위(최대 - 최소)

first

질문의 첫 번째 응답

last

질문의 마지막 응답

median

모든 응답의 중앙값

세미콜론으로 구분하여 여러 개의 outStatistics 매개변수를 설정할 수 있습니다. 여러 개의 매개변수를 사용하면 쿼리가 일련의 결과를 출력합니다. 다음 예시에서는 인구 총소득 및 평균 소득이 모두 기본 레이어의 레코드에서 계산되어 표시됩니다.

${#mainLayer | stats:"sum,pop2000,populationTotal;avg,income,averageIncome"}
Population total: ${populationTotal} 
Average income: ${averageIncome}
${/}

선택한 값 포함

질문의 개별 값은 개별 보고서의 반복에 사용되는 것과 동일한 기능을 사용하여 인쇄할 수 있습니다. 선택한 값만 가져오도록 필터를 구성하면 현장조사에서 가져온 특정 정보로 요약을 보강할 수 있습니다.

비고:

개별 보고서에서 필터를 사용하면 개별 레코드가 필터의 기본 컨텍스트로 사용됩니다. 추가 구문을 사용해 원하는 결과를 생성해야 할 수도 있습니다.

다음은 선택한 정보만 사용하는 필터 예시이며, 각 요소에 대한 설명이 뒤에 나와 있습니다.

평균 인구기관 이름

${#All_Orgs | stats:"avg,POP,AvgPOP":"Org_NAME":"AVG(POP)>200" | orderByFields:"AvgPOP DESC" | resultRecordCount:5}${AvgPOP | round:2}

${Org_NAME}${/}

  • #All_Orgs - 필요한 데이터에 대해 참조되는 특정 레이어입니다. 이 이름은 stats 필터뿐만 아니라 응답 데이터를 가져올 영역의 선언을 시작합니다.
  • "avg,POP,AvgPOP" - 통계 필터에 대한 outStatistics 매개변수입니다. 이 경우에는 POP라는 질문의 평균 응답 수를 반환한 후 AvgPOP라는 필드에 저장합니다.
  • "Org_NAME" - 통계 필터에 대한 groupByFieldsForStatistics 매개변수입니다. Org_NAME이라는 질문의 응답에 따라 평균 응답을 그룹화합니다.
  • "AVG(POP)>200" - 통계 필터에 대한 havingClause 매개변수입니다. 이 경우 평균 인구가 200명이 넘는 응답만 포함됩니다.
  • orderByFields:"AvgPOP DESC" - orderByFields 필터는 특정 필드의 콘텐츠에 기반하여 응답을 나열합니다. 이 경우 응답은 outStatistic 매개변수가 생성한 AvgPOP 필드에 따라 내림차순으로 나열됩니다.
  • resultRecordCount:5 - resultRecordCount 필터는 응답을 특정 개수로 제한합니다. 이 경우에는 5입니다.
  • ${AvgPOP | round:2} - AvgPOP 필드의 콘텐츠로, 소수점 이하 두 자리로 반올림됩니다. 요약에 표시할 첫 번째 셀의 유일한 요소입니다. 통계 필터 자체는 표시되지 않습니다.
  • ${Org_NAME} - 현장조사 응답의 Org_NAME 필드 콘텐츠입니다.
  • ${/} - 응답 데이터를 가져올 영역의 선언을 종료합니다. 이러한 모든 정보는 테이블에만 존재하기 때문에 이 영역의 시작과 끝은 동일한 테이블 내에서 선언되어야 합니다.

이 필터의 결과는 테이블에 5개 행의 응답을 표시하고 필요한 행을 추가합니다. 결과 요약 보고서는 다음과 같은 모습입니다.

평균 인구기관 이름

2360.23

A

1639.75

C

1179.7

B

915.93

D

795.57

E

추가 구문

현장조사에 대한 필터를 구성하는 데 사용되는 위의 매개변수 외에도 추가 매개변수와 한정자를 사용하여 쿼리를 보강할 수 있습니다.

  • where - 레이어의 필드에서 동작하는 적법한 SQL WHERE 절입니다.
    • 명시적 값 - 예를 들어 where:"weather='sunny'"는 필터에서 weather 필드가 sunny 값과 정확히 일치하는 응답만 사용하게 합니다.
    • 필드 콘텐츠 - 예를 들어 where:"weather='"+cloudCover+"'"cloudCover 필드의 콘텐츠를 weather 필드의 요건으로 사용합니다.
    • 추가 매개변수 - 예를 들어 where:"weather='"+cloudCover+"' AND temperature='high'"는 날씨가 cloudCover 필드와 일치하고 온도 필드가 high 값과 정확히 일치하는 응답을 사용합니다.
  • !important - 이 한정자는 모든 필터에 추가할 수 있지만, resultRecordCount의 경우 필터가 반환하는 값에 대한 모든 제약 조건을 무시합니다. 예를 들어 지난 7일 동안의 보고서만 인쇄하는 경우 where:"weather='sunny' !important"는 필터에서 weather 필드가 sunny 값과 정확히 일치하는 응답만 사용하게 하지만, 인쇄를 위해 선택한 응답뿐만 아니라 피처 레이어의 모든 해당 응답에서 값을 가져옵니다.
  • $inputParams - 이 플레이스 홀더는 모든 필터 내에서 사용할 수 있지만, resultRecordCount의 경우 보고서를 인쇄할 때 Survey123 웹사이트에서 설정한 매개변수를 참조합니다. 그런 다음 매개변수를 더욱 한정하여 응답 범위를 좁힐 수 있습니다. 예를 들어 orderByFields:"$inputParams, objectid DESC"의 경우 Survey123 웹사이트에서 설정된 정렬 방법을 사용한 후 매개변수가 일치하는 모든 필드에 대한 객체 ID 값을 기준으로 내림차순으로 필드를 정렬합니다. 또한 $inputParams를 사용해 이러한 매개변수를 반복에 적용할 수 있습니다.
비고:

where가 다른 필터와 사용되는 경우에는 where, stats, orderByFields, resultRecordCount 순서로 구현해야 합니다.