効果的なデータ式の作成

データ式を作成して、ダッシュボード内のデータドリブン エレメントで利用できます。 データ式を使用すると、アクセスできるデータセットを使用して強固なビジュアライゼーションを構築することで、効果的なダッシュボードを作成することができます。 次に、効果的なデータ式を作成するためのベスト プラクティスを示します。

注意:

サンプル データ式を表示して、すぐに作業を開始できます。

データ式にはパフォーマンスのトレードオフがあり、複雑なワークフローや大規模データセットには使用しないでください。 これらの状況で所有しているデータを操作している場合は、ホスト レイヤーのリモデリングと公開をお勧めします。

  • 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'}]);

  • 元のデータが更新された場合、データ式の更新間隔のみを設定します。 更新間隔をデータが更新される頻度を反映した値に設定します。
  • テキスト エディターを使用して、データ式のコピーを保存します。 ダッシュボード内で未使用のデータ式は保存されません。
  • データ式は、適切なデータ モデリングの代わりと見なすべきではありません。 可能な場合は常に、ダッシュボードに取り込む前にデータを処理してください。