Фильтрация данных в Операционной панели ArcGIS в зависимости от пользователя портала

В статье описан один из вариантов решения задачи по фильтрации данных и содержимого виджетов в операционной панели ArcGIS в зависимости от текущего пользователя портала ArcGIS Enterprise или ArcGIS Online.

Идея заключается в том, что при входе пользователя Х в систему в операционной панели ArcGIS будут отображаться только данные доступные для него, и он не сможет увидеть данные, предназначенные для других пользователей. Это правило также будет применяться к диаграммам или виджетам, связанным с данными.

Для этого мы воспользуемся Выражением данных (Data Expression). Выражение данных — это любое выражение на Arcade, возвращающее набор объектов. Набор объектов можно использовать в качестве источника данных для завязанные на данные элементы, такие как список, индикатор, серийная диаграмма, круговая диаграмма, селектор или счетчик.

Выражения данных создаются, сохраняются и выполняются в ArcGIS Dashboards. Используя библиотеку функций Arcade, можно создавать выражения данных для комбинации, фильтрации или модификации существующих данных. В качестве источника данных можно использовать доступные сервисы, в том числе находящиеся в открытом доступе, например слои из ArcGIS Living Atlas.

Чтобы оценить возможности выражения данных загляните на страницу с примерами кода на Arcade для них.

Для нашей задачи мы настроим выражение данных для фильтрации данных сервиса в виджете Селектор категорий.

Используя следующее выражение Arcade:


// Write an expression that returns a FeatureSet.
// Фильтрация объектов по пользователю
// Идея - https://community.esri.com/t5/arcgis-dashboards-questions/filter-data-and-chart-based-on-login/m-p/1392150/highlight/true#M9227

// Списки пользователей
// Можно настроить получение из сервиса
var g1_users = [
    'aleonov',
    'user2',
    'user3'
]

var g2_users = [
    'oilgas',
    'user1'
]

// Получение данных из сервиса, размещённого на портале
// Необходимо изменить для своего портала ArcGIS Enterprise или ArcGIS Online
var port = Portal('https://webadaptorhost.domain.com/webadaptorname'); // ваш адрес портала
var fs = FeatureSetByPortalItem(port, 
  '782a53304eda4456ae98976e7e504891', // id сервиса
  1, // номер слоя в сервисе
  ['name'], // поле для фильтрации в функции Filter
  false
);
Console(Count(fs)) // вывод в Консоли Сообщений Arcade общего кол-ва объектов в сервисе
Console(fs);

// Получение имени активного пользователя портала
var u = getUser(port);
var fullName = u.username;
Console (fullname) // проверка в Консоли Сообщений Arcade имени пользователя

// логика фильтрации данных сервиса
// изменить имя поля и SQL выражение для фильтрации
if (Includes(g1_users,fullName)){
    return Filter(fs, "name LIKE 'NUR%'") 
} else if (Includes(g2_users,fullName)) {
    return Filter(fs, "name LIKE 'SEM%'")
} else {
    return Filter(fs, "name = 'общий доступ'")
}

После чего настроим Действия для Селектора категорий. В Фильтре активируем фильтрацию всех элементов операционной панели и обязательно включим опцию Отображать, только если отфильтровано.

Теперь пользователям из списка g1_users видны датчики только на территорию Астаны, а пользователям из списка g2_users – только для города Семей.

Для отображения данных пользователю после открытия операционной панели нужно выбрать в Селекторе категорий – Выбрать всё.