Splunk Search

## how to tweak streamstats function to get sum of differences from hand picked events rather than regular streamstats functions ?

Explorer

Streamstats can produce sum of differences like

(fieldB- fieldA)+ (fieldC-fieldB)+(fieldD - fieldC) = a total of 30 min.

Can we achieve this evaluation through streamstats ? (fieldB - fieldA)+(fieldD - fieldC) ==> (10 + 10 = 20 min.) ???

(PFA Image which poses the question in a understandable manner)

Tags (1)
1 Solution
SplunkTrust

Okay, so, first, mathematically, because of the associative, commutative and identity properties of numbers, (B-A) + (C-B) + (D-C) is always going to equal (D-A).

``````  (B - A) + (C - B) + (D - C)
= (B + -A) + (C + -B) + (D + -C)
= (-A + B) + (-B + C) + (-C + D)
=  -A +  B + -B  +  C + -C  + D
=  -A + (B + -B) + (C + -C) + D
=  -A +    0     +    0     + D
= -A + D
=  D + -A
=  D - A
``````

Second, assuming that your events have an ID in common, and you want total duration (B-A + D-C), you can achieve this. You don't actually need `streamstats` for this, though.

`````` your base search
| eval duration=case(event="A",-fieldA, event="B",fieldB, event="C",-fieldC, event="D",fieldD, true(),null())
| stats sum(duration) as duration by CommonID
``````

or, assuming you wanted to keep event D

``````| eventstats sum(duration) as duration by CommonID
| where event="D"
``````

Finally, if you need something more complex, then we can help you with that as well, but we would need specifications for what you were doing, and to know the exact fields for reference.

SplunkTrust

Okay, so, first, mathematically, because of the associative, commutative and identity properties of numbers, (B-A) + (C-B) + (D-C) is always going to equal (D-A).

``````  (B - A) + (C - B) + (D - C)
= (B + -A) + (C + -B) + (D + -C)
= (-A + B) + (-B + C) + (-C + D)
=  -A +  B + -B  +  C + -C  + D
=  -A + (B + -B) + (C + -C) + D
=  -A +    0     +    0     + D
= -A + D
=  D + -A
=  D - A
``````

Second, assuming that your events have an ID in common, and you want total duration (B-A + D-C), you can achieve this. You don't actually need `streamstats` for this, though.

`````` your base search
| eval duration=case(event="A",-fieldA, event="B",fieldB, event="C",-fieldC, event="D",fieldD, true(),null())
| stats sum(duration) as duration by CommonID
``````

or, assuming you wanted to keep event D

``````| eventstats sum(duration) as duration by CommonID
| where event="D"
``````

Finally, if you need something more complex, then we can help you with that as well, but we would need specifications for what you were doing, and to know the exact fields for reference.

Explorer

Thank You
that was an awesome explanation!

Get Updates on the Splunk Community!

#### Streamline Data Ingestion With Deployment Server Essentials

REGISTER NOW!Every day the list of sources Admins are responsible for gets bigger and bigger, often making the ...

#### Remediate Threats Faster and Simplify Investigations With Splunk Enterprise Security ...

REGISTER NOW!Join us for a Tech Talk around our latest release of Splunk Enterprise Security 7.2! We’ll walk ...

#### Introduction to Splunk AI

WATCH NOWHow are you using AI in Splunk? Whether you see AI as a threat or opportunity, AI is here to stay. ...