Skip to content

Commit f3561c0

Browse files
[9.2] [Lens][Table] Fix filtering on tables with formula columns (#239222) (#239235)
# Backport This will backport the following commits from `main` to `9.2`: - [[Lens][Table] Fix filtering on tables with formula columns (#239222)](#239222) <!--- Backport version: 9.6.6 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Nick Partridge","email":"[email protected]"},"sourceCommit":{"committedDate":"2025-10-15T20:57:22Z","message":"[Lens][Table] Fix filtering on tables with formula columns (#239222)\n\n## Summary\n\nFixes a bug in the Lens Table that broke **click to filter** on table rows when any column is used as a formula.\n\n## Release Notes\n\nFixes a bug in the Lens Table that broke **click to filter** on table\nrows when any column is used as a formula.","sha":"b0bac3df208a70bda7509fb96709d24d78dd2aba","branchLabelMapping":{"^v9.3.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Team:Visualizations","Feature:Lens","backport:all-open","v9.3.0"],"title":"[Lens][Table] Fix filtering on tables with formula columns","number":239222,"url":"https://github.com/elastic/kibana/pull/239222","mergeCommit":{"message":"[Lens][Table] Fix filtering on tables with formula columns (#239222)\n\n## Summary\n\nFixes a bug in the Lens Table that broke **click to filter** on table rows when any column is used as a formula.\n\n## Release Notes\n\nFixes a bug in the Lens Table that broke **click to filter** on table\nrows when any column is used as a formula.","sha":"b0bac3df208a70bda7509fb96709d24d78dd2aba"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.3.0","branchLabelMappingKey":"^v9.3.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/239222","number":239222,"mergeCommit":{"message":"[Lens][Table] Fix filtering on tables with formula columns (#239222)\n\n## Summary\n\nFixes a bug in the Lens Table that broke **click to filter** on table rows when any column is used as a formula.\n\n## Release Notes\n\nFixes a bug in the Lens Table that broke **click to filter** on table\nrows when any column is used as a formula.","sha":"b0bac3df208a70bda7509fb96709d24d78dd2aba"}}]}] BACKPORT--> Co-authored-by: Nick Partridge <[email protected]>
1 parent 9092608 commit f3561c0

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

x-pack/platform/plugins/shared/lens/common/expressions/impl/datatable/datatable_fn.test.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,31 @@ describe('datatableFn', () => {
119119
expect(resultColumnIds).toEqual(expectedColumnIds);
120120
expect(resultColumnIds).toEqual(['bucket1', 'bucket2', 'bucket3', 'metric1', 'metric2']);
121121
});
122+
123+
// This is needed for ghost formula columns, see https://github.com/elastic/kibana/issues/239170
124+
it('should sort unknown columns in table by order of args.columns', async () => {
125+
const table = buildTable();
126+
const shuffledTable: Datatable = {
127+
...table,
128+
columns: shuffle([
129+
...table.columns,
130+
{ id: 'unknown', name: 'unknown', meta: { type: 'number' } },
131+
]),
132+
};
133+
const args = buildArgs();
134+
const result = await datatableFn(() => mockFormatFactory)(shuffledTable, args, context);
135+
136+
const resultColumnIds = result.value.data.columns.map((c) => c.id);
137+
const expectedColumnIds = args.columns.map((c) => c.columnId).concat('unknown');
138+
139+
expect(resultColumnIds).toEqual(expectedColumnIds);
140+
expect(resultColumnIds).toEqual([
141+
'bucket1',
142+
'bucket2',
143+
'bucket3',
144+
'metric1',
145+
'metric2',
146+
'unknown',
147+
]);
148+
});
122149
});

x-pack/platform/plugins/shared/lens/common/expressions/impl/datatable/datatable_fn.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export const datatableFn =
2121
): DatatableExpressionFunction['fn'] =>
2222
async (table, args, context) => {
2323
const columnSortMap = args.columns.reduce((acc, c, i) => acc.set(c.columnId, i), new Map());
24-
const getColumnSort = (id: string) => columnSortMap.get(id) ?? -1;
24+
const getColumnSort = (id: string) => columnSortMap.get(id) ?? Infinity;
2525
const sortedTable: Datatable = {
2626
...table,
2727
columns: table.columns.slice().sort((a, b) => getColumnSort(a.id) - getColumnSort(b.id)),

0 commit comments

Comments
 (0)