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',
|
||||
fields: [
|
||||
{ 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] },
|
||||
],
|
||||
});
|
||||
@ -52,7 +52,14 @@ describe('Reducer Transformer', () => {
|
||||
const cfg = {
|
||||
id: DataTransformerID.reduce,
|
||||
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],
|
||||
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);
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { map } from 'rxjs/operators';
|
||||
|
||||
import { guessFieldTypeForField, guessFieldTypeFromValue } from '../../dataframe/processDataFrame';
|
||||
import { guessFieldTypeForField } from '../../dataframe/processDataFrame';
|
||||
import { getFieldDisplayName } from '../../field';
|
||||
import { KeyValue } from '../../types/data';
|
||||
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 reducers = calculators.map((c) => c.id);
|
||||
const processed: DataFrame[] = [];
|
||||
|
||||
for (const series of data) {
|
||||
const fields: Field[] = [];
|
||||
for (const field of series.fields) {
|
||||
@ -224,7 +223,7 @@ export function reduceFields(data: DataFrame[], matcher: FieldMatcher, reducerId
|
||||
const value = results[reducer];
|
||||
const copy = {
|
||||
...field,
|
||||
type: guessFieldTypeFromValue(value),
|
||||
type: getFieldType(reducer, field),
|
||||
values: [value],
|
||||
};
|
||||
copy.state = undefined;
|
||||
@ -249,3 +248,18 @@ export function reduceFields(data: DataFrame[], matcher: FieldMatcher, reducerId
|
||||
|
||||
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