javascript - Cube.js - 无法连接 2 个或更多表,但不断收到 "Can' t find join path to join“错误

标签 javascript sql cube.js

我是 Cube.js 的新手,我正在尝试使用联接从 2 个或更多表中获取数据。

原始 SQL 查询如下所示,它将多个表连接在一起以显示所有 3 个表中的数据。

SELECT wo.EndDate AS DueDate, p.PurchaseNumber AS Details, [proc].Name
FROM WorkOrder wo
INNER JOIN Purchase p
ON wo.PurchaseId = p.Id
INNER JOIN Product pr
ON wo.ProductId = pr.Id
INNER JOIN [Procedure] [proc]
ON pr.ProcedureId = [proc].Id

这是我的 Cube.js 架构

cube(`WorkOrder`, {
    sql: `SELECT * FROM dbo."WorkOrder"`,

    joins: {
        Purchase: {
            relationship: `hasMany`,
            sql: `${WorkOrder}.PurchaseId = ${Purchase}.Id`
        },
        Product: {
            relationship:`hasMany`,
            sql: `${WorkOrder}.ProductId = ${Product.Id}`
        },
        Procedure: {
            relationship: `hasMany`,
            sql: `${Product}.ProcedureId = ${Procedure}.Id`
        }
    },

    dimensions: {
            id: {
                sql: `${CUBE}."Id"`,
                type: `number`,
                primaryKey: true,
                shown: true
            },

            scheduledstartdate: {
                sql: `${CUBE}."ScheduledStartDate"`,
                type: `time`
            },

            scheduledenddate: {
                sql: `${CUBE}."ScheduledEndDate"`,
                type: `time`
            }
    }
});

cube(`Purchase`, {
    sql: `SELECT * FROM dbo."Purchase"`,

    dimensions: {
        id: {
            sql: `${CUBE}."Id"`,
            type: `number`,
            primaryKey: true
        },

        customerpurchasenumber: {
            sql: `${CUBE}."CustomerPurchaseNumber"`,
            type: `string`
        }
    }
});

cube(`Product`, {
    sql: `SELECT * FROM dbo."Product"`,

    dimensions: {
        id: {
            sql: `${CUBE}."Id"`,
            type: `number`,
            primaryKey: true
        },

        name: {
            sql: `${CUBE}."Name"`,
            type: `string`
        }
    }
});

cube(`Procedure`, {
    sql: `SELECT * FROM dbo."Procedure"`,

    dimensions: {
        id: {
            sql: `${CUBE}."Id"`,
            type: `number`,
            primaryKey: true
        },

        name: {
            sql: `${CUBE}."Name"`,
            type: `string`
        },
    }
});

然后我会尝试用这个在 Cube.js API 中查询

'{"dimensions":["WorkOrder.scheduledenddate", "Purchase.customerpurchasenumber", "Procedure.Name"]}'

但我会不断收到“找不到连接‘工作订单’、‘购买’的连接路径”错误。我试图让它变得更简单,只查询 2 个表,但仍然出现同样的错误。有人可以指出我缺少什么才能让它发挥作用吗?

最佳答案

注意:现在有一个 more complete and correct answer in the official documentation .

当cube.js找不到为查询中传递的多维数据集构建联接的方法时,会出现“找不到联接路径...”错误。

要修复该错误,您需要描述 joins parameter

根据您描述的关系,cube.js 构建一个有向图,其中节点是立方体,边是您描述的关系。

由于cube.js在连接多维数据集时使用左连接,因此查询中多维数据集的顺序很重要。

就您而言,图表如下所示:

enter image description here

所以,您的查询是正确的

{"dimensions":["WorkOrder.scheduledenddate", "Purchase.customerpurchasenumber", "Procedure.Name"]}

但是,例如,这个查询是错误的

{"dimensions":["Procedure.name","Purchase.customerpurchasenumber"]}

由于图表没有从“Procedure”传出并通向“Purchase”的边

enter image description here

要修复此错误,请将 joins 参数添加到“Procedure”多维数据集的描述中,该参数描述“Procedure”和“Purchase”之间的关系

关于javascript - Cube.js - 无法连接 2 个或更多表,但不断收到 "Can' t find join path to join“错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63493096/

相关文章:

javascript - 使用 Cube.js 保留数据

python - 使用 Python 将 CSV 解析为 API 的数据库?

MYSQL查询从表中获取每月消费数据

mysql - 如何在Cube.js中实现间接连接?

javascript - JS-用随机单引号解析数据

c# - JQuery 对话框未从 C# 打开

javascript - 使用 angular.js 控制重复条目

javascript - 使用 node.js 快速服务器说明 Backbone.js pushState 路由?

SQL GROUP BY 子查询

javascript - 更改cube.js中结果的键名称