From 7fd5121c4fa523e33990d3228826db3ac327d2a6 Mon Sep 17 00:00:00 2001 From: KgOfHedgehogs Date: Wed, 20 Aug 2025 19:19:47 +0200 Subject: [PATCH] Transformations: Fix `Partition by values` transform missing `refId` (#106417) * Fix partition by values missing refId * have partitioned refID include original refID --------- Co-authored-by: Kristina Durivage --- .../partitionByValues.test.ts | 33 +++++++++++++++++++ .../partitionByValues/partitionByValues.ts | 1 + 2 files changed, 34 insertions(+) diff --git a/public/app/features/transformers/partitionByValues/partitionByValues.test.ts b/public/app/features/transformers/partitionByValues/partitionByValues.test.ts index 337efd10215..2431f5a2f5e 100644 --- a/public/app/features/transformers/partitionByValues/partitionByValues.test.ts +++ b/public/app/features/transformers/partitionByValues/partitionByValues.test.ts @@ -35,6 +35,7 @@ describe('Partition by values transformer', () => { expect(partitioned[0].length).toEqual(3); expect(partitioned[0].name).toEqual('Europe'); + expect(partitioned[0].refId).toEqual('A-Europe'); expect(partitioned[0].fields[0].name).toEqual('model'); expect(partitioned[0].fields[1].name).toEqual('region'); expect(partitioned[0].fields[0].values).toEqual(['E1', 'E2', 'E3']); @@ -42,6 +43,7 @@ describe('Partition by values transformer', () => { expect(partitioned[1].length).toEqual(3); expect(partitioned[1].name).toEqual('China'); + expect(partitioned[1].refId).toEqual('A-China'); expect(partitioned[1].fields[0].name).toEqual('model'); expect(partitioned[1].fields[1].name).toEqual('region'); expect(partitioned[1].fields[0].values).toEqual(['C1', 'C2', 'C3']); @@ -75,6 +77,7 @@ describe('Partition by values transformer', () => { expect(partitioned[0].length).toEqual(1); expect(partitioned[0].name).toEqual('Europe OK'); + expect(partitioned[0].refId).toEqual('A-Europe OK'); expect(partitioned[0].fields[0].name).toEqual('model'); expect(partitioned[0].fields[1].name).toEqual('region'); expect(partitioned[0].fields[2].name).toEqual('status'); @@ -84,6 +87,7 @@ describe('Partition by values transformer', () => { expect(partitioned[1].length).toEqual(2); expect(partitioned[1].name).toEqual('Europe FAIL'); + expect(partitioned[1].refId).toEqual('A-Europe FAIL'); expect(partitioned[1].fields[0].name).toEqual('model'); expect(partitioned[1].fields[1].name).toEqual('region'); expect(partitioned[1].fields[2].name).toEqual('status'); @@ -93,6 +97,7 @@ describe('Partition by values transformer', () => { expect(partitioned[2].length).toEqual(2); expect(partitioned[2].name).toEqual('China OK'); + expect(partitioned[2].refId).toEqual('A-China OK'); expect(partitioned[2].fields[0].name).toEqual('model'); expect(partitioned[2].fields[1].name).toEqual('region'); expect(partitioned[2].fields[2].name).toEqual('status'); @@ -102,6 +107,7 @@ describe('Partition by values transformer', () => { expect(partitioned[3].length).toEqual(1); expect(partitioned[3].name).toEqual('China FAIL'); + expect(partitioned[3].refId).toEqual('A-China FAIL'); expect(partitioned[3].fields[0].name).toEqual('model'); expect(partitioned[3].fields[1].name).toEqual('region'); expect(partitioned[3].fields[2].name).toEqual('status'); @@ -135,9 +141,16 @@ describe('Partition by values transformer', () => { let partitioned = partitionByValuesTransformer.transformer(config, ctx)(source); expect(partitioned[0].name).toEqual('region=Europe status=OK'); + expect(partitioned[0].refId).toEqual('A-region=Europe status=OK'); + expect(partitioned[1].name).toEqual('region=Europe status=FAIL'); + expect(partitioned[1].refId).toEqual('A-region=Europe status=FAIL'); + expect(partitioned[2].name).toEqual('region=China status=OK'); + expect(partitioned[2].refId).toEqual('A-region=China status=OK'); + expect(partitioned[3].name).toEqual('region=China status=FAIL'); + expect(partitioned[3].refId).toEqual('A-region=China status=FAIL'); }); it('should partition by multiple fields with custom frame naming {append: true}', () => { @@ -165,9 +178,16 @@ describe('Partition by values transformer', () => { let partitioned = partitionByValuesTransformer.transformer(config, ctx)(source); expect(partitioned[0].name).toEqual('XYZ Europe OK'); + expect(partitioned[0].refId).toEqual('A-XYZ Europe OK'); + expect(partitioned[1].name).toEqual('XYZ Europe FAIL'); + expect(partitioned[1].refId).toEqual('A-XYZ Europe FAIL'); + expect(partitioned[2].name).toEqual('XYZ China OK'); + expect(partitioned[2].refId).toEqual('A-XYZ China OK'); + expect(partitioned[3].name).toEqual('XYZ China FAIL'); + expect(partitioned[3].refId).toEqual('A-XYZ China FAIL'); }); it('should partition by multiple fields with custom frame naming {withNames: true, append: true}', () => { @@ -196,9 +216,16 @@ describe('Partition by values transformer', () => { let partitioned = partitionByValuesTransformer.transformer(config, ctx)(source); expect(partitioned[0].name).toEqual('XYZ region=Europe status=OK'); + expect(partitioned[0].refId).toEqual('A-XYZ region=Europe status=OK'); + expect(partitioned[1].name).toEqual('XYZ region=Europe status=FAIL'); + expect(partitioned[1].refId).toEqual('A-XYZ region=Europe status=FAIL'); + expect(partitioned[2].name).toEqual('XYZ region=China status=OK'); + expect(partitioned[2].refId).toEqual('A-XYZ region=China status=OK'); + expect(partitioned[3].name).toEqual('XYZ region=China status=FAIL'); + expect(partitioned[3].refId).toEqual('A-XYZ region=China status=FAIL'); }); it('should partition by multiple fields naming: {asLabels: true}', () => { @@ -230,6 +257,12 @@ describe('Partition by values transformer', () => { expect(partitioned[2].name).toEqual('XYZ'); expect(partitioned[3].name).toEqual('XYZ'); + // all frame refIds are same + expect(partitioned[0].refId).toEqual('A-XYZ'); + expect(partitioned[1].refId).toEqual('A-XYZ'); + expect(partitioned[2].refId).toEqual('A-XYZ'); + expect(partitioned[3].refId).toEqual('A-XYZ'); + // all frames contain all fields expect(partitioned[0].fields[0].name).toEqual('model'); expect(partitioned[0].fields[1].name).toEqual('region'); diff --git a/public/app/features/transformers/partitionByValues/partitionByValues.ts b/public/app/features/transformers/partitionByValues/partitionByValues.ts index e0da0630cc0..4cef11b0673 100644 --- a/public/app/features/transformers/partitionByValues/partitionByValues.ts +++ b/public/app/features/transformers/partitionByValues/partitionByValues.ts @@ -149,6 +149,7 @@ export function partitionByValues( return { name: frameName, + refId: `${frame.refId}-${frameName}`, meta: frame.meta, length: idxs.length, fields: filteredFields.map((f) => {