From 6d0dfa1e622d642df5727f6291b1cb1ee265ed6f Mon Sep 17 00:00:00 2001 From: Nar Saynorath Date: Tue, 14 Apr 2026 15:17:08 -0400 Subject: [PATCH 01/11] feat(tracemetrics): Enable aggregate panel to show equation result --- .../hooks/useMetricAggregatesTable.tsx | 26 ++++++++++++++---- .../metrics/metricInfoTabs/aggregatesTab.tsx | 23 +++++++++++----- .../explore/metrics/metricPanel/index.tsx | 27 ++++++++++++------- 3 files changed, 55 insertions(+), 21 deletions(-) diff --git a/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx b/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx index 075b823f7c2171..52978dff9a28db 100644 --- a/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx +++ b/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx @@ -1,4 +1,4 @@ -import {useCallback, useMemo} from 'react'; +import {useCallback, useMemo, useRef} from 'react'; import {usePageFilters} from 'sentry/components/pageFilters/usePageFilters'; import type {NewQuery} from 'sentry/types/organization'; @@ -11,7 +11,10 @@ import { type RPCQueryExtras, } from 'sentry/views/explore/hooks/useProgressiveQuery'; import type {TraceMetric} from 'sentry/views/explore/metrics/metricQuery'; -import {useMetricVisualizes} from 'sentry/views/explore/metrics/metricsQueryParams'; +import { + useMetricVisualize, + useMetricVisualizes, +} from 'sentry/views/explore/metrics/metricsQueryParams'; import {TraceMetricKnownFieldKey} from 'sentry/views/explore/metrics/types'; import {makeMetricsAggregate} from 'sentry/views/explore/metrics/utils'; import { @@ -19,6 +22,7 @@ import { useQueryParamsGroupBys, useQueryParamsQuery, } from 'sentry/views/explore/queryParams/context'; +import {isVisualizeEquation} from 'sentry/views/explore/queryParams/visualize'; import {useSpansQuery} from 'sentry/views/insights/common/queries/useSpansQuery'; interface UseMetricAggregatesTableOptions { @@ -48,8 +52,12 @@ export function useMetricAggregatesTable({ traceMetric, queryExtras, }: UseMetricAggregatesTableOptions) { + const visualize = useMetricVisualize(); const canTriggerHighAccuracy = useCallback( (result: ReturnType['result']) => { + if (isVisualizeEquation(visualize)) { + return false; + } const countAggregate = makeCountAggregate(traceMetric); const canGoToHigherAccuracyTier = result.meta?.dataScanned === 'partial'; const hasData = @@ -58,7 +66,7 @@ export function useMetricAggregatesTable({ (result.data.length === 1 && Boolean(result.data[0][countAggregate]))); return !hasData && canGoToHigherAccuracyTier; }, - [traceMetric] + [traceMetric, visualize] ); return useProgressiveQuery({ queryHookImplementation: useMetricAggregatesTableImp, @@ -87,6 +95,8 @@ function useMetricAggregatesTableImp({ const query = useQueryParamsQuery(); const sortBys = useQueryParamsAggregateSortBys(); + const isEquation = useRef(false); + const fields = useMemo(() => { const allFields: string[] = []; @@ -102,6 +112,9 @@ function useMetricAggregatesTableImp({ if (visualize.yAxis && !allFields.includes(visualize.yAxis)) { allFields.push(visualize.yAxis); } + if (isVisualizeEquation(visualize)) { + isEquation.current = true; + } } return allFields.filter(Boolean); @@ -111,7 +124,10 @@ function useMetricAggregatesTableImp({ const discoverQuery: NewQuery = { id: undefined, name: 'Explore - Metric Aggregates', - fields: [...fields, makeCountAggregate(traceMetric)], + fields: [ + ...fields, + ...(isEquation.current ? [] : [makeCountAggregate(traceMetric)]), + ], orderby: sortBys.map(formatSort), query, version: 2, @@ -122,7 +138,7 @@ function useMetricAggregatesTableImp({ }, [fields, query, selection, sortBys, traceMetric]); const result = useSpansQuery({ - enabled: enabled && Boolean(traceMetric.name) && fields.length > 0, + enabled: enabled && fields.length > 0, eventView, initialData: [], limit, diff --git a/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx b/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx index 9037f91fecdc99..faf04ca34ca016 100644 --- a/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx +++ b/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx @@ -10,7 +10,7 @@ import {COL_WIDTH_UNDEFINED} from 'sentry/components/tables/gridEditable'; import {SimpleTable} from 'sentry/components/tables/simpleTable'; import {IconWarning} from 'sentry/icons/iconWarning'; import {t} from 'sentry/locale'; -import {parseFunction} from 'sentry/utils/discover/fields'; +import {isEquation, parseFunction} from 'sentry/utils/discover/fields'; import {prettifyTagKey} from 'sentry/utils/fields'; import {useOrganization} from 'sentry/utils/useOrganization'; import type {TableColumn} from 'sentry/views/discover/table/types'; @@ -29,6 +29,7 @@ import { } from 'sentry/views/explore/metrics/metricInfoTabs/metricInfoTabStyles'; import type {TraceMetric} from 'sentry/views/explore/metrics/metricQuery'; import {canUseMetricsUIRefresh} from 'sentry/views/explore/metrics/metricsFlags'; +import {useMetricVisualize} from 'sentry/views/explore/metrics/metricsQueryParams'; import {TraceMetricKnownFieldKey} from 'sentry/views/explore/metrics/types'; import { createTraceMetricFilter, @@ -39,6 +40,10 @@ import { useQueryParamsGroupBys, useSetQueryParamsAggregateSortBys, } from 'sentry/views/explore/queryParams/context'; +import { + isVisualizeEquation, + isVisualizeFunction, +} from 'sentry/views/explore/queryParams/visualize'; import {FieldRenderer} from 'sentry/views/explore/tables/fieldRenderer'; import {TraceItemDataset} from 'sentry/views/explore/types'; import {GenericWidgetEmptyStateWarning} from 'sentry/views/performance/landing/widgets/components/selectableList'; @@ -67,9 +72,12 @@ export function AggregatesTab({traceMetric, isMetricOptionsEmpty}: AggregatesTab const hasMetricsUIRefresh = canUseMetricsUIRefresh(organization); const topEvents = useTopEvents(); const tableRef = useRef(null); + const visualize = useMetricVisualize(); const {result, eventView, fields} = useMetricAggregatesTable({ - enabled: Boolean(traceMetric.name) && !isMetricOptionsEmpty, + enabled: isVisualizeFunction(visualize) + ? Boolean(traceMetric.name) && !isMetricOptionsEmpty + : isVisualizeEquation(visualize) && Boolean(visualize.expression.text), limit: RESULT_LIMIT, traceMetric, }); @@ -107,11 +115,11 @@ export function AggregatesTab({traceMetric, isMetricOptionsEmpty}: AggregatesTab // When no group bys are selected, prepend the metric name as a virtual group-by column const displayFields = useMemo(() => { - if (groupBys.length === 0) { + if (groupBys.length === 0 && isVisualizeFunction(visualize)) { return [TraceMetricKnownFieldKey.METRIC_NAME, ...fields]; } return fields; - }, [groupBys.length, fields]); + }, [groupBys.length, fields, visualize]); const displayColumns = useMemo(() => { if (groupBys.length === 0) { @@ -233,6 +241,9 @@ export function AggregatesTab({traceMetric, isMetricOptionsEmpty}: AggregatesTab label = `${func.name}(…)`; } else if (tag) { label = tag.name; + } else if (isEquation(field)) { + // TODO: This should say the reference format of equations + label = t('Result'); } else { label = prettifyTagKey(field); } @@ -250,7 +261,7 @@ export function AggregatesTab({traceMetric, isMetricOptionsEmpty}: AggregatesTab key={i} divider={shouldShowDivider(i)} data-sticky-column={isLastColumn(i) ? 'true' : 'false'} - isAggregate={Boolean(func)} + isAggregate={Boolean(func) || isEquation(field)} isSticky={isLastColumn(i)} sort={direction} handleSortClick={canSort ? updateSort : undefined} @@ -289,7 +300,7 @@ export function AggregatesTab({traceMetric, isMetricOptionsEmpty}: AggregatesTab offset={j === 0 ? firstColumnOffset : undefined} > column.key === field)} data={displayRow} unit={getMetricsUnit(meta, field)} meta={meta} diff --git a/static/app/views/explore/metrics/metricPanel/index.tsx b/static/app/views/explore/metrics/metricPanel/index.tsx index 61a03da9a1d686..2c06e51eca7008 100644 --- a/static/app/views/explore/metrics/metricPanel/index.tsx +++ b/static/app/views/explore/metrics/metricPanel/index.tsx @@ -32,7 +32,10 @@ import { useQueryParamsMode, useQueryParamsSortBys, } from 'sentry/views/explore/queryParams/context'; -import {isVisualizeEquation} from 'sentry/views/explore/queryParams/visualize'; +import { + isVisualizeEquation, + isVisualizeFunction, +} from 'sentry/views/explore/queryParams/visualize'; const RESULT_LIMIT = 50; const TWO_MINUTE_DELAY = 120; @@ -72,8 +75,19 @@ export function MetricPanel({ const hasMetricsUIRefresh = canUseMetricsUIRefresh(organization); const fields = getTraceSamplesTableFields(TraceSamplesTableColumns); + const mode = useQueryParamsMode(); + const sortBys = useQueryParamsSortBys(); + const aggregateSortBys = useQueryParamsAggregateSortBys(); + const [interval] = useChartInterval(); + const topEvents = useTopEvents(); + const visualize = useMetricVisualize(); + + const areQueriesDisabled = isVisualizeFunction(visualize) + ? Boolean(traceMetric.name) && !isMetricOptionsEmpty + : isVisualizeEquation(visualize) && !visualize.expression.text; + const metricSamplesTableResult = useMetricSamplesTable({ - disabled: !traceMetric?.name || isMetricOptionsEmpty, + disabled: areQueriesDisabled, limit: RESULT_LIMIT, traceMetric, fields, @@ -81,18 +95,11 @@ export function MetricPanel({ }); const metricAggregatesTableResult = useMetricAggregatesTable({ - enabled: Boolean(traceMetric.name) && !isMetricOptionsEmpty, + enabled: !areQueriesDisabled, limit: RESULT_LIMIT, traceMetric, }); - const mode = useQueryParamsMode(); - const sortBys = useQueryParamsSortBys(); - const aggregateSortBys = useQueryParamsAggregateSortBys(); - const [interval] = useChartInterval(); - const topEvents = useTopEvents(); - const visualize = useMetricVisualize(); - const {result: timeseriesResult} = useMetricTimeseries({ traceMetric, enabled: From 5fb29343ed8177a363f91ddf3f02ba4ec91a4e71 Mon Sep 17 00:00:00 2001 From: Nar Saynorath Date: Tue, 14 Apr 2026 15:57:04 -0400 Subject: [PATCH 02/11] fix enabled check --- .../explore/metrics/hooks/useMetricAggregatesTable.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx b/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx index 52978dff9a28db..956b0cb5848d11 100644 --- a/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx +++ b/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx @@ -138,7 +138,12 @@ function useMetricAggregatesTableImp({ }, [fields, query, selection, sortBys, traceMetric]); const result = useSpansQuery({ - enabled: enabled && fields.length > 0, + enabled: + enabled && fields.length > 0 && isEquation.current + ? visualizes.every( + visualize => isVisualizeEquation(visualize) && visualize.expression.text + ) + : Boolean(traceMetric.name), eventView, initialData: [], limit, From 99d7d696bfdd94f2757c04f19efdd4a42dade284 Mon Sep 17 00:00:00 2001 From: Nar Saynorath Date: Tue, 14 Apr 2026 16:06:07 -0400 Subject: [PATCH 03/11] fix enabled logic --- .../hooks/useMetricAggregatesTable.tsx | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx b/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx index 956b0cb5848d11..4a3e8155f23879 100644 --- a/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx +++ b/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx @@ -1,4 +1,4 @@ -import {useCallback, useMemo, useRef} from 'react'; +import {useCallback, useMemo} from 'react'; import {usePageFilters} from 'sentry/components/pageFilters/usePageFilters'; import type {NewQuery} from 'sentry/types/organization'; @@ -95,7 +95,7 @@ function useMetricAggregatesTableImp({ const query = useQueryParamsQuery(); const sortBys = useQueryParamsAggregateSortBys(); - const isEquation = useRef(false); + const isEquation = visualizes.some(isVisualizeEquation); const fields = useMemo(() => { const allFields: string[] = []; @@ -112,9 +112,6 @@ function useMetricAggregatesTableImp({ if (visualize.yAxis && !allFields.includes(visualize.yAxis)) { allFields.push(visualize.yAxis); } - if (isVisualizeEquation(visualize)) { - isEquation.current = true; - } } return allFields.filter(Boolean); @@ -124,10 +121,7 @@ function useMetricAggregatesTableImp({ const discoverQuery: NewQuery = { id: undefined, name: 'Explore - Metric Aggregates', - fields: [ - ...fields, - ...(isEquation.current ? [] : [makeCountAggregate(traceMetric)]), - ], + fields: [...fields, ...(isEquation ? [] : [makeCountAggregate(traceMetric)])], orderby: sortBys.map(formatSort), query, version: 2, @@ -135,15 +129,16 @@ function useMetricAggregatesTableImp({ }; return EventView.fromNewQueryWithPageFilters(discoverQuery, selection); - }, [fields, query, selection, sortBys, traceMetric]); + }, [fields, query, selection, sortBys, traceMetric, isEquation]); const result = useSpansQuery({ enabled: - enabled && fields.length > 0 && isEquation.current + enabled && + (fields.length > 0 && isEquation ? visualizes.every( visualize => isVisualizeEquation(visualize) && visualize.expression.text ) - : Boolean(traceMetric.name), + : Boolean(traceMetric.name)), eventView, initialData: [], limit, From dfd6de0bb87727ecae2f1c135609f508c20b40fd Mon Sep 17 00:00:00 2001 From: Nar Saynorath Date: Tue, 14 Apr 2026 16:08:57 -0400 Subject: [PATCH 04/11] fix more enabled logic --- static/app/views/explore/metrics/metricPanel/index.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/static/app/views/explore/metrics/metricPanel/index.tsx b/static/app/views/explore/metrics/metricPanel/index.tsx index 2c06e51eca7008..5d0b914a3104b1 100644 --- a/static/app/views/explore/metrics/metricPanel/index.tsx +++ b/static/app/views/explore/metrics/metricPanel/index.tsx @@ -82,12 +82,12 @@ export function MetricPanel({ const topEvents = useTopEvents(); const visualize = useMetricVisualize(); - const areQueriesDisabled = isVisualizeFunction(visualize) + const areQueriesEnabled = isVisualizeFunction(visualize) ? Boolean(traceMetric.name) && !isMetricOptionsEmpty - : isVisualizeEquation(visualize) && !visualize.expression.text; + : isVisualizeEquation(visualize) && Boolean(visualize.expression.text); const metricSamplesTableResult = useMetricSamplesTable({ - disabled: areQueriesDisabled, + disabled: !areQueriesEnabled, limit: RESULT_LIMIT, traceMetric, fields, @@ -95,7 +95,7 @@ export function MetricPanel({ }); const metricAggregatesTableResult = useMetricAggregatesTable({ - enabled: !areQueriesDisabled, + enabled: areQueriesEnabled, limit: RESULT_LIMIT, traceMetric, }); From 04de83056ec4a62e757462965d90507fe9adac47 Mon Sep 17 00:00:00 2001 From: Nar Saynorath Date: Tue, 14 Apr 2026 16:14:44 -0400 Subject: [PATCH 05/11] fix sortability --- .../app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx b/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx index faf04ca34ca016..fbad5bd2ba7373 100644 --- a/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx +++ b/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx @@ -249,7 +249,7 @@ export function AggregatesTab({traceMetric, isMetricOptionsEmpty}: AggregatesTab } const direction = sorts.find(s => s.field === field)?.kind; - const canSort = displayColumns[i]?.isSortable !== false; + const canSort = displayColumns.find(column => column.key === field)?.isSortable; function updateSort() { const kind = direction === 'desc' ? 'asc' : 'desc'; From 3160a560f201123d35f1e1e39156dd7b22abfc1c Mon Sep 17 00:00:00 2001 From: Nar Saynorath Date: Tue, 14 Apr 2026 16:23:08 -0400 Subject: [PATCH 06/11] fix check for isEquation and adding metric name column --- .../explore/metrics/metricInfoTabs/aggregatesTab.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx b/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx index fbad5bd2ba7373..d5a858f392d4b1 100644 --- a/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx +++ b/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx @@ -122,11 +122,11 @@ export function AggregatesTab({traceMetric, isMetricOptionsEmpty}: AggregatesTab }, [groupBys.length, fields, visualize]); const displayColumns = useMemo(() => { - if (groupBys.length === 0) { + if (groupBys.length === 0 && isVisualizeFunction(visualize)) { return [METRIC_NAME_COLUMN, ...columns]; } return columns; - }, [groupBys.length, columns]); + }, [groupBys.length, columns, visualize]); // Include the virtual metric name column in the group-by count so grid/divider logic works const groupByFieldCount = groupBys.length === 0 ? 1 : groupBys.length; @@ -261,7 +261,9 @@ export function AggregatesTab({traceMetric, isMetricOptionsEmpty}: AggregatesTab key={i} divider={shouldShowDivider(i)} data-sticky-column={isLastColumn(i) ? 'true' : 'false'} - isAggregate={Boolean(func) || isEquation(field)} + isAggregate={ + Boolean(func) || (isVisualizeFunction(visualize) && isEquation(field)) + } isSticky={isLastColumn(i)} sort={direction} handleSortClick={canSort ? updateSort : undefined} From 612bb1fbc3ff997925ed2cbbca4cc008207dc724 Mon Sep 17 00:00:00 2001 From: Nar Saynorath Date: Tue, 14 Apr 2026 16:25:20 -0400 Subject: [PATCH 07/11] use visualize equation --- .../app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx b/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx index d5a858f392d4b1..cde2246bd7a968 100644 --- a/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx +++ b/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx @@ -262,7 +262,7 @@ export function AggregatesTab({traceMetric, isMetricOptionsEmpty}: AggregatesTab divider={shouldShowDivider(i)} data-sticky-column={isLastColumn(i) ? 'true' : 'false'} isAggregate={ - Boolean(func) || (isVisualizeFunction(visualize) && isEquation(field)) + Boolean(func) || (isVisualizeEquation(visualize) && isEquation(field)) } isSticky={isLastColumn(i)} sort={direction} From fba3d11ad78cd31f51e9a35947809a9382620a77 Mon Sep 17 00:00:00 2001 From: Nar Saynorath Date: Tue, 14 Apr 2026 16:44:48 -0400 Subject: [PATCH 08/11] fix ternary --- .../views/explore/metrics/hooks/useMetricAggregatesTable.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx b/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx index 4a3e8155f23879..9464df8d5ec841 100644 --- a/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx +++ b/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx @@ -133,12 +133,11 @@ function useMetricAggregatesTableImp({ const result = useSpansQuery({ enabled: - enabled && - (fields.length > 0 && isEquation + enabled && fields.length > 0 && isEquation ? visualizes.every( visualize => isVisualizeEquation(visualize) && visualize.expression.text ) - : Boolean(traceMetric.name)), + : Boolean(traceMetric.name), eventView, initialData: [], limit, From f43a1a6e9e6144e57e2043f5b984b4be18cbad3d Mon Sep 17 00:00:00 2001 From: Nar Saynorath Date: Tue, 14 Apr 2026 16:56:08 -0400 Subject: [PATCH 09/11] fix enabled precedence and virtualized column inclusion --- .../explore/metrics/hooks/useMetricAggregatesTable.tsx | 6 ++++-- .../views/explore/metrics/metricInfoTabs/aggregatesTab.tsx | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx b/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx index 9464df8d5ec841..8dad39e926c0e5 100644 --- a/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx +++ b/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx @@ -133,11 +133,13 @@ function useMetricAggregatesTableImp({ const result = useSpansQuery({ enabled: - enabled && fields.length > 0 && isEquation + enabled && + fields.length > 0 && + (isEquation ? visualizes.every( visualize => isVisualizeEquation(visualize) && visualize.expression.text ) - : Boolean(traceMetric.name), + : Boolean(traceMetric.name)), eventView, initialData: [], limit, diff --git a/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx b/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx index cde2246bd7a968..6c6459ce0bf550 100644 --- a/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx +++ b/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx @@ -129,7 +129,8 @@ export function AggregatesTab({traceMetric, isMetricOptionsEmpty}: AggregatesTab }, [groupBys.length, columns, visualize]); // Include the virtual metric name column in the group-by count so grid/divider logic works - const groupByFieldCount = groupBys.length === 0 ? 1 : groupBys.length; + const groupByFieldCount = + groupBys.length === 0 && isVisualizeFunction(visualize) ? 1 : groupBys.length; const aggregateFieldCount = displayFields.length - groupByFieldCount; const tableStyle = useMemo(() => { From 93b815148f82f4007cff4b823dbc3f4e1e091fc6 Mon Sep 17 00:00:00 2001 From: Nar Saynorath Date: Tue, 14 Apr 2026 17:11:28 -0400 Subject: [PATCH 10/11] some -> every --- .../views/explore/metrics/hooks/useMetricAggregatesTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx b/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx index 8dad39e926c0e5..dfca5476f39df7 100644 --- a/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx +++ b/static/app/views/explore/metrics/hooks/useMetricAggregatesTable.tsx @@ -95,7 +95,7 @@ function useMetricAggregatesTableImp({ const query = useQueryParamsQuery(); const sortBys = useQueryParamsAggregateSortBys(); - const isEquation = visualizes.some(isVisualizeEquation); + const isEquation = visualizes.every(isVisualizeEquation); const fields = useMemo(() => { const allFields: string[] = []; From bcb16711442f8e91dd587c5488e163ca69bce2fb Mon Sep 17 00:00:00 2001 From: Nar Saynorath Date: Tue, 14 Apr 2026 19:38:21 -0400 Subject: [PATCH 11/11] Address feedback, allowing isSortable again --- .../app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx b/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx index 6c6459ce0bf550..f8266328b641c7 100644 --- a/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx +++ b/static/app/views/explore/metrics/metricInfoTabs/aggregatesTab.tsx @@ -250,7 +250,8 @@ export function AggregatesTab({traceMetric, isMetricOptionsEmpty}: AggregatesTab } const direction = sorts.find(s => s.field === field)?.kind; - const canSort = displayColumns.find(column => column.key === field)?.isSortable; + const canSort = + displayColumns.find(column => column.key === field)?.isSortable !== false; function updateSort() { const kind = direction === 'desc' ? 'asc' : 'desc';