{"record":{"id":"02f1384aa44eed85","repo":"cube-js/cube","slug":"can-t-resolve-m","errorCode":null,"errorMessage":"Can't resolve '${m}'","messagePattern":"Can't resolve '(.+?)'","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/cubejs-schema-compiler/src/adapter/BaseQuery.js","lineNumber":1630,"sourceCode":"        .slice(0, 2)\n        .join('.');\n      return [m, this.memberInstanceByPath(trimmedPath).isMultiStage()];\n    }));\n  }\n\n  memberInstanceByPath(m) {\n    let member;\n    if (!member && this.cubeEvaluator.isMeasure(m)) {\n      member = this.newMeasure(m);\n    }\n    if (!member && this.cubeEvaluator.isDimension(m)) {\n      member = this.newDimension(m);\n    }\n    if (!member && this.cubeEvaluator.isSegment(m)) {\n      member = this.newSegment(m);\n    }\n    if (!member) {\n      throw new Error(`Can't resolve '${m}'`);\n    }\n    return member;\n  }\n\n  multiStageWithQueries(member, queryContext, memberChildren, withQueries) {\n    // TODO calculate based on remove_filter in future\n    const wouldNodeApplyFilters = !memberChildren[member];\n    let memberFrom = memberChildren[member]\n      ?.map(child => this.multiStageWithQueries(child, this.childrenMultiStageContext(member, queryContext), memberChildren, withQueries));\n    const unionFromDimensions = memberFrom ? R.uniq(R.flatten(memberFrom.map(f => f.dimensions))) : queryContext.dimensions;\n    const unionDimensionsContext = { ...queryContext, dimensions: unionFromDimensions.filter(d => !this.newDimension(d).isMultiStage()) };\n    // TODO is calling multiStageWithQueries twice optimal?\n    memberFrom = memberChildren[member] &&\n      R.uniqBy(\n        f => f.alias,\n        memberChildren[member].map(child => this.multiStageWithQueries(child, this.childrenMultiStageContext(member, unionDimensionsContext), memberChildren, withQueries))\n      );\n    const selfContext = this.selfMultiStageContext(member, queryContext, wouldNodeApplyFilters);","sourceCodeStart":1612,"sourceCodeEnd":1648,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/packages/cubejs-schema-compiler/src/adapter/BaseQuery.js#L1612-L1648","documentation":"This member resolution helper tries to interpret a string as a measure, then a dimension, then a segment. If none match a member defined in the schema, it throws a plain Error \"Can't resolve '<name>'\", meaning the requested name doesn't exist in the compiled data model.","triggerScenarios":"Referencing a member path like 'Orders.totalAmount' that isn't defined (typo, renamed member, wrong cube name), or passing a name without the Cube prefix.","commonSituations":"Schema refactors renaming members while queries still use old names, typos in dashboard configs, members defined in a cube not visible due to security context or missing file compilation.","solutions":["Verify the member exists in the schema with exactly that Cube.name path","Check for typos/renames and update the query","Ensure the schema file defining the member compiles (check compiler logs for earlier errors)","Use the meta API (/meta or compiler meta) to list available members"],"exampleFix":"// before\nquery.members(['Orders.totalRevenue']) // not defined\n// after\ncube: `Orders`, measures: { totalRevenue: { type: 'sum', sql: `amount` } }\n// then query 'Orders.totalRevenue'","handlingStrategy":"try-catch","validationCode":"// validate members against /meta before querying\nconst meta = await cubeApi.meta();\nconst known = new Set(meta.cubes.flatMap(c =>\n  [...c.measures, ...c.dimensions, ...c.segments].map(m => m.name)));\nconst unknown = queryMembers.filter(m => !known.has(m));\nif (unknown.length) throw new Error(`Unknown members: ${unknown.join(', ')}`);","typeGuard":"const memberExists = (meta, name) => meta.cubes.some(c =>\n  [...c.measures, ...c.dimensions, ...c.segments].some(m => m.name === name));","tryCatchPattern":"try {\n  const m = resolveMember(name);\n} catch (e) {\n  if (/^Can't resolve '/.test(e.message)) {\n    console.warn(`Member ${name} not in schema; check /meta for valid names`);\n  } else throw e;\n}","preventionTips":["Fetch /meta at startup and validate all configured member names","Search/replace old member names after schema renames","Always use fully qualified 'CubeName.memberName' paths","Add integration tests that compile all saved dashboard queries"],"tags":["member-resolution","schema","validation"],"backgroundTag":"member-not-found","analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}