Создание эффективных выражений данных

Выражения данных можно создавать для изменяемых данными элементов в операционной панели. Они позволяют создавать эффективные операционные панели, создавая надежные визуализации с использованием наборов данных, к которым у вас есть доступ. Ниже приведены рекомендации по созданию эффективных выражений данных.

Примечание:

Вы можете просмотреть примеры выражений данных, они помогут вам начать работу с выражениями.

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

  • При запросе данных слоя с помощью функций 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 миль от национальных лесов. Информация о местоположении национальных лесов и установок добычи находится в двух разных слоях. Поскольку методы геометрии выполняются для каждого национального леса в наборе данных по циклу, выражение выполняется медленно.

    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');

  • Избегайте обработки больших наборов данных с использованием выражений данных.

    Следующее выражение преобразует значения столбца, разделенные запятыми, в отдельные строки. Эта обработка выполняется в цикле, по одному объекту за раз, что приводит к замедлению работы выражения.

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

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