データ式を作成して、ダッシュボード内のデータドリブン エレメントで利用できます。 データ式を使用すると、アクセスできるデータセットを使用して強固なビジュアライゼーションを構築することで、効果的なダッシュボードを作成することができます。 次に、効果的なデータ式を作成するためのベスト プラクティスを示します。
注意:
サンプル データ式を表示して、すぐに作業を開始できます。
データ式にはパフォーマンスのトレードオフがあり、複雑なワークフローや大規模データセットには使用しないでください。 これらの状況で所有しているデータを操作している場合は、ホスト レイヤーのリモデリングと公開をお勧めします。
- FeatureSet 関数を使用してレイヤーのデータをクエリする場合は、必要とするフィーチャと列のみを要求し、必要な場合にのみジオメトリ データをクエリします。
次のデータ式では、FeatureSetByPortalItem 関数で必要な列を指定することにより、レイヤーから必要な列のみを取得し、ジオメトリは取得しません。 その後、Filter 関数を使用して、ビジュアライゼーションに必要な行のみを返します。
var fs = Filter(FeatureSetByPortalItem(Portal('https://www.arcgis.com'),'f8492125f78445b284751ced4e9d6573',0,['Waterbody_Type', 'Sample_Date', 'Mercury'], false),'Mercury > 0.3');
- 同じダッシュボード内の複数のエレメントでデータ式を再使用できます。 同じデータを処理して返す複数の式を作成しないようにします。
- データ式にジオメトリ関数を使用しないようにします。 ジオメトリ関数は、ダッシュボードのパフォーマンスに影響を与える場合があります。 代わりに、データを事前に処理します。
次の式は、Contains() と Buffer() ジオメトリ メソッドを使用して、国有林から 50 マイル以内にある化石燃料抽出ユニットを検索します。 国有林と抽出ユニットの位置情報は、異なる 2 つのレイヤーにあります。 ジオメトリ メソッドは、ループ処理でデータセット内の各国有林が実行されるため、式が遅くなります。
var p = 'https://arcgis.com/'; var nf = '% NF'; var nfs = Filter(FeatureSetByPortalItem(Portal(p),'3d86e0ee5f34471ab30a1ad19a08c21f',0),'NAME LIKE @nf'); var wells = FeatureSetByPortalItem(Portal(p),'f30ebe47eebc4534b7a385835d6bfedb',0); var Dict = { 'fields': [{ 'name': 'NF_name', 'type': 'esriFieldTypeString' }, {'name': 'area','type': 'esriFieldTypeDouble'}, {'name': 'n_wells','type': 'esriFieldTypeInteger'}], 'geometryType': '', 'features': []}; var counts = 0; var index = 0; for (var nf in nfs) { counts = Count(Contains(Buffer(nf, 50, 'miles'), wells)) Dict.features[index] = { 'attributes': { 'NF_name': nf.NAME, 'area': nf.SQMI, 'n_wells': counts }} index++; }; return FeatureSet(Text(Dict));
- ダッシュボード エレメントの標準構成で実行できる操作またはクエリのデータ式を使用しないようにします。
たとえば、データ ドリブン エレメントはフィルターを使用して、次の式の結果を生成できます。
return Filter(FeatureSetByPortalItem(Portal('https://www.arcgis.com'),'f8492125f78445b284751ced4e9d6573',0,['Waterbody_Type', 'Sample_Date', 'Mercury'], false),'Mercury > 0.3');
- データ式を使用して大規模なデータセットを処理しないようにします。
次の式は、列のカンマ区切り値を別々の行に変換します。 この処理は、for ループ処理で一度に 1 つのフィーチャが実行されるため、遅い式になります。
var fs = FeatureSetByPortalItem(Portal('https://www.arcgis.com'), 'd10b9e8dbd7f4cccbd0a938a06c586e9',0,['Report_road_condition'], false); var choicesDict = {'fields': [{'name': 'split_choices', 'type': 'esriFieldTypeString'}], 'geometryType': '', 'features': []}; var index = 0; for (var feature in fs) { var split_array = Split(feature["Report_road_condition"], ',') var count_arr = Count(split_array) for(var i = 0; i < count_arr; i++){ choicesDict.features[index] = { 'attributes': { 'split_choices':Trim(split_array[i]), } } index++;} }; return GroupBy(FeatureSet(Text(choicesDict)),['split_choices'], [ {name:'split_count',expression:'split_choices',statistic: 'COUNT'}]);
- 元のデータが更新された場合、データ式の更新間隔のみを設定します。 更新間隔をデータが更新される頻度を反映した値に設定します。
- テキスト エディターを使用して、データ式のコピーを保存します。 ダッシュボード内で未使用のデータ式は保存されません。
- データ式は、適切なデータ モデリングの代わりと見なすべきではありません。 可能な場合は常に、ダッシュボードに取り込む前にデータを処理してください。