mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Transformations: Fix converting time fields to number in reduceFields (#81830)
* Fix bug converting time fields to number in reduce --------- Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
This commit is contained in:
parent
903e54e622
commit
633e354a76
@ -21,7 +21,7 @@ const seriesAWithMultipleFields = toDataFrame({
|
|||||||
name: 'A',
|
name: 'A',
|
||||||
fields: [
|
fields: [
|
||||||
{ name: 'time', type: FieldType.time, values: [3000, 4000, 5000, 6000] },
|
{ name: 'time', type: FieldType.time, values: [3000, 4000, 5000, 6000] },
|
||||||
{ name: 'temperature', type: FieldType.number, values: [3, 4, 5, 6] },
|
{ name: 'temperature', type: FieldType.number, values: [3, 4, 5, 6, 6] },
|
||||||
{ name: 'humidity', type: FieldType.number, values: [10000.3, 10000.4, 10000.5, 10000.6] },
|
{ name: 'humidity', type: FieldType.number, values: [10000.3, 10000.4, 10000.5, 10000.6] },
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
@ -52,7 +52,14 @@ describe('Reducer Transformer', () => {
|
|||||||
const cfg = {
|
const cfg = {
|
||||||
id: DataTransformerID.reduce,
|
id: DataTransformerID.reduce,
|
||||||
options: {
|
options: {
|
||||||
reducers: [ReducerID.first, ReducerID.min, ReducerID.max, ReducerID.last],
|
reducers: [
|
||||||
|
ReducerID.first,
|
||||||
|
ReducerID.min,
|
||||||
|
ReducerID.max,
|
||||||
|
ReducerID.last,
|
||||||
|
ReducerID.uniqueValues,
|
||||||
|
ReducerID.count,
|
||||||
|
],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -90,6 +97,25 @@ describe('Reducer Transformer', () => {
|
|||||||
values: [6, 10000.6, 7, 11000.7],
|
values: [6, 10000.6, 7, 11000.7],
|
||||||
config: {},
|
config: {},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// expect type other
|
||||||
|
name: 'All unique values',
|
||||||
|
type: FieldType.other,
|
||||||
|
values: [
|
||||||
|
[3, 4, 5, 6],
|
||||||
|
[10000.3, 10000.4, 10000.5, 10000.6],
|
||||||
|
[1, 3, 5, 7],
|
||||||
|
[11000.1, 11000.3, 11000.5, 11000.7],
|
||||||
|
],
|
||||||
|
config: {},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// expect type number
|
||||||
|
name: 'Count',
|
||||||
|
type: FieldType.number,
|
||||||
|
values: [5, 4, 4, 4],
|
||||||
|
config: {},
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
expect(processed.length).toEqual(1);
|
expect(processed.length).toEqual(1);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { map } from 'rxjs/operators';
|
import { map } from 'rxjs/operators';
|
||||||
|
|
||||||
import { guessFieldTypeForField, guessFieldTypeFromValue } from '../../dataframe/processDataFrame';
|
import { guessFieldTypeForField } from '../../dataframe/processDataFrame';
|
||||||
import { getFieldDisplayName } from '../../field';
|
import { getFieldDisplayName } from '../../field';
|
||||||
import { KeyValue } from '../../types/data';
|
import { KeyValue } from '../../types/data';
|
||||||
import { DataFrame, Field, FieldType } from '../../types/dataFrame';
|
import { DataFrame, Field, FieldType } from '../../types/dataFrame';
|
||||||
@ -211,7 +211,6 @@ export function reduceFields(data: DataFrame[], matcher: FieldMatcher, reducerId
|
|||||||
const calculators = fieldReducers.list(reducerId);
|
const calculators = fieldReducers.list(reducerId);
|
||||||
const reducers = calculators.map((c) => c.id);
|
const reducers = calculators.map((c) => c.id);
|
||||||
const processed: DataFrame[] = [];
|
const processed: DataFrame[] = [];
|
||||||
|
|
||||||
for (const series of data) {
|
for (const series of data) {
|
||||||
const fields: Field[] = [];
|
const fields: Field[] = [];
|
||||||
for (const field of series.fields) {
|
for (const field of series.fields) {
|
||||||
@ -224,7 +223,7 @@ export function reduceFields(data: DataFrame[], matcher: FieldMatcher, reducerId
|
|||||||
const value = results[reducer];
|
const value = results[reducer];
|
||||||
const copy = {
|
const copy = {
|
||||||
...field,
|
...field,
|
||||||
type: guessFieldTypeFromValue(value),
|
type: getFieldType(reducer, field),
|
||||||
values: [value],
|
values: [value],
|
||||||
};
|
};
|
||||||
copy.state = undefined;
|
copy.state = undefined;
|
||||||
@ -249,3 +248,18 @@ export function reduceFields(data: DataFrame[], matcher: FieldMatcher, reducerId
|
|||||||
|
|
||||||
return processed;
|
return processed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFieldType(reducer: string, field: Field) {
|
||||||
|
switch (reducer) {
|
||||||
|
case ReducerID.allValues:
|
||||||
|
case ReducerID.uniqueValues:
|
||||||
|
return FieldType.other;
|
||||||
|
case ReducerID.first:
|
||||||
|
case ReducerID.firstNotNull:
|
||||||
|
case ReducerID.last:
|
||||||
|
case ReducerID.lastNotNull:
|
||||||
|
return field.type;
|
||||||
|
default:
|
||||||
|
return FieldType.number;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user