cube-js/cube · error · UserError
Values required for filter: ${JSON.stringify(f)}
Error message
Values required for filter: ${JSON.stringify(f)} What it means
Validation guard in normalizeQueryFilters: a filter uses an operator that requires values (any operator except set, notSet, or measureFilter) but `values` is missing, null, or an empty array. Set/notSet/measureFilter are value-less operators and are exempt.
Source
Thrown at packages/cubejs-api-gateway/src/query.js:377
if (f.or) {
res.or = normalizeQueryFilters(f.or, timezone);
return res;
}
if (f.and) {
res.and = normalizeQueryFilters(f.and, timezone);
return res;
}
if (!f.operator) {
throw new UserError(`Operator required for filter: ${JSON.stringify(f)}`);
}
if (operators.indexOf(f.operator) === -1) {
throw new UserError(`Operator ${f.operator} not supported for filter: ${JSON.stringify(f)}`);
}
if ((!f.values || f.values.length === 0) && ['set', 'notSet', 'measureFilter'].indexOf(f.operator) === -1) {
throw new UserError(`Values required for filter: ${JSON.stringify(f)}`);
}
if (f.values) {
res.values = f.values.map(v => (v != null ? v.toString() : v));
}
if (f.dimension) {
res.member = f.dimension;
delete res.dimension;
}
return normalizeDateFilterValues(res, timezone);
})
);
/**
* Parse incoming member expression
* @param {unknown} expressionView on GitHub (pinned to 7d981676b3)
Solutions
- Provide a non-empty `values` array for the filter.
- If the intent is an existence check, switch the operator to "set" or "notSet", which require no values.
- Verify the client is not stripping empty arrays during JSON serialization.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/cubejs-api-gateway/src/query.js:377 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of cube-js/cube@7d981676b3 (2026-09-02).
Data as JSON: /api/errors/5ae423bb8513570e.
Report an issue: GitHub.