cube-js/cube · error · UserError

Dimension '${dimensionName}' has key '${keyReference}' but t

Error message

Dimension '${dimensionName}' has key '${keyReference}' but the key dimension is not included in view '${viewName}'

What it means

Thrown while resolving a view: a dimension that uses a key reference declares that key, but the key dimension is not among the view's resolved members (it was not included via the view's includes and is not a membersFromCube default). The view therefore cannot remap the key to viewName.<keyName>.

Source

Thrown at packages/cubejs-schema-compiler/src/compiler/CubeSymbols.ts:1066

    }

    return includes.filter(include => !excludesMap.has(include.member));
  }

  protected getResolvedMember(type: string, cubeName: string, memberName: string) {
    return this.symbols[cubeName]?.cubeObj()?.[type]?.[memberName];
  }

  protected processKeyReferenceForView(
    keyReference: string,
    viewName: string,
    viewAllMembers: ViewResolvedMember[],
    dimensionName: string
  ): { keyReference: string } {
    const viewKeyMember = viewAllMembers.find(v => v.member === keyReference);

    if (!viewKeyMember) {
      throw new UserError(
        `Dimension '${dimensionName}' has key '${keyReference}' but the key dimension is not included in view '${viewName}'`
      );
    }

    return { keyReference: `${viewName}.${viewKeyMember.name}` };
  }

  protected generateIncludeMembers(members: any[], type: string, targetCube: CubeDefinitionExtended, viewAllMembers: ViewResolvedMember[]) {
    return members.map(memberRef => {
      const path = memberRef.member.split('.');
      const resolvedMember = this.getResolvedMember(type, path[path.length - 2], path[path.length - 1]);
      if (!resolvedMember) {
        throw new Error(`Can't resolve '${memberRef.member}' while generating include members`);
      }

      let processedDrillMembers = resolvedMember.drillMembers;

      // We need to filter only included drillMembers for views

View on GitHub (pinned to 7d981676b3)

Solutions

  1. Add the key dimension to the view's includes so it becomes a resolved view member
  2. Use membersFromCube to pull all cube members, including the key dimension, into the view
  3. Remove the key reference from the dimension if the key is not needed in the view
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/cubejs-schema-compiler/src/compiler/CubeSymbols.ts:1066 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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