From 173636aa613c781539087b02e6f3b4b2911a588e Mon Sep 17 00:00:00 2001 From: Leon Sorokin Date: Wed, 6 Jul 2022 10:13:32 -0500 Subject: [PATCH] Histogram: filter nulls, bucket-adaptive xAxis decimals (#51773) --- .../transformations/transformers/histogram.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/grafana-data/src/transformations/transformers/histogram.ts b/packages/grafana-data/src/transformations/transformers/histogram.ts index 9dc72bcfd31..58bc951d2e2 100644 --- a/packages/grafana-data/src/transformations/transformers/histogram.ts +++ b/packages/grafana-data/src/transformations/transformers/histogram.ts @@ -160,13 +160,13 @@ export function buildHistogram(frames: DataFrame[], options?: HistogramTransform for (const frame of frames) { for (const field of frame.fields) { if (field.type === FieldType.number) { - allValues = allValues.concat( - field.values.toArray().map((val: number) => Number(val.toFixed(field.config.decimals ?? 0))) - ); + allValues = allValues.concat(field.values.toArray()); } } } + allValues = allValues.filter((v) => v != null); + allValues.sort((a, b) => a - b); let smallestDelta = Infinity; @@ -204,6 +204,9 @@ export function buildHistogram(frames: DataFrame[], options?: HistogramTransform const getBucket = (v: number) => incrRoundDn(v - bucketOffset, bucketSize!) + bucketOffset; + // guess number of decimals + let bucketDecimals = (('' + bucketSize).match(/\.\d+$/) ?? ['.'])[0].length - 1; + let histograms: AlignedData[] = []; let counts: Field[] = []; let config: FieldConfig | undefined = undefined; @@ -220,7 +223,7 @@ export function buildHistogram(frames: DataFrame[], options?: HistogramTransform unit: undefined, }, }); - if (!config && Object.keys(field.config).length) { + if (!config && field.config.unit) { config = field.config; } } @@ -251,7 +254,13 @@ export function buildHistogram(frames: DataFrame[], options?: HistogramTransform values: new ArrayVector(joinedHists[0]), type: FieldType.number, state: undefined, - config: config ?? {}, + config: + bucketDecimals === 0 + ? config ?? {} + : { + ...config, + decimals: bucketDecimals, + }, }; const bucketMax = { ...bucketMin,