cube-js/cube · error · Error

Can't resolve '${m}'

Error message

Can't resolve '${m}'

What it means

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.

Source

Thrown at packages/cubejs-schema-compiler/src/adapter/BaseQuery.js:1630

        .slice(0, 2)
        .join('.');
      return [m, this.memberInstanceByPath(trimmedPath).isMultiStage()];
    }));
  }

  memberInstanceByPath(m) {
    let member;
    if (!member && this.cubeEvaluator.isMeasure(m)) {
      member = this.newMeasure(m);
    }
    if (!member && this.cubeEvaluator.isDimension(m)) {
      member = this.newDimension(m);
    }
    if (!member && this.cubeEvaluator.isSegment(m)) {
      member = this.newSegment(m);
    }
    if (!member) {
      throw new Error(`Can't resolve '${m}'`);
    }
    return member;
  }

  multiStageWithQueries(member, queryContext, memberChildren, withQueries) {
    // TODO calculate based on remove_filter in future
    const wouldNodeApplyFilters = !memberChildren[member];
    let memberFrom = memberChildren[member]
      ?.map(child => this.multiStageWithQueries(child, this.childrenMultiStageContext(member, queryContext), memberChildren, withQueries));
    const unionFromDimensions = memberFrom ? R.uniq(R.flatten(memberFrom.map(f => f.dimensions))) : queryContext.dimensions;
    const unionDimensionsContext = { ...queryContext, dimensions: unionFromDimensions.filter(d => !this.newDimension(d).isMultiStage()) };
    // TODO is calling multiStageWithQueries twice optimal?
    memberFrom = memberChildren[member] &&
      R.uniqBy(
        f => f.alias,
        memberChildren[member].map(child => this.multiStageWithQueries(child, this.childrenMultiStageContext(member, unionDimensionsContext), memberChildren, withQueries))
      );
    const selfContext = this.selfMultiStageContext(member, queryContext, wouldNodeApplyFilters);

View on GitHub (pinned to 7d981676b3)

Solutions

  1. Verify the member exists in the schema with exactly that Cube.name path
  2. Check for typos/renames and update the query
  3. Ensure the schema file defining the member compiles (check compiler logs for earlier errors)
  4. Use the meta API (/meta or compiler meta) to list available members

Example fix

// before
query.members(['Orders.totalRevenue']) // not defined
// after
cube: `Orders`, measures: { totalRevenue: { type: 'sum', sql: `amount` } }
// then query 'Orders.totalRevenue'
Defensive patterns

Strategy: try-catch

Validate before calling

// validate members against /meta before querying
const meta = await cubeApi.meta();
const known = new Set(meta.cubes.flatMap(c =>
  [...c.measures, ...c.dimensions, ...c.segments].map(m => m.name)));
const unknown = queryMembers.filter(m => !known.has(m));
if (unknown.length) throw new Error(`Unknown members: ${unknown.join(', ')}`);

Type guard

const memberExists = (meta, name) => meta.cubes.some(c =>
  [...c.measures, ...c.dimensions, ...c.segments].some(m => m.name === name));

Try / catch

try {
  const m = resolveMember(name);
} catch (e) {
  if (/^Can't resolve '/.test(e.message)) {
    console.warn(`Member ${name} not in schema; check /meta for valid names`);
  } else throw e;
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of cube-js/cube@7d981676b3 (2026-09-02). Data as JSON: /api/errors/02f1384aa44eed85. Report an issue: GitHub.