Skip to content

Commit d85f32e

Browse files
dej611kibanamachine
andcommitted
[Lens] Remove Over time suggestions for numeric intervals (#78442)
Co-authored-by: Kibana Machine <[email protected]>
1 parent 580264f commit d85f32e

File tree

3 files changed

+132
-4
lines changed

3 files changed

+132
-4
lines changed

x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.test.tsx

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,6 +1381,126 @@ describe('IndexPattern Data Source suggestions', () => {
13811381
);
13821382
});
13831383

1384+
it('does not create an over time suggestion if tables with numeric buckets with time dimension', async () => {
1385+
const initialState = testInitialState();
1386+
const state: IndexPatternPrivateState = {
1387+
...initialState,
1388+
layers: {
1389+
first: {
1390+
indexPatternId: '1',
1391+
columnOrder: ['colb', 'cola'],
1392+
columns: {
1393+
cola: {
1394+
dataType: 'number',
1395+
isBucketed: false,
1396+
sourceField: 'dest',
1397+
label: 'Unique count of dest',
1398+
operationType: 'cardinality',
1399+
},
1400+
colb: {
1401+
label: 'My Op',
1402+
dataType: 'number',
1403+
isBucketed: true,
1404+
operationType: 'range',
1405+
sourceField: 'bytes',
1406+
scale: 'interval',
1407+
params: {
1408+
type: 'histogram',
1409+
maxBars: 100,
1410+
ranges: [],
1411+
},
1412+
},
1413+
},
1414+
},
1415+
},
1416+
};
1417+
1418+
expect(getDatasourceSuggestionsFromCurrentState(state)).not.toContainEqual(
1419+
expect.objectContaining({
1420+
table: {
1421+
isMultiRow: true,
1422+
label: 'Over time',
1423+
layerId: 'first',
1424+
},
1425+
})
1426+
);
1427+
});
1428+
1429+
it('adds date histogram over default time field for custom range intervals', async () => {
1430+
const initialState = testInitialState();
1431+
const state: IndexPatternPrivateState = {
1432+
...initialState,
1433+
layers: {
1434+
first: {
1435+
indexPatternId: '1',
1436+
columnOrder: ['colb', 'cola'],
1437+
columns: {
1438+
cola: {
1439+
dataType: 'number',
1440+
isBucketed: false,
1441+
sourceField: 'dest',
1442+
label: 'Unique count of dest',
1443+
operationType: 'cardinality',
1444+
},
1445+
colb: {
1446+
label: 'My Custom Range',
1447+
dataType: 'string',
1448+
isBucketed: true,
1449+
operationType: 'range',
1450+
sourceField: 'bytes',
1451+
scale: 'ordinal',
1452+
params: {
1453+
type: 'range',
1454+
maxBars: 100,
1455+
ranges: [{ from: 1, to: 2, label: '' }],
1456+
},
1457+
},
1458+
},
1459+
},
1460+
},
1461+
};
1462+
1463+
expect(getDatasourceSuggestionsFromCurrentState(state)).toContainEqual(
1464+
expect.objectContaining({
1465+
table: {
1466+
changeType: 'extended',
1467+
columns: [
1468+
{
1469+
columnId: 'colb',
1470+
operation: {
1471+
dataType: 'string',
1472+
isBucketed: true,
1473+
label: 'My Custom Range',
1474+
scale: 'ordinal',
1475+
},
1476+
},
1477+
{
1478+
columnId: 'id1',
1479+
operation: {
1480+
dataType: 'date',
1481+
isBucketed: true,
1482+
label: 'timestampLabel',
1483+
scale: 'interval',
1484+
},
1485+
},
1486+
{
1487+
columnId: 'cola',
1488+
operation: {
1489+
dataType: 'number',
1490+
isBucketed: false,
1491+
label: 'Unique count of dest',
1492+
scale: undefined,
1493+
},
1494+
},
1495+
],
1496+
isMultiRow: true,
1497+
label: 'Over time',
1498+
layerId: 'first',
1499+
},
1500+
})
1501+
);
1502+
});
1503+
13841504
it('does not create an over time suggestion if there is no default time field', async () => {
13851505
const initialState = testInitialState();
13861506
const state: IndexPatternPrivateState = {

x-pack/plugins/lens/public/indexpattern_datasource/indexpattern_suggestions.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,10 @@ export function getDatasourceSuggestionsFromCurrentState(
455455
({ name }) => name === indexPattern.timeFieldName
456456
);
457457

458+
const hasNumericDimension =
459+
buckets.length === 1 &&
460+
buckets.some((columnId) => layer.columns[columnId].dataType === 'number');
461+
458462
const suggestions: Array<DatasourceSuggestion<IndexPatternPrivateState>> = [];
459463
if (metrics.length === 0) {
460464
// intermediary chart without metric, don't try to suggest reduced versions
@@ -482,7 +486,9 @@ export function getDatasourceSuggestionsFromCurrentState(
482486
} else {
483487
suggestions.push(...createSimplifiedTableSuggestions(state, layerId));
484488

485-
if (!timeDimension && timeField) {
489+
// base range intervals are of number dataType.
490+
// Custom range/intervals have a different dataType so they still receive the Over Time suggestion
491+
if (!timeDimension && timeField && !hasNumericDimension) {
486492
// suggest current configuration over time if there is a default time field
487493
// and no time dimension yet
488494
suggestions.push(createSuggestionWithDefaultDateHistogram(state, layerId, timeField));
@@ -653,9 +659,13 @@ function createSuggestionWithDefaultDateHistogram(
653659
field: timeField,
654660
suggestedPriority: undefined,
655661
});
662+
656663
const updatedLayer = {
657664
indexPatternId: layer.indexPatternId,
658-
columns: { ...layer.columns, [newId]: timeColumn },
665+
columns: {
666+
...layer.columns,
667+
[newId]: timeColumn,
668+
},
659669
columnOrder: [...buckets, newId, ...metrics],
660670
};
661671
return buildSuggestion({

x-pack/plugins/lens/public/xy_visualization/xy_suggestions.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,6 @@ function flipSeriesType(seriesType: SeriesType) {
126126
return 'bar_stacked';
127127
case 'bar':
128128
return 'bar_horizontal';
129-
case 'bar_horizontal_stacked':
130-
return 'bar_stacked';
131129
case 'bar_horizontal_percentage_stacked':
132130
return 'bar_percentage_stacked';
133131
case 'bar_percentage_stacked':

0 commit comments

Comments
 (0)