diff --git a/public/app/core/time_series.ts b/public/app/core/time_series.ts index 30086be622a..8c8f1ee8eb6 100644 --- a/public/app/core/time_series.ts +++ b/public/app/core/time_series.ts @@ -98,6 +98,7 @@ class TimeSeries { var nullAsZero = fillStyle === 'null as zero'; var currentTime; var currentValue; + var nonNulls = 0; for (var i = 0; i < this.datapoints.length; i++) { currentValue = this.datapoints[i][0]; @@ -114,6 +115,7 @@ class TimeSeries { if (_.isNumber(currentValue)) { this.stats.total += currentValue; this.allIsNull = false; + nonNulls++; } if (currentValue > this.stats.max) { @@ -136,7 +138,7 @@ class TimeSeries { if (this.stats.min === Number.MAX_VALUE) { this.stats.min = null; } if (result.length) { - this.stats.avg = (this.stats.total / result.length); + this.stats.avg = (this.stats.total / nonNulls); this.stats.current = result[result.length-1][1]; if (this.stats.current === null && result.length > 1) { this.stats.current = result[result.length-2][1]; diff --git a/public/test/core/time_series_specs.js b/public/test/core/time_series_specs.js index 22d85775a05..5d6950ad2b6 100644 --- a/public/test/core/time_series_specs.js +++ b/public/test/core/time_series_specs.js @@ -43,6 +43,17 @@ define([ expect(series.stats.max).to.be(-4); }); + it('average value should ignore nulls', function() { + series = new TimeSeries(testData); + series.getFlotPairs('null', yAxisFormats); + expect(series.stats.avg).to.be(6.333333333333333); + }); + + it('with null as zero style, average value should treat nulls as 0', function() { + series = new TimeSeries(testData); + series.getFlotPairs('null as zero', yAxisFormats); + expect(series.stats.avg).to.be(4.75); + }); }); describe('series overrides', function() {