{"record":{"id":"74fc1724eab43d8d","repo":"cube-js/cube","slug":"preaggregation-preaggregation-preaggregationnam","errorCode":null,"errorMessage":"Preaggregation \"${preAggregation.preAggregationName}\" referenced property \"${member}\" not found in cube \"${preAggregation.cube}\"","messagePattern":"Preaggregation \"(.+?)\" referenced property \"(.+?)\" not found in cube \"(.+?)\"","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/cubejs-schema-compiler/src/adapter/PreAggregations.ts","lineNumber":1541,"sourceCode":"    const targetMeasuresReferences = this.measureAliasesRenderedReference(preAggregationForQuery);\n\n    const columnsFor = (targetReferences, references, preAggregation) => Object.keys(targetReferences).map(\n      member => {\n        const [, memberProp] = member.split('.');\n\n        let refKey = references[member];\n\n        if (refKey) {\n          return `${refKey} ${targetReferences[member]}`;\n        }\n\n        refKey = references[this.query.cubeEvaluator.pathFromArray([preAggregation.cube, memberProp])];\n\n        if (refKey) {\n          return `${refKey} ${targetReferences[member]}`;\n        }\n\n        throw new Error(`Preaggregation \"${preAggregation.preAggregationName}\" referenced property \"${member}\" not found in cube \"${preAggregation.cube}\"`);\n      }\n    );\n\n    const tables = preAggregationForQuery.referencedPreAggregations.map(preAggregation => {\n      const dimensionsReferences = this.dimensionsRenderedReference(preAggregation);\n      const timeDimensionsReferences = this.timeDimensionsRenderedReference(rollupGranularity, preAggregation);\n      const measuresReferences = this.measureAliasesRenderedReference(preAggregation);\n\n      return {\n        tableName: this.preAggregationTableName(\n          preAggregation.cube,\n          preAggregation.preAggregationName,\n          preAggregation.preAggregation\n        ),\n        columns: columnsFor(targetDimensionsReferences, dimensionsReferences, preAggregation)\n          .concat(columnsFor(targetTimeDimensionsReferences, timeDimensionsReferences, preAggregation))\n          .concat(columnsFor(targetMeasuresReferences, measuresReferences, preAggregation))\n      };","sourceCodeStart":1523,"sourceCodeEnd":1559,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/packages/cubejs-schema-compiler/src/adapter/PreAggregations.ts#L1523-L1559","documentation":"While building the SQL render for a pre-aggregation's references, Cube looks up each referenced member's refKey in the cube's compiled references. If a member path has no entry — meaning the member doesn't exist in the pre-aggregation's cube — this Error is thrown. Unlike UserErrors, this is a plain Error and usually indicates a deeper schema mismatch or bug.","triggerScenarios":"A pre-aggregation's references (measures/dimensions/timeDimensions from its definition) include a member path that resolves to nothing in cubeEvaluator for preAggregation.cube — e.g. the pre-aggregation definition was copied from another cube keeping the other cube's member names, or cubeEvaluator.pathFromArray produces a path missing from the references map during reference building (PreAggregations.ts:1541).","commonSituations":"Copy-pasting a pre-aggregation between cubes without rewriting '${CUBE}.member' paths; renamed/deleted members still listed in a pre-aggregation; dynamic schema generation emitting members that don't exist; version upgrades where member names changed.","solutions":["Fix the pre-aggregation definition so all members exist in the cube (use ${CUBE}.xxx or the correct cube prefix).","Remove or update members that were renamed or deleted from the cube schema.","Recompile/restart after schema changes so the references map and the pre-aggregation definition are in sync.","If definitions are generated dynamically, validate emitted member paths against the cube before compiling."],"exampleFix":"// before\n// Cube B, copied from Cube A\npreAggregations: { main: { measures: [CUBE.totalAmount] } } // totalAmount only exists in A\n// after\npreAggregations: { main: { measures: [CUBE.amount] } } // member that exists in B","handlingStrategy":"validation","validationCode":"// Verify every member referenced by a pre-aggregation exists in its cube before compiling\nfunction validatePreAggMembers(cube, def, cubeSchema) {\n  const members = [...(def.measures || []), ...(def.dimensions || []), ...(def.timeDimensions || [])];\n  for (const m of members) {\n    const name = typeof m === 'string' ? m : m.dimension;\n    if (!cubeSchema.memberExists(cube, name)) throw new Error(`Member ${name} not found in cube ${cube}`);\n  }\n}","typeGuard":"function memberExists(cubeSchema, cube, member) { try { return cubeSchema.resolveMember(member.startsWith('CUBE') ? `${cube}.${member.split('.')[1]}` : member) !== undefined; } catch { return false; } }","tryCatchPattern":"try { await cube.query(query); } catch (e) { if (/referenced property .* not found in cube/.test(e.message)) { console.error('Fix or remove the stale member in the pre-aggregation definition:', e.message); } else throw e; }","preventionTips":["Rewrite ${CUBE}.xxx paths when copying pre-aggregations between cubes","Grep pre-aggregation definitions after renaming/deleting members","Restart/compile after schema edits so references are in sync","Add a schema-lint step that resolves every pre-aggregation member"],"tags":["pre-aggregation","member-reference","schema-compiler","invalid-reference"],"backgroundTag":"referenced-member-not-found","analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}