From bfe04d4d1a3a135d736473e62a37d68a648bca45 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Mon, 28 Nov 2022 20:39:26 +0200 Subject: [PATCH] [v9.3.x] Transformations: Convert fields transform fix, convert strings with commas to numbers (#59433) Transformations: Convert fields transform fix, convert strings with commas to numbers (#59074) convert strings with commas to numbers (cherry picked from commit 84ec35a4adc364ab1375c1c0ddfb1c98dc6b6620) Co-authored-by: Brendan O'Handley --- .../transformers/convertFieldType.test.ts | 20 +++++++++++++++++++ .../transformers/convertFieldType.ts | 4 +++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts b/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts index 467222765a4..7e6e1fd5aaa 100644 --- a/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts +++ b/packages/grafana-data/src/transformations/transformers/convertFieldType.test.ts @@ -101,6 +101,26 @@ describe('field convert type', () => { }); }); +it('can convert strings with commas to numbers', () => { + const options = { targetField: 'stringy nums', destinationType: FieldType.number }; + + const stringyNumbers = { + name: 'stringy nums', + type: FieldType.string, + values: new ArrayVector(['1,000', '1,000,000']), + config: {}, + }; + + const numbers = convertFieldType(stringyNumbers, options); + + expect(numbers).toEqual({ + name: 'stringy nums', + type: FieldType.number, + values: new ArrayVector([1000, 1000000]), + 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 0ebf969524f..318f1a3f4eb 100644 --- a/packages/grafana-data/src/transformations/transformers/convertFieldType.ts +++ b/packages/grafana-data/src/transformations/transformers/convertFieldType.ts @@ -142,7 +142,9 @@ function fieldToNumberField(field: Field): Field { const numValues = field.values.toArray().slice(); for (let n = 0; n < numValues.length; n++) { - const number = +numValues[n]; + // some numbers returned from datasources have commas + // strip the commas, coerce the string to a number + const number = +numValues[n].replace(/,/g, ''); numValues[n] = Number.isFinite(number) ? number : null; }