diff --git a/public/app/core/time_series.ts b/public/app/core/time_series.ts index 282af99e33a..0fb2b83b7e0 100644 --- a/public/app/core/time_series.ts +++ b/public/app/core/time_series.ts @@ -101,6 +101,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]; @@ -117,6 +118,7 @@ class TimeSeries { if (_.isNumber(currentValue)) { this.stats.total += currentValue; this.allIsNull = false; + nonNulls++; } if (currentValue > this.stats.max) { @@ -139,7 +141,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() {