{"record":{"id":"eabdff2361af8245","repo":"cube-js/cube","slug":"filter-for-column-is-required-eabdff","errorCode":null,"errorMessage":"Filter for ${column} is required","messagePattern":"Filter for (.+?) is required","errorType":"exception","errorClass":"UserError","httpStatus":null,"severity":"error","filePath":"packages/cubejs-schema-compiler/src/compiler/CubeSymbols.ts","lineNumber":1664,"sourceCode":"              return column(values);\n            } else {\n              return `${column} IN (${values.join(', ')})`;\n            }\n          } else {\n            const value = allocateParam(paramValue);\n            if (typeof column === 'function') {\n              return column(value);\n            } else {\n              return `${column} = ${value}`;\n            }\n          }\n        } else {\n          return '1 = 1';\n        }\n      },\n      requiredFilter: (column) => {\n        if (!paramValue) {\n          throw new UserError(`Filter for ${column} is required`);\n        }\n        return methods(paramValue).filter(column);\n      },\n      unsafeValue: () => paramValue,\n      toString: () => {\n        if (paramValue !== undefined && paramValue !== null) {\n          return Array.isArray(paramValue)\n            ? paramValue.map(allocateParam).join(',')\n            : String(allocateParam(paramValue));\n        }\n        return '';\n      },\n      [Symbol.toPrimitive]: () => {\n        if (paramValue !== undefined && paramValue !== null) {\n          return Array.isArray(paramValue)\n            ? paramValue.map(allocateParam).join(',')\n            : String(allocateParam(paramValue));\n        }","sourceCodeStart":1646,"sourceCodeEnd":1682,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/packages/cubejs-schema-compiler/src/compiler/CubeSymbols.ts#L1646-L1682","documentation":"The `requiredFilter` method of a filter proxy asserts that a filter parameter value was actually supplied. When the compiled filter method is invoked without a paramValue (no filter passed for the column), it throws this UserError. It lets schema authors declare members that cannot be queried without a mandatory filter (row-level safety, sharding by tenant, etc.).","triggerScenarios":"A cube defines `alwaysFilter`/required filter usage via `FILTER_PARAMS.requiredFilter('column')` or a member marked as requiring a filter, and a query is executed against that member without including a filter on that column.","commonSituations":"Multi-tenant tables where every query must filter by tenant_id; time-partitioned tables requiring a date range; dashboards that omit the default filter; API clients querying the member directly without the guard filter.","solutions":["Add the required filter to the query (e.g. `filters: [{ member: 'Cube.tenantId', operator: 'equals', values: ['acme'] }]`).","Set a default/required filter at the cube or security-context level so it is always injected.","If the filter is no longer truly mandatory, replace `requiredFilter` with a regular filter expression.","Educate API consumers / update the dashboard to always send the filter."],"exampleFix":"// query before (throws)\n{ measures: ['Orders.total'], timezone: 'UTC' }\n// after\n{ measures: ['Orders.total'], filters: [{ member: 'Orders.status', operator: 'equals', values: ['completed'] }] }","handlingStrategy":"try-catch","validationCode":"// ensure the query includes the required filter before sending\nconst required = 'Orders.status';\nif (!query.filters?.some(f => f.member === required)) {\n  query.filters = [...(query.filters || []), { member: required, operator: 'equals', values: ['completed'] }];\n}","typeGuard":null,"tryCatchPattern":"try { const r = await cubeApi.load(query); } catch (e) { if (/Filter for .* is required/.test(e.message)) { console.error(`Add filter on: ${e.message.match(/Filter for (.*) is required/)[1]}`); } throw e; }","preventionTips":["Document required-filter members for API consumers","Inject tenant/date filters from security context in config","Include default filters in dashboards and embedded apps"],"tags":["schema-compiler","required-filter","query-validation"],"backgroundTag":"missing-required-filter","analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}