Запросы отчетов

Функционал создания отчетов веб-сайта Survey123 позволяет создавать подробные отчеты по отдельным ответам опроса, суммировать данные по нескольким ответам и агрегировать результаты. В этом разделе описывается, как использовать запросы для суммирования и агрегирования результатов и представления их в разделе суммарной информации.

Функции суммирования не предполагают кредитной платы сверх стоимости любых других отчетов, напечатанных в то же время.

Добавление раздела итоговой информации

Для того, чтобы включить раздел итоговой информации в отчет, включите теги сводки в шаблон отчета. Если для отчета будет выбрано несколько записей, раздел суммарной информации будет создан только один раз, тогда как остальная часть шаблона отчета будет создаваться для каждой записи. Это делается при помощи следующего синтаксиса:

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

Разделы итоговой информации можно разместить в начале и в конце отчетов, но нельзя разместить в содержании отчета. Например, если в шаблоне есть заголовок, он должен быть или в разделе итоговой информации в начале отчета или после закрытия раздела итоговой информации.

Если карта находится в разделе суммарной информации, будут указаны все геометрические объекты всех входных записей одной карты. Вы также можете использовать дополнительный синтаксис, чтобы задать отображаемую геометрию. См. пример ниже:

  • ${inspectionLocation | size:400:300} — отображает все входные записи.
  • ${inspectionLocation | orderByFields:"creationDate DESC" | resultRecordCount:3 | size:400:300} — отображает три последних записи среди всех входных.
  • ${$shape | where:"1=1 !important" | drawingInfo:"currentLayer" | size:400:300} — печатает все геометрические объекты основного слоя с помощью информации о рисовании основного слоя.
Примечание:

В сводном разделе печать карты или изображения, включая получение свойств из вложенного файла, за исключением имени и размера вложения, поддерживается только вне повторов. В противном случае появится сообщение об ошибке.

В следующей таблице содержатся поддерживающиеся методы, которые удобны для представления статистики или настройки презентаций в данных вашего отчета:

МетодОписаниеПример

where

Возвращаются только записи, удовлетворяющие определенным критериям.

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

stats

Функция агрегирования извлекается из определенных записей слоя.

${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 задает статистическую операцию и используемое поле и оптимизируется для сводных отчетов, принимая три параметра в виде списка, разделенного запятыми. Для этого определите следующее:

  • Тип статистики.
  • Вопрос, из которого хотите получить результаты.
  • Вы можете также указать имя поля для результирующего вычисления; в этом случае имя поля может упоминаться в другом месте так же, как любой вопрос опроса.

Параметры groupByFieldsForStatistics и havingClause принимают те же значения, что и в запросах к сервису объектов, и являются дополнительными. Если они не нужны, их можно пропустить.

В следующем примере создается сумма результатов, предоставленных для вопроса с именем 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 перечисляет ответы на основании содержания определенного поля. В данном случае, ответы перечислены по убыванию в соответствии с полем AvgPOP, созданным параметром outStatistic.
  • resultRecordCount:5 – фильтр resultRecordCount ограничивает ответы только по определенному числу, в данном случае 5.
  • ${AvgPOP | round:2} – содержание поля AvgPOP, округленное до двух десятичных знаков. Это единственный элемент в первой ячейке, который будет отображаться в сводке, сам фильтр статистики не будет показан.
  • ${Org_NAME} – содержание поля Org_NAME из ответов на опрос.
  • ${/} – заканчивает объявление области для ввода данных ответа. Поскольку все эта информация находится только в таблице, и начало, и окончание этой области должно быть объявлено внутри одной и той же таблицы.

Результат этого фильтра покажет пять строк ответов в таблице, добавляя строки при необходимости. Итоговый отчет будет выглядеть таким образом:

Средняя численность населенияНазвание организации

2360.23

A

1639.75

C

1179.7

B

915.93

D

795.57

E

Дополнительный синтаксис

Кроме параметров, указанных выше, используемых для построения фильтра опроса, существуют дополнительные параметры и квалификаторы, которые можно использовать для улучшения запроса.

  • where - легальное условие WHERE SQL, работающее с полями в слое.
    • Явное значение - например, where:"weather='sunny'" приведет к тому, что фильтр будет использовать только ответы, где поле weather точно содержит значение sunny.
    • Содержимое поля — например, where:"weather='"+cloudCover+"'" будет использовать содержимое поля cloudCover в качестве основного требования для поля weather.
    • Дополнительные параметры —например, where:"weather='"+cloudCover+"' AND temperature='high'" будет использовать ответы, где погода соответствует полю cloudCover, а поле температуры точно соответствует значению high.
  • !important – этот квалификатор можно добавить к любому полю, но resultRecordCount заменит любые ограничения значений, которые возвращает фильтр. К примеру, если вы печатали отчеты только за последние семь дней, where:"weather='sunny' !important" приведет к тому, что фильтр будет использовать только те ответы, в которых в поле weather содержится точное значение sunny, но извлечение будет выполняться из всех применимых ответов в векторном слое, а не только из ответов, выбранных для печати.
  • $inputParams – этот заполнитель можно использовать в любом фильтре, но resultRecordCount обращается к параметрам, заданным на веб-сайте Survey123 при печати отчета. Эти параметры могут быть в дальнейшем дополнительно уточнены, чтобы сузить ваш ответ. Например, orderByFields:"$inputParams, objectid DESC" организует поля в порядке, заданном на веб-сайте Survey123, затем расположит по убыванию значения object ID для всех полей с совпадающими параметрами. Также можно использовать $inputParams, чтобы применить эти параметры к повторам.
Примечание:

Если условие where используется с другими фильтрами, они должны применяться в следующем порядке: where, stats, orderByFields, resultRecordCount.