From 448784222780d35939a465c8c6a5e80807170beb Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Wed, 25 May 2022 05:52:54 -0400 Subject: [PATCH] Transformations: Add an All Unique Values Reducer (#48653) (#48733) (cherry picked from commit 570ff074f6fc83663e35ed57b54ed7f825d38553) Co-authored-by: Josiah (Jay) Goodson --- .../src/transformations/fieldReducer.test.ts | 9 +++++++++ .../grafana-data/src/transformations/fieldReducer.ts | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/packages/grafana-data/src/transformations/fieldReducer.test.ts b/packages/grafana-data/src/transformations/fieldReducer.test.ts index 243479b7f2d..34de7c94f90 100644 --- a/packages/grafana-data/src/transformations/fieldReducer.test.ts +++ b/packages/grafana-data/src/transformations/fieldReducer.test.ts @@ -97,6 +97,15 @@ describe('Stats Calculators', () => { expect(stats.delta).toEqual(300); }); + it('should calculate unique values', () => { + const stats = reduceField({ + field: createField('x', [1, 2, 2, 3, 1]), + reducers: [ReducerID.uniqueValues], + }); + + expect(stats.uniqueValues).toEqual([1, 2, 3]); + }); + it('consistently check allIsNull/allIsZero', () => { const empty = createField('x'); const allNull = createField('x', [null, null, null, null]); diff --git a/packages/grafana-data/src/transformations/fieldReducer.ts b/packages/grafana-data/src/transformations/fieldReducer.ts index aaf400ba105..c593ac47346 100644 --- a/packages/grafana-data/src/transformations/fieldReducer.ts +++ b/packages/grafana-data/src/transformations/fieldReducer.ts @@ -25,6 +25,7 @@ export enum ReducerID { allIsZero = 'allIsZero', allIsNull = 'allIsNull', allValues = 'allValues', + uniqueValues = 'uniqueValues', } // Internal function @@ -237,6 +238,15 @@ export const fieldReducers = new Registry(() => [ standard: false, reduce: (field: Field) => ({ allValues: field.values.toArray() }), }, + { + id: ReducerID.uniqueValues, + name: 'All unique values', + description: 'Returns an array with all unique values', + standard: false, + reduce: (field: Field) => ({ + uniqueValues: [...new Set(field.values.toArray())], + }), + }, ]); export function doStandardCalcs(field: Field, ignoreNulls: boolean, nullAsZero: boolean): FieldCalcs {