Куб. js: Не удается найти путь объединения, чтобы присоединиться - PullRequest
1 голос
/ 19 февраля 2020

Я беру на себя сайт. Я не мог связаться с предыдущим разработчиком больше. Он решил использовать куб. js и однажды показал мне рабочую страницу KPI с графиками. Теперь я пытаюсь заставить страницу работать на моей стороне и понять, что он сделал.

Я установил куб. js на моей машине. Коллекции в нашей базе данных: comments, folders, logs, posts, sessions, subscribers, users. Я использовал cubejs generate -t users и cubejs generate -t logs для генерации Users.js и Logs.js. Например, вот сгенерированный Users.js:

cube(`Users`, {
  sql: `SELECT * FROM news.users`,

  joins: {

  },

  measures: {
    count: {
      type: `count`,
      drillMembers: [currentname, currentprovider, googleJsonDisplayname, googleJsonId, googleJsonNameFamilyname, googleJsonNameGivenname, googleDisplayname, googleId, googleNameFamilyname, googleNameGivenname, googleProvider, localId, localProvider, firstdate]
    },

    googleJsonCircledbycount: {
      sql: `${CUBE}.\`google._json.circledByCount\``,
      type: `sum`,
      title: `Google. Json.circledbycount`
    }
  },

  dimensions: {
    currentname: {
      sql: `${CUBE}.\`currentName\``,
      type: `string`
    },

    currentprovider: {
      sql: `${CUBE}.\`currentProvider\``,
      type: `string`
    },

    firstapp: {
      sql: `${CUBE}.\`firstApp\``,
      type: `string`
    },

    googleJsonDisplayname: {
      sql: `${CUBE}.\`google._json.displayName\``,
      type: `string`,
      title: `Google. Json.displayname`
    },

    googleJsonEtag: {
      sql: `${CUBE}.\`google._json.etag\``,
      type: `string`,
      title: `Google. Json.etag`
    },

    googleJsonGender: {
      sql: `${CUBE}.\`google._json.gender\``,
      type: `string`,
      title: `Google. Json.gender`
    },

    googleJsonId: {
      sql: `${CUBE}.\`google._json.id\``,
      type: `string`,
      title: `Google. Json.id`
    },

    googleJsonImageUrl: {
      sql: `${CUBE}.\`google._json.image.url\``,
      type: `string`,
      title: `Google. Json.image.url`
    },

    googleJsonKind: {
      sql: `${CUBE}.\`google._json.kind\``,
      type: `string`,
      title: `Google. Json.kind`
    },

    googleJsonLanguage: {
      sql: `${CUBE}.\`google._json.language\``,
      type: `string`,
      title: `Google. Json.language`
    },

    googleJsonNameFamilyname: {
      sql: `${CUBE}.\`google._json.name.familyName\``,
      type: `string`,
      title: `Google. Json.name.familyname`
    },

    googleJsonNameGivenname: {
      sql: `${CUBE}.\`google._json.name.givenName\``,
      type: `string`,
      title: `Google. Json.name.givenname`
    },

    googleJsonObjecttype: {
      sql: `${CUBE}.\`google._json.objectType\``,
      type: `string`,
      title: `Google. Json.objecttype`
    },

    googleJsonUrl: {
      sql: `${CUBE}.\`google._json.url\``,
      type: `string`,
      title: `Google. Json.url`
    },

    googleRaw: {
      sql: `${CUBE}.\`google._raw\``,
      type: `string`,
      title: `Google. Raw`
    },

    googleDisplayname: {
      sql: `${CUBE}.\`google.displayName\``,
      type: `string`,
      title: `Google.displayname`
    },

    googleGender: {
      sql: `${CUBE}.\`google.gender\``,
      type: `string`,
      title: `Google.gender`
    },

    googleId: {
      sql: `${CUBE}.\`google.id\``,
      type: `string`,
      title: `Google.id`
    },

    googleNameFamilyname: {
      sql: `${CUBE}.\`google.name.familyName\``,
      type: `string`,
      title: `Google.name.familyname`
    },

    googleNameGivenname: {
      sql: `${CUBE}.\`google.name.givenName\``,
      type: `string`,
      title: `Google.name.givenname`
    },

    googleProvider: {
      sql: `${CUBE}.\`google.provider\``,
      type: `string`,
      title: `Google.provider`
    },

    localExpired: {
      sql: `${CUBE}.\`local.expired\``,
      type: `string`,
      title: `Local.expired`
    },

    localFirstapp: {
      sql: `${CUBE}.\`local.firstApp\``,
      type: `string`,
      title: `Local.firstapp`
    },

    localHash: {
      sql: `${CUBE}.\`local.hash\``,
      type: `string`,
      title: `Local.hash`
    },

    localId: {
      sql: `${CUBE}.\`local.id\``,
      type: `string`,
      title: `Local.id`
    },

    localProvider: {
      sql: `${CUBE}.\`local.provider\``,
      type: `string`,
      title: `Local.provider`
    },

    localSalt: {
      sql: `${CUBE}.\`local.salt\``,
      type: `string`,
      title: `Local.salt`
    },

    localType: {
      sql: `${CUBE}.\`local.type\``,
      type: `string`,
      title: `Local.type`
    },

    localVerificationcode: {
      sql: `${CUBE}.\`local.verificationCode\``,
      type: `string`,
      title: `Local.verificationcode`
    },

    localVerified: {
      sql: `${CUBE}.\`local.verified\``,
      type: `string`,
      title: `Local.verified`
    },

    firstdate: {
      sql: `${CUBE}.\`firstDate\``,
      type: `time`
    }
  }
});

