报告查询

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} - 使用主图层的绘制信息在主图层上打印所有几何。
注:

在摘要部分中,仅支持在重复之外打印地图或图像,包括从附件文件中检索属性(附件名称和大小除外)。 否则,将显示错误消息。

下表包含受支持的方法,这些方法可用于呈现统计数据或塑造报表数据的呈现方式:

方法描述示例

其中

仅返回符合特定条件的记录。

${#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 web 设计器中创建的调查,其默认图层名称为 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 字段的内容。
  • ${/} - 结束区域声明以提取响应数据。 因为所有这些信息都仅在一个表中,因此必须在同一表中声明该区域的开始和结束。

此过滤器的结果将在表中显示五行响应,并将根据需要添加额外的行。 生成的摘要报告与以下内容相似:

平均人口组织名称

2360.23

A

1639.75

C

1179.7

B

915.93

D

795.57

E

附加语法

除了上述用于为您的调查构建过滤器的参数之外,还有其他一些参数和限定符可用于增强查询。

  • where - 在图层的字段中进行操作的合法 SQL WHERE clause 子句。
    • 显式值 - 例如,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 网站中设置的排序顺序对字段进行排序,然后对所有具有匹配参数的字段按对象 ID 值降序排列。 您也可以使用 $inputParams 将这些参数应用于重复项。
注:

如果与其他过滤器共同使用 where,则执行顺序如下 wherestatsorderByFieldsresultRecordCount