You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESRI Collector应用工单开放天数指标Arcade表达式编写问题

你当前的表达式属于单要素计算逻辑,运行时只会传入当前单个工单的created_at值,Max()、Mean()对单个数值计算只能返回数值本身,自然无法实现全表2万条数据的聚合统计。

方案1:服务端预聚合(性能最优,推荐2万行量级使用)

  • 发布工单要素服务时,在ArcGIS Online/Enterprise后台开启要素服务的统计能力,提前预计算开放工单的最大天数、平均天数,Collector指示器直接调用预聚合结果,无需前端遍历计算,加载无延迟。
  • 也可在源数据表新增计算字段:先新增开放天数字段,用数据库定时任务每日更新全量工单的开放天数,再新增配置表存储全局最大值、平均值,指示器直接读取配置表的两个字段即可。

方案2:Arcade全表统计写法(无需修改数据源)

如果无法调整后端服务配置,可改用以下Arcade表达式,直接拉取全量要素做聚合计算:

// 替换为你的工单图层实际名称,第三个参数仅指定加载created_at字段,大幅降低数据传输量
var all_tickets = FeatureSetByName($map, "工单图层", ["created_at"], false)
var today = Now()

// 可选:如果有工单状态字段,过滤掉已关闭的工单,减少计算量
// all_tickets = Filter(all_tickets, "ticket_status = '开放'")

// 一次性聚合计算最大值、平均值
var aggregate_stats = GroupBy(all_tickets, [], [
    {name: "max_open_days", expression: DateDiff(today, $feature.created_at, "days"), statistic: "MAX"},
    {name: "avg_open_days", expression: DateDiff(today, $feature.created_at, "days"), statistic: "MEAN"}
])
var stat = First(aggregate_stats)

return {
    textColor:'',
    backgroundColor:'',
    topText:'Avg: ' + Round(stat.avg_open_days, 1),
    topTextColor: '',
    topTextOutlineColor: '',
    topTextMaxSize: 'medium',
    middleText: 'Max: '+ Round(stat.max_open_days, 0),
    middleTextColor: '',
    middleTextOutlineColor: '',
    middleTextMaxSize: 'medium',
}

性能优化提示

  • 拉取FeatureSet时务必仅指定需要的created_at字段,不要加载全字段,可减少70%以上的数据加载耗时
  • 若有已完结工单,增加过滤条件排除无效数据,进一步降低计算量
  • 2万行数据用此写法在移动端会有1-3秒的加载延迟,对流畅度要求高建议优先选择方案1

内容的提问来源于stack exchange,提问作者BizzyBee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:57:03