mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
OuterJoin: Fixes transformation when data is missing field to join by (#27453)
This commit is contained in:
parent
023054bc62
commit
883d7cb578
@ -288,4 +288,62 @@ describe('SeriesToColumns Transformer', () => {
|
|||||||
expect(filtered.fields).toEqual(expected);
|
expect(filtered.fields).toEqual(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('joins if fields are missing', () => {
|
||||||
|
const cfg: DataTransformerConfig<SeriesToColumnsOptions> = {
|
||||||
|
id: DataTransformerID.seriesToColumns,
|
||||||
|
options: {
|
||||||
|
byField: 'time',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const frame1 = toDataFrame({
|
||||||
|
name: 'A',
|
||||||
|
fields: [
|
||||||
|
{ name: 'time', type: FieldType.time, values: [1, 2, 3] },
|
||||||
|
{ name: 'temperature', type: FieldType.number, values: [10, 11, 12] },
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
const frame2 = toDataFrame({
|
||||||
|
name: 'B',
|
||||||
|
fields: [],
|
||||||
|
});
|
||||||
|
|
||||||
|
const frame3 = toDataFrame({
|
||||||
|
name: 'C',
|
||||||
|
fields: [
|
||||||
|
{ name: 'time', type: FieldType.time, values: [1, 2, 3] },
|
||||||
|
{ name: 'temperature', type: FieldType.number, values: [20, 22, 24] },
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
const filtered = transformDataFrame([cfg], [frame1, frame2, frame3])[0];
|
||||||
|
|
||||||
|
expect(filtered.fields).toEqual([
|
||||||
|
{
|
||||||
|
name: 'time',
|
||||||
|
state: { displayName: 'time' },
|
||||||
|
type: FieldType.time,
|
||||||
|
values: new ArrayVector([1, 2, 3]),
|
||||||
|
config: {},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'temperature',
|
||||||
|
state: { displayName: 'temperature A' },
|
||||||
|
type: FieldType.number,
|
||||||
|
values: new ArrayVector([10, 11, 12]),
|
||||||
|
config: {},
|
||||||
|
labels: { name: 'A' },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'temperature',
|
||||||
|
state: { displayName: 'temperature C' },
|
||||||
|
type: FieldType.number,
|
||||||
|
values: new ArrayVector([20, 22, 24]),
|
||||||
|
config: {},
|
||||||
|
labels: { name: 'C' },
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -26,7 +26,7 @@ export const seriesToColumnsTransformer: DataTransformerInfo<SeriesToColumnsOpti
|
|||||||
const keyField = findKeyField(frame, keyFieldMatch);
|
const keyField = findKeyField(frame, keyFieldMatch);
|
||||||
|
|
||||||
if (!keyField) {
|
if (!keyField) {
|
||||||
return data;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let fieldIndex = 0; fieldIndex < frame.fields.length; fieldIndex++) {
|
for (let fieldIndex = 0; fieldIndex < frame.fields.length; fieldIndex++) {
|
||||||
@ -74,8 +74,8 @@ export const seriesToColumnsTransformer: DataTransformerInfo<SeriesToColumnsOpti
|
|||||||
const keyFieldTitle = getFieldDisplayName(resultFrame.fields[0], resultFrame);
|
const keyFieldTitle = getFieldDisplayName(resultFrame.fields[0], resultFrame);
|
||||||
const byKeyField: { [key: string]: { [key: string]: any } } = {};
|
const byKeyField: { [key: string]: { [key: string]: any } } = {};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
this loop creates a dictionary object that groups the key fields values
|
this loop creates a dictionary object that groups the key fields values
|
||||||
{
|
{
|
||||||
"key field first value as string" : {
|
"key field first value as string" : {
|
||||||
"key field name": key field first value,
|
"key field name": key field first value,
|
||||||
|
Loading…
Reference in New Issue
Block a user