From 5f40f5f1bbabad45cc3608dc59989912fee4e2c0 Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Tue, 21 Apr 2026 03:24:41 +0000 Subject: [PATCH] fix(charts): use separator-aware matching in renameOperator for time offsets The `includes(offset)` substring match caused "11 year ago" to match "1 year ago", producing duplicate column names that crash the backend with "truth value of a Series is ambiguous". Switch to `endsWith` with the `__` separator prefix for exact offset matching. Co-Authored-By: Claude Opus 4.6 --- .../src/operators/renameOperator.ts | 4 +++- .../test/operators/renameOperator.test.ts | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/operators/renameOperator.ts b/superset-frontend/packages/superset-ui-chart-controls/src/operators/renameOperator.ts index 86643e26822..1f08cdc7926 100644 --- a/superset-frontend/packages/superset-ui-chart-controls/src/operators/renameOperator.ts +++ b/superset-frontend/packages/superset-ui-chart-controls/src/operators/renameOperator.ts @@ -67,7 +67,9 @@ export const renameOperator: PostProcessingFactory = ( [...metricOffsetMap.entries()].forEach( ([metricWithOffset, metricOnly]) => { const offsetLabel = timeOffsets.find(offset => - metricWithOffset.includes(offset), + metricWithOffset.endsWith( + `${TIME_COMPARISON_SEPARATOR}${offset}`, + ), ); renamePairs.push([ formData.comparison_type === ComparisonType.Values diff --git a/superset-frontend/packages/superset-ui-chart-controls/test/operators/renameOperator.test.ts b/superset-frontend/packages/superset-ui-chart-controls/test/operators/renameOperator.test.ts index 4ef3212c429..e07b7cf3c3f 100644 --- a/superset-frontend/packages/superset-ui-chart-controls/test/operators/renameOperator.test.ts +++ b/superset-frontend/packages/superset-ui-chart-controls/test/operators/renameOperator.test.ts @@ -303,6 +303,30 @@ test('should add renameOperator if multiple metrics exist', () => { }); }); +test('should correctly match offsets that share a numeric prefix', () => { + expect( + renameOperator( + { + ...formData, + + comparison_type: ComparisonType.Values, + time_compare: ['1 year ago', '11 year ago'], + }, + queryObject, + ), + ).toEqual({ + operation: 'rename', + options: { + columns: { + 'count(*)__1 year ago': '1 year ago', + 'count(*)__11 year ago': '11 year ago', + }, + inplace: true, + level: 0, + }, + }); +}); + test('should remove renameOperator', () => { expect( renameOperator(