レポート クエリ

Survey123 Web サイトのレポート機能では、個々の調査の回答に関する詳細レポートを作成したり、複数の回答にまたがるデータを要約したりできます。 このトピックでは、クエリを使用して結果を集約し、サマリー セクションに表示する方法を説明します。

サマリー機能では、同時に印刷される他のレポートの費用以上のクレジット課金は発生しません。

サマリー セクションの追加

レポートにサマリー セクションを追加するには、レポート テンプレートにサマリー タグを追加します。 サマリー セクションは、レポート用に複数のレコードが選択されている場合に一度だけ生成され、レポート テンプレートの残りのセクションは各レコードに対して作成されます。 これは、以下の構文を使用して実行できます。

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

サマリー セクションは、レポートの先頭と末尾に配置できますが、レポートのコンテンツ内に配置することはできません。 たとえば、テンプレートにタイトルが含まれている場合、このタイトルは、レポートの開始時にサマリー セクション内に配置するか、サマリー セクションが閉じられた後に配置する必要があります。

サマリー セクションにマップが含まれている場合、1 つのマップ上にあるすべての入力レコードのすべてのジオメトリが印刷されます。 また、その他の構文を使用して、表示されるジオメトリをさらに指定することもできます。 以下の例をご参照ください。

  • ${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'"}...${/}

stats

レイヤーの特定レコードから派生した集約関数。

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

orderByFields

レポート内の印刷レコードを、1 つ以上のフィールドにより昇順または降順でソートします。

${#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

1 つのフィールドまたはフィールド セットの一意の値を取得するには、returnDistinctValues と併用します。 この方法では、フィールドのカンマ区切りリストを使用できます。

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

集約関数

サマリー セクションでは、レポート テンプレートのすべての式を使用でき、さまざまな集約関数を使用するのにも最適です。 これらの関数を使用して、レポートに印刷されたすべての回答から取得された結果を返すことができます。 これらの関数は、すべてのフィーチャに対してレポートを生成している場合や、「その他の構文」に記載されている !important 修飾子が使用されている場合を除き、フィーチャ レイヤー全体からの結果を返すことはありません。 集約関数は、リピートだけでなく、個々のレポートにも使用できます。

ヒント:

レポートをプレビューする場合、集約関数では印刷用に選択されたすべての回答から結果が生成されますが、プレビュー サンプルでは一度に最大 20 個の結果しか報告されません。

サマリー セクションで値を抽出および集計するには、値を抽出するフィールド名でレイヤー名またはリピート名で定義する必要があります。 Survey123 Web デザイナーで作成した調査の場合、調査に使用されるデフォルトのレイヤー名は survey になることに注意してください。 調査の回答に使用されるレイヤー名は、[テンプレートの管理] ダイアログ ボックスの [クイック リファレンス] にあります。

集約関数は、stats という名前のフィルターを使用して制御されます。 このフィルターは、フィーチャ サービス クエリと同様に動作し、次の形式を使用します。

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

outStatistics パラメーターは、統計操作および使用するフィールドを定義し、サマリー レポートでは 3 つのパラメーターをカンマ区切りのリストとして使用できるよう効率化されています。 以下を順番に定義します。

  • 統計情報の種類。
  • 結果を取得する質問。
  • 必要に応じて、出力される計算のフィールド名を含めることができます。この場合、フィールド名は、調査の質問と同じ方法で他の場所を参照することができます。

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 フィルターは、特定のフィールドの内容に基づいた回答を表示します。 この場合、outStatistic パラメーターによって作成された AvgPOP フィールドの内容に応じて、回答が降順に表示されます。
  • resultRecordCount:5 - resultRecordCount フィルターは、回答を特定の数 (この場合は 5) に制限します。
  • ${AvgPOP | round:2} - AvgPOP フィールドの内容を小数点以下 2 桁に丸めたもの。 これは、サマリーに表示される最初のセルの唯一のエレメントになります。統計情報フィルター自体は表示されません。
  • ${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'" では、weather が cloudCover フィールドと一致し、temperature フィールドの値が high である回答が使用されます。
  • !important - この修飾子は resultRecordCount 以外の任意のフィルターに追加でき、フィルターが返す値に対する制約を上書きします。 たとえば、過去 7 日間のレポートのみを印刷する場合、where:"weather='sunny' !important" では、フィルターは weather フィールドが sunny である回答のみを使用しますが、印刷用に選択した回答だけではなく、フィーチャ レイヤー内で該当するすべての回答からデータを取得します。
  • $inputParams - このプレースホルダーは resultRecordCount 以外の任意のフィルター内で使用でき、レポートを印刷する際に Survey123 Web サイトで設定したパラメーターを参照します。 これらのパラメーターを追加して、さらに回答を絞り込むことができます。 たとえば、orderByFields:"$inputParams, objectid DESC" では、Survey123 Web サイトで設定した順序を使用してフィールドを順序付けし、パラメーターが一致するすべてのフィールドのオブジェクト ID 値の降順に並べ替えます。 また、$inputParams を使用してこれらのパラメーターをリピートに適用することもできます。
注意:

where を他のフィルターと一緒に使用する場合は、wherestatsorderByFieldsresultRecordCount の順に実装する必要があります。