# Division in Scripted field

**URL:** <https://discuss.elastic.co/t/division-in-scripted-field/244715>\
**Category:** Kibana\
**Created:** [August 12, 2020, 12:50pm UTC](https://discuss.elastic.co/t/division-in-scripted-field/244715 "2020-08-12T12:50:23Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ramadevi](https://avatars.discourse-cdn.com/v4/letter/r/0ea827/32.png) [@Ramadevi](https://discuss.elastic.co/u/Ramadevi)\
**Post date:** [August 12, 2020, 12:50pm UTC](https://discuss.elastic.co/t/division-in-scripted-field/244715/1 "2020-08-12T12:50:23Z")

</div>

Hi Team,

We are trying to create percentage based on 2 specific properties using Scripted field in kibana.

Below is the code

```auto
int AF_failures = 0;
int FL_failures = 0;
int count = 0;

if(!(doc['MarketingCarrier.keyword'].size()==0) && !(doc['OperatingCarrier.keyword'].size()==0))
{
count++;
}

if(!(doc['SegmentSellStatus.keyword'].size()==0)) 
{ 
    if(doc['SegmentSellStatus.keyword'].value == "AF")
    {
        AF_failures++;
    }
}
if(!(doc['SegmentSellStatus.keyword'].size()==0)) 
{ 
    if(doc['SegmentSellStatus.keyword'].value == "FL")
    {
        FL_failures++;
    }
}
if(AF_failures > 0 && count > 0)
{
    return AF_failures/count;
}
else
{
    return 0;
}

```

The below statement isn't working properly.

```auto
if(AF_failures > 0 && count > 0)
{
    return AF_failures/count;
}

```

if we return directly we are getting divide by zero exception.

Could you please us in resolving this as we have some of the values with zero.

I'm using sum aggregation for this.

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/a/2/a2649feea4cf99f28d9fcf8946c81fc2f084ee12.png)

Currently we are using 7.4.2.Could you please suggest if we can fix this with any latest kibana version.

Thanks & Regards,  
Ramadevi

---

<div class="post-metadata">

**Author:** ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)\
**Post date:** [August 12, 2020, 1:35pm UTC](https://discuss.elastic.co/t/division-in-scripted-field/244715/2 "2020-08-12T13:35:45Z")

</div>

Painless is basically Java, and your variables are all integers, this is why you are getting zero (it's only doing integer division): [Painless integer division](https://discuss.elastic.co/t/painless-integer-division/150386)

Cast your variables to float before doing the division, then it should work like you expect.

---

<div class="post-metadata">

**Author:** ![Ramadevi](https://avatars.discourse-cdn.com/v4/letter/r/0ea827/32.png) [@Ramadevi](https://discuss.elastic.co/u/Ramadevi)\
**Post date:** [August 12, 2020, 3:00pm UTC](https://discuss.elastic.co/t/division-in-scripted-field/244715/3 "2020-08-12T15:00:35Z")

</div>

Tried to cast to float, but still it isnt working

```auto
if(AF_failures > 0 && count > 0)
{
    return (float)AF_failures/(float)count
}

```

![image](https://us1.discourse-cdn.com/elastic/original/3X/0/7/07d427084d4d277036d7069d9db90ac578a5c61d.png)

---

<div class="post-metadata">

**Author:** ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)\
**Post date:** [August 12, 2020, 3:43pm UTC](https://discuss.elastic.co/t/division-in-scripted-field/244715/4 "2020-08-12T15:43:01Z")

</div>

Could you check whether you have a field formatter set on that field removing all things after the decimal point?

Also, please double check your script whether it's actually doing the right thing - when I'm looking at the script, `count` can only ever be 0 or 1 - is this really intended?

---

<div class="post-metadata">

**Author:** ![Ramadevi](https://avatars.discourse-cdn.com/v4/letter/r/0ea827/32.png) [@Ramadevi](https://discuss.elastic.co/u/Ramadevi)\
**Post date:** [August 12, 2020, 3:58pm UTC](https://discuss.elastic.co/t/division-in-scripted-field/244715/5 "2020-08-12T15:58:35Z")

</div>

Im expecting calculated value for example if ypu see in 1st row, 887/5004 value in percentage column, but division isn't working.

---

<div class="post-metadata">

**Author:** ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)\
**Post date:** [August 12, 2020, 4:05pm UTC](https://discuss.elastic.co/t/division-in-scripted-field/244715/6 "2020-08-12T16:05:06Z")

</div>

Your script won't do that calculation. Scripted fields are executed for each document separately, so you can't access aggregated data. In your script, `count` is set to `0` in the beginning, and bumped to `1` if `MarketingCarrier` and `OperatingCarrier` set. This will make `count` either `0` or `1` for this calculation:

```auto
if(AF_failures > 0 && count > 0)
{
    return AF_failures/count;
}

```

---

<div class="post-metadata">

**Author:** ![Ramadevi](https://avatars.discourse-cdn.com/v4/letter/r/0ea827/32.png) [@Ramadevi](https://discuss.elastic.co/u/Ramadevi)\
**Post date:** [August 12, 2020, 4:53pm UTC](https://discuss.elastic.co/t/division-in-scripted-field/244715/7 "2020-08-12T16:53:39Z")

</div>

Thanks for your input!  
I thought count and af failures will all get calculated based at a time like for loop.  
Our goal is to find the percentage of total failure count of AF w.r.t total count(based on 2 other properties which is marketing and operating carrier).  
Is there a way we can achieve this.

---

<div class="post-metadata">

**Author:** ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)\
**Post date:** [August 12, 2020, 4:55pm UTC](https://discuss.elastic.co/t/division-in-scripted-field/244715/8 "2020-08-12T16:55:22Z")

</div>

When you are working with time based data, you can use TSVB to do this because it has a "math" aggregation which allows you to specify a formula executed on the aggregated data.

---

<div class="post-metadata">

**Author:** ![Ramadevi](https://avatars.discourse-cdn.com/v4/letter/r/0ea827/32.png) [@Ramadevi](https://discuss.elastic.co/u/Ramadevi)\
**Post date:** [August 12, 2020, 5:18pm UTC](https://discuss.elastic.co/t/division-in-scripted-field/244715/9 "2020-08-12T17:18:50Z")

</div>

Actually our goal is to implement datatable, is it not possible to implement this in datatable using scripted fields

---

<div class="post-metadata">

**Author:** ![flash1293](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/flash1293/32/41227_2.png) [@flash1293](https://discuss.elastic.co/u/flash1293)\
**Post date:** [August 13, 2020, 7:04am UTC](https://discuss.elastic.co/t/division-in-scripted-field/244715/10 "2020-08-13T07:04:18Z")

</div>

You can do calculations in scripted fields and use them in the data table, but you have to be aware these calculations happen for each document separately - there's no way around this. In the datatable visualization you can't do calculations in any another way.

---

<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 10, 2020, 7:04am UTC](https://discuss.elastic.co/t/division-in-scripted-field/244715/11 "2020-09-10T07:04:21Z")

</div>

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