diff --git a/packages/grafana-data/src/field/fieldOverrides.test.ts b/packages/grafana-data/src/field/fieldOverrides.test.ts index f7e26bfadbc..44084927f6f 100644 --- a/packages/grafana-data/src/field/fieldOverrides.test.ts +++ b/packages/grafana-data/src/field/fieldOverrides.test.ts @@ -11,14 +11,14 @@ import { MutableDataFrame, toDataFrame } from '../dataframe'; import { DataFrame, Field, + FieldColorModeId, FieldConfig, FieldConfigPropertyItem, FieldConfigSource, FieldType, InterpolateFunction, - ThresholdsMode, - FieldColorModeId, ScopedVars, + ThresholdsMode, } from '../types'; import { locationUtil, Registry } from '../utils'; import { mockStandardProperties } from '../utils/tests/mockStandardProperties'; @@ -87,6 +87,21 @@ describe('Global MinMax', () => { expect(minmax.min).toEqual(-20); expect(minmax.max).toEqual(1234); }); + + describe('when value is null', () => { + it('then global min max should be null', () => { + const frame = toDataFrame({ + fields: [ + { name: 'Time', type: FieldType.time, values: [1] }, + { name: 'Value', type: FieldType.number, values: [null] }, + ], + }); + const { min, max } = findNumericFieldMinMax([frame]); + + expect(min).toBeNull(); + expect(max).toBeNull(); + }); + }); }); describe('applyFieldOverrides', () => { diff --git a/packages/grafana-data/src/field/fieldOverrides.ts b/packages/grafana-data/src/field/fieldOverrides.ts index fad547fc982..f1bd357e47f 100644 --- a/packages/grafana-data/src/field/fieldOverrides.ts +++ b/packages/grafana-data/src/field/fieldOverrides.ts @@ -55,11 +55,23 @@ export function findNumericFieldMinMax(data: DataFrame[]): GlobalMinMax { for (const field of frame.fields) { if (field.type === FieldType.number) { const stats = reduceField({ field, reducers }); - if (stats[ReducerID.min] < min) { - min = stats[ReducerID.min]; + const statsMin = stats[ReducerID.min]; + const statsMax = stats[ReducerID.max]; + + if (!statsMin) { + min = statsMin; } - if (stats[ReducerID.max] > max) { - max = stats[ReducerID.max]; + + if (!statsMax) { + max = statsMax; + } + + if (statsMin && statsMin < min) { + min = statsMin; + } + + if (statsMax && statsMax > max) { + max = statsMax; } } }