SigNoz/signoz · error

there can be only one result series for value type panel but

Error message

there can be only one result series for value type panel but got %d

What it means

For a value panel with exactly one result, that result must contain a single series; if result.Series has more than one entry the query is non-aggregated and the panel cannot render a single value.

Source

Thrown at pkg/query-service/app/querier/querier.go:544

			results, errQueriesByName, err = q.runPromQueries(ctx, orgID, params)
		case v3.QueryTypeClickHouseSQL:
			ctx = context.WithValue(ctx, "enforce_max_result_rows", true)
			if params.CompositeQuery.PanelType == v3.PanelTypeList || params.CompositeQuery.PanelType == v3.PanelTypeTrace {
				results, errQueriesByName, err = q.runBuilderListQueries(ctx, params)
			} else {
				results, errQueriesByName, err = q.runClickHouseQueries(ctx, params)
			}
		default:
			err = fmt.Errorf("invalid query type")
		}
	}

	// return error if the number of series is more than one for value type panel
	if params.CompositeQuery.PanelType == v3.PanelTypeValue {
		if len(results) > 1 && params.CompositeQuery.EnabledQueries() > 1 {
			err = fmt.Errorf("there can be only one active query for value type panel")
		} else if len(results) == 1 && len(results[0].Series) > 1 {
			err = fmt.Errorf("there can be only one result series for value type panel but got %d", len(results[0].Series))
		}
	}

	return results, errQueriesByName, err
}

func (q *querier) QueriesExecuted() []string {
	return q.queriesExecuted
}

func (q *querier) TimeRanges() [][]int {
	return q.timeRanges
}

View on GitHub (pinned to 5069bf80b0)

Solutions

  1. Add or fix the aggregation (count, avg, sum rate...) so one series is returned
  2. Remove groupBy attributes from the builder query or expression for value panels
  3. For per-group values, use a table/graph panel instead

Example fix

// before
{aggregateAttribute:{...}, groupBy:[{"serviceName"}]}
// after
{aggregateAttribute:{...}, groupBy:[]}
Defensive patterns

Strategy: validation

Validate before calling

if params.CompositeQuery.PanelType == v3.PanelTypeValue {
    for _, q := range params.CompositeQuery.Queries {
        if !q.Disabled && q.Builder != nil && len(q.Builder.GroupBy) > 0 {
            return fmt.Errorf("value panel query must not group by")
        }
    }
}

Type guard

func yieldsSingleSeries(q *v3.BuilderQuery) bool { return len(q.GroupBy) == 0 }

Prevention

When it happens

Trigger: QueryRange with PanelTypeValue where the single query groups by a high-cardinality field (or no aggregation), returning multiple series.

Common situations: Forgetting to remove groupBy dimensions when switching a graph panel to a value panel, selecting raw list data instead of an aggregate like count()/avg().

Related errors


AI-assisted analysis of SigNoz/signoz@5069bf80b0 (2026-08-28). Data as JSON: /api/errors/5f8840951c4be517. Report an issue: GitHub.