From 523cb97aff092c85c14374f3c7eab90334eee31d Mon Sep 17 00:00:00 2001 From: Oscar Kilhed Date: Fri, 29 Sep 2023 04:19:10 +0200 Subject: [PATCH] Transformations: Fix bug with calculate field when using reduce and the all values calculation (#75684) * fix reduce all fields * Add test for issue --- .../src/transformations/fieldReducer.ts | 2 +- .../transformers/calculateField.test.ts | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/grafana-data/src/transformations/fieldReducer.ts b/packages/grafana-data/src/transformations/fieldReducer.ts index 7d7927792fc..8bd30767015 100644 --- a/packages/grafana-data/src/transformations/fieldReducer.ts +++ b/packages/grafana-data/src/transformations/fieldReducer.ts @@ -254,7 +254,7 @@ export const fieldReducers = new Registry(() => [ name: 'All values', description: 'Returns an array with all values', standard: false, - reduce: (field: Field) => ({ allValues: field.values }), + reduce: (field: Field) => ({ allValues: [...field.values] }), }, { id: ReducerID.uniqueValues, diff --git a/packages/grafana-data/src/transformations/transformers/calculateField.test.ts b/packages/grafana-data/src/transformations/transformers/calculateField.test.ts index 28983031531..ba3a1ab1477 100644 --- a/packages/grafana-data/src/transformations/transformers/calculateField.test.ts +++ b/packages/grafana-data/src/transformations/transformers/calculateField.test.ts @@ -222,6 +222,33 @@ describe('calculateField transformer w/ timeseries', () => { }); }); + it('reduces all field', async () => { + const cfg = { + id: DataTransformerID.calculateField, + options: { + mode: CalculateFieldMode.ReduceRow, + reduce: { include: ['B', 'C'], reducer: ReducerID.allValues }, + replaceFields: true, + }, + }; + + await expect(transformDataFrame([cfg], [seriesBC])).toEmitValuesWith((received) => { + const data = received[0]; + const filtered = data[0]; + const rows = new DataFrameView(filtered).toArray(); + expect(rows).toEqual([ + { + 'All values': [2, 3], + TheTime: 1000, + }, + { + 'All values': [200, 300], + TheTime: 2000, + }, + ]); + }); + }); + it('can add index field', async () => { const cfg = { id: DataTransformerID.calculateField,