Затем я запустил cube. js backend и его страницу localhost:8000/kpi на моей машине. Есть ошибки типа Error: Error: Cube 'Customs' not found for path 'Customs.count', Error: Error: Cube 'Customs' not found for path 'Customs.count' и Error: Error: Can't find join path to join 'Users', 'Logs':

enter image description here

Вот как предыдущий разработчик определил его query.ts:

export const getQueryUserByType = (dateRange: any, granularity: any) => ({
  measures: ['Users.count'],
  dimensions: ['Users.localType'],
  timeDimensions: dateRange
    ? [
        {
          dimension: 'Logs.date',
          dateRange: dateRange,
          granularity,
        },
      ]
    : [
        {
          dimension: 'Logs.date',
          granularity,
        },
      ],
});

export const getQueryUserPageVist = (dateRange: any, granularity: any) => ({
  measures: ['Users.count'],
  dimensions: ['Logs.url'],
  timeDimensions: dateRange
    ? [
        {
          dimension: 'Logs.date',
          dateRange: dateRange,
          granularity,
        },
      ]
    : [
        {
          dimension: 'Logs.date',
          granularity,
        },
      ],
  filters: [
    {
      member: 'Logs.actionThetype',
      operator: 'equals',
      values: ['VisitPage'],
    },
  ],
});

export const getQueryCustomByApp = (dateRange: any, granularity: any) => ({
  measures: ['Customs.count'],
  dimensions: ['Customs.offerdisplayname'],
  timeDimensions: dateRange
    ? [
        {
          dimension: 'Customs.timestamp',
          dateRange: dateRange,
          granularity,
        },
      ]
    : [
        {
          dimension: 'Customs.timestamp',
          granularity,
        },
      ],
});

Может кто-нибудь сказать, что означают ошибки типа Error: Error: Cube 'Customs' not found for path 'Customs.count', Error: Error: Cube 'Customs' not found for path 'Customs.count' и Error: Error: Can't find join path to join 'Users', 'Logs'? Как я мог их починить?

1 Ответ

0 голосов
/ 20 февраля 2020

В вашем приложении отсутствует схема Cube. js, которая является неотъемлемой частью развертывания Cube. js. Вы должны либо попытаться найти этот отсутствующий исходный код, либо перестроить его в соответствии с вашим пользовательским интерфейсом приложения.

По мере того, как в состоянии ошибки вы пропускаете Customs определение куба, а также определение соединения между Users и Logs. Подробнее об объединениях можно узнать здесь: https://cube.dev/docs/joins

...