# NPE for Average based on Scripted Field with missing values

**URL:** <https://discuss.elastic.co/t/npe-for-average-based-on-scripted-field-with-missing-values/246572>\
**Category:** Elasticsearch\
**Created:** [August 27, 2020, 7:50am UTC](https://discuss.elastic.co/t/npe-for-average-based-on-scripted-field-with-missing-values/246572 "2020-08-27T07:50:15Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![weand](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/weand/32/38826_2.png) [@weand](https://discuss.elastic.co/u/weand)\
**Post date:** [August 27, 2020, 7:50am UTC](https://discuss.elastic.co/t/npe-for-average-based-on-scripted-field-with-missing-values/246572/1 "2020-08-27T07:50:15Z")

</div>

Hi,

in a kibana data table, we want add an 'average' metric, based on a scripted field. As we want to calculate the average only for a part of the dataset, we tried to rely on the default of the missing field behavior for average aggragation...

> The `missing` parameter defines how documents that are missing a value should be treated. **By default they will be ignored** [...] .

> **[Avg aggregation | Elasticsearch Guide \[8.11\] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-metrics-avg-aggregation.html#_missing_value)**

The query leaves kibana with somehting like this, where `is_enabled ` is of type boolean and `tags` of type keyword, and `any_numeric_field` is a numeric field in the mapping.

```auto
{
  "aggs": {
    "2": {
      "aggs": {
        "5": {
          "avg": {
            "field": "any_numeric_field",
            "script": "if (!doc['is_enabled'].value) { return null; } else { if (doc['tags']?.contains('some_value')) { return 1; } else { return 0; } }"
          }
        }
      }
    }
  },
  "size": 0,
  "stored_fields": [
    "*"
  ],
  "script_fields": {},
  "_source": {
    "excludes": []
  },
  "query": {
    "bool": {
      "must": [],
      "filter": [
        {
          "match_all": {}
        }
      ],
      "should": [],
      "must_not": []
    }
  }
}

```

and results in an NullPointerException in Elasticsearch

```auto
Caused by: java.lang.NullPointerException
        at org.elasticsearch.script.AggregationScript.runAsDouble(AggregationScript.java:142) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.search.aggregations.support.ValuesSource$Numeric$WithScript$DoubleValues.advanceExact(ValuesSource.java:447) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.search.aggregations.metrics.AvgAggregator$1.collect(AvgAggregator.java:85) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.search.aggregations.MultiBucketCollector$MultiLeafBucketCollector.collect(MultiBucketCollector.java:200) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.search.aggregations.bucket.BestBucketsDeferringCollector.prepareSelectedBuckets(BestBucketsDeferringCollector.java:197) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.search.aggregations.bucket.DeferringBucketCollector.replay(DeferringBucketCollector.java:45) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.search.aggregations.bucket.DeferableBucketAggregator.runDeferredCollections(DeferableBucketAggregator.java:103) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.search.aggregations.bucket.terms.GlobalOrdinalsStringTermsAggregator.buildAggregation(GlobalOrdinalsStringTermsAggregator.java:233) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.search.aggregations.AggregationPhase.execute(AggregationPhase.java:130) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.search.query.QueryPhase.execute(QueryPhase.java:140) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.indices.IndicesService.lambda$loadIntoContext$19(IndicesService.java:1335) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.indices.IndicesService.lambda$cacheShardLevelResult$20(IndicesService.java:1392) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.indices.IndicesRequestCache$Loader.load(IndicesRequestCache.java:174) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.indices.IndicesRequestCache$Loader.load(IndicesRequestCache.java:157) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.common.cache.Cache.computeIfAbsent(Cache.java:433) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.indices.IndicesRequestCache.getOrCompute(IndicesRequestCache.java:123) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.indices.IndicesService.cacheShardLevelResult(IndicesService.java:1398) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.indices.IndicesService.loadIntoContext(IndicesService.java:1332) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.search.SearchService.loadOrExecuteQueryPhase(SearchService.java:336) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:358) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.search.SearchService.lambda$executeQueryPhase$1(SearchService.java:343) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.action.ActionListener.lambda$map$2(ActionListener.java:146) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.action.ActionListener$1.onResponse(ActionListener.java:63) ~[elasticsearch-7.6.1.jar:7.6.1]
        ... 9 more

```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [September 24, 2020, 7:50am UTC](https://discuss.elastic.co/t/npe-for-average-based-on-scripted-field-with-missing-values/246572/2 "2020-09-24T07:50:17Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
