From 921cbc77be0fce6b8464af79e74b17b4d23238dc Mon Sep 17 00:00:00 2001 From: Ihor Yeromin Date: Wed, 9 Jul 2025 16:33:36 +0200 Subject: [PATCH 1/2] feat(transformations): allow groupBy aggregation --- .../src/transformations/transformers/groupBy.ts | 6 +----- .../transformers/editors/GroupByTransformerEditor.tsx | 10 +++------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/packages/grafana-data/src/transformations/transformers/groupBy.ts b/packages/grafana-data/src/transformations/transformers/groupBy.ts index f00219a5657..8048c17faa7 100644 --- a/packages/grafana-data/src/transformations/transformers/groupBy.ts +++ b/packages/grafana-data/src/transformations/transformers/groupBy.ts @@ -146,11 +146,7 @@ export const groupByTransformer: DataTransformerInfo const shouldCalculateField = (field: Field, options: GroupByTransformerOptions): boolean => { const fieldName = getFieldDisplayName(field); - return ( - options?.fields[fieldName]?.operation === GroupByOperationID.aggregate && - Array.isArray(options?.fields[fieldName].aggregations) && - options?.fields[fieldName].aggregations.length > 0 - ); + return Array.isArray(options?.fields[fieldName]?.aggregations) && options?.fields[fieldName].aggregations.length > 0; }; /** diff --git a/public/app/features/transformers/editors/GroupByTransformerEditor.tsx b/public/app/features/transformers/editors/GroupByTransformerEditor.tsx index 91c01232de2..2396e471889 100644 --- a/public/app/features/transformers/editors/GroupByTransformerEditor.tsx +++ b/public/app/features/transformers/editors/GroupByTransformerEditor.tsx @@ -24,11 +24,7 @@ interface FieldProps { onConfigChange: (config: GroupByFieldOptions) => void; } -export const GroupByTransformerEditor = ({ - input, - options, - onChange, -}: TransformerUIProps) => { +const GroupByTransformerEditor = ({ input, options, onChange }: TransformerUIProps) => { const fieldNames = useAllFieldNamesFromDataFrames(input, true); const onConfigChange = useCallback( @@ -91,7 +87,7 @@ const options = [ { label: 'Calculate', value: GroupByOperationID.aggregate }, ]; -export const GroupByFieldConfiguration = ({ fieldName, config, onConfigChange }: FieldProps) => { +const GroupByFieldConfiguration = ({ fieldName, config, onConfigChange }: FieldProps) => { const theme = useTheme2(); const styles = getStyles(theme); @@ -119,7 +115,7 @@ export const GroupByFieldConfiguration = ({ fieldName, config, onConfigChange }: /> - {config?.operation === GroupByOperationID.aggregate && ( + {config?.operation && ( Date: Mon, 14 Jul 2025 16:39:39 +0200 Subject: [PATCH 2/2] feat(transformations): filter selection --- .../grafana-data/src/transformations/transformers/groupBy.ts | 2 +- .../features/transformers/editors/GroupByTransformerEditor.tsx | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/grafana-data/src/transformations/transformers/groupBy.ts b/packages/grafana-data/src/transformations/transformers/groupBy.ts index 8048c17faa7..f6eb212a138 100644 --- a/packages/grafana-data/src/transformations/transformers/groupBy.ts +++ b/packages/grafana-data/src/transformations/transformers/groupBy.ts @@ -10,7 +10,7 @@ import { FieldMatcherID } from '../matchers/ids'; import { DataTransformerID } from './ids'; import { findMaxFields } from './utils'; -const MINIMUM_FIELDS_REQUIRED = 2; +const MINIMUM_FIELDS_REQUIRED = 1; export enum GroupByOperationID { aggregate = 'aggregate', diff --git a/public/app/features/transformers/editors/GroupByTransformerEditor.tsx b/public/app/features/transformers/editors/GroupByTransformerEditor.tsx index 2396e471889..526a9aa705b 100644 --- a/public/app/features/transformers/editors/GroupByTransformerEditor.tsx +++ b/public/app/features/transformers/editors/GroupByTransformerEditor.tsx @@ -124,6 +124,9 @@ const GroupByFieldConfiguration = ({ fieldName, config, onConfigChange }: FieldP onChange={(stats) => { onConfigChange({ ...config, aggregations: stats as ReducerID[] }); }} + filterOptions={(option) => + config?.operation === GroupByOperationID.groupBy ? option.id === ReducerID.count : true + } /> )}