diff --git a/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts b/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts index 7e6e1fd5aaa..d8e70c81138 100644 --- a/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts +++ b/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts @@ -121,6 +121,26 @@ it('can convert strings with commas to numbers', () => { }); }); +it('converts booleans to numbers', () => { + const options = { targetField: 'booleans', destinationType: FieldType.number }; + + const stringyNumbers = { + name: 'booleans', + type: FieldType.boolean, + values: new ArrayVector([true, false]), + config: {}, + }; + + const numbers = convertFieldType(stringyNumbers, options); + + expect(numbers).toEqual({ + name: 'booleans', + type: FieldType.number, + values: new ArrayVector([1, 0]), + config: {}, + }); +}); + describe('field convert types transformer', () => { beforeAll(() => { mockTransformationsRegistry([convertFieldTypeTransformer]); diff --git a/packages/grafana-data/src/transformations/transformers/convertFieldType.ts b/packages/grafana-data/src/transformations/transformers/convertFieldType.ts index 318f1a3f4eb..92129534e5b 100644 --- a/packages/grafana-data/src/transformations/transformers/convertFieldType.ts +++ b/packages/grafana-data/src/transformations/transformers/convertFieldType.ts @@ -141,10 +141,19 @@ export function fieldToTimeField(field: Field, dateFormat?: string): Field { function fieldToNumberField(field: Field): Field { const numValues = field.values.toArray().slice(); + const valuesAsStrings = numValues.some((v) => typeof v === 'string'); + for (let n = 0; n < numValues.length; n++) { - // some numbers returned from datasources have commas - // strip the commas, coerce the string to a number - const number = +numValues[n].replace(/,/g, ''); + let toBeConverted = numValues[n]; + + if (valuesAsStrings) { + // some numbers returned from datasources have commas + // strip the commas, coerce the string to a number + toBeConverted = toBeConverted.replace(/,/g, ''); + } + + const number = +toBeConverted; + numValues[n] = Number.isFinite(number) ? number : null; }