{"record":{"id":"38d3df53d0b9840b","repo":"cube-js/cube","slug":"unsupported-additional-filters-for-measure-sourc","errorCode":null,"errorMessage":"Unsupported additional filters for measure ${sourceMeasure} type ${aggType}","messagePattern":"Unsupported additional filters for measure (.+?) type (.+?)","errorType":"exception","errorClass":"UserError","httpStatus":null,"severity":"error","filePath":"packages/cubejs-schema-compiler/src/adapter/BaseMeasure.ts","lineNumber":99,"sourceCode":"    const resultFilters = source.filters ?? [];\n\n    if (addFilters.length > 0) {\n      switch (resultMeasureType) {\n        case 'sum':\n        case 'avg':\n        case 'min':\n        case 'max':\n        case 'count':\n        case 'count_distinct':\n        case 'countDistinct':\n        case 'count_distinct_approx':\n        case 'countDistinctApprox':\n          // ok, do nothing\n          break;\n        default:\n          // Can not add filters to string, time, boolean, number\n          // Aggregation is already included in SQL, it's hard to patch that\n          throw new UserError(\n            `Unsupported additional filters for measure ${sourceMeasure} type ${aggType}`\n          );\n      }\n\n      resultFilters.push(...addFilters);\n    }\n\n    const patchedFrom = this.query.cubeEvaluator.parsePath('measures', sourceMeasure);\n\n    // For view measures, `type` is `number` (aggregation is embedded in SQL)\n    // while `aggType` carries the real aggregation kind. We must preserve that\n    // distinction to avoid double-wrapping (e.g. SUM(SUM(...))).\n    const typeFields = source.aggType != null\n      ? { type: source.type, aggType: resultMeasureType }\n      : { type: resultMeasureType };\n\n    return {\n      ...source,","sourceCodeStart":81,"sourceCodeEnd":117,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/packages/cubejs-schema-compiler/src/adapter/BaseMeasure.ts#L81-L117","documentation":"Adding filters (addFilters) to a rolled-up measure is only supported for count, count_distinct, and count_distinct_approx aggregations, whose SQL can be safely wrapped with filter conditions. For any other aggType (string, time, boolean, number, avg, sum), the aggregation is already baked into the SQL and filters cannot be injected, so preparePatchedMeasure throws this UserError.","triggerScenarios":"Requesting a rollup/patch that supplies additional filters for a non-count measure — e.g. query.rollup with { measure: 'Orders.totalAmount', aggType: 'sum', addFilters: [...] } or filtered rollup references on avg/sum measures.","commonSituations":"Building filtered pre-aggregations over sum/avg measures; UIs letting users add segment filters to any measure; automated rollup generators attaching filters indiscriminately.","solutions":["Move the filter into the measure's own SQL definition or use a filtered measure (filters: [...] in the cube schema)","Only use addFilters with count/count_distinct family measures","Create a separate pre-aggregation that filters at the base-query level via timeDimension/dateJoinCondition instead","If filtering is required on sums, define the filtered measure explicitly in the data model"],"exampleFix":"// before\n{ measure: 'Orders.totalAmount', aggType: 'sum', addFilters: [{ member: 'Orders.status', operator: 'equals', values: ['shipped'] }] }\n// after (schema)\ntotalShipped: { type: 'sum', sql: 'amount', filters: [{ sql: \"${Orders}.status = 'shipped'\" }] }","handlingStrategy":"try-catch","validationCode":"function checkRollupFilters(m) {\n  const filterable = ['count','count_distinct','count_distinct_approx'];\n  if (m.addFilters?.length && !filterable.includes(m.aggType)) {\n    throw new Error(`addFilters not supported for ${m.aggType} measure ${m.measure}`);\n  }\n}","typeGuard":null,"tryCatchPattern":"try {\n  await cubeApi.load(query);\n} catch (e) {\n  if (e.message.startsWith('Unsupported additional filters for measure')) {\n    console.error('Move filters into a schema-level filtered measure:', e.message);\n  }\n  throw e;\n}","preventionTips":["Use cube schema filters: [...] for filtered sum/avg measures","Restrict addFilters to count-family measures","Lint rollup configs for measure/filter combinations"],"tags":["schema-compiler","measure","rollup","filters","user-error"],"backgroundTag":"unsupported-measure-replacement","analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}