簡體   English   中英

Cube.js - 無法加入 2 個或更多表,但不斷收到“找不到要加入的加入路徑”錯誤

[英]Cube.js - Unable to join 2 or more tables but keep getting a "Can't find join path to join" error

我是 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"]}'

但我會不斷收到“找不到加入‘WorkOrder’、‘Purchase’的加入路徑”錯誤。 我試圖讓它更容易,只查詢 2 個表,但仍然是同樣的錯誤。 有人可以指出我缺少什么才能讓它發揮作用嗎?

注意官方文檔中現在有更完整和正確的答案

當 cube.js 找不到為查詢中傳遞的多維數據集構建連接的方法時,會出現“找不到連接路徑以連接...”錯誤。

要修復錯誤,您需要描述連接參數

根據您描述的關系,cube.js 構建了一個有向圖,其中節點是立方體,邊是您描述的關系。

由於 cube.js 在連接多維數據集時使用左連接,因此查詢中多維數據集的順序很重要。

在您的情況下,圖表如下所示:

在此處輸入圖像描述

所以,你的查詢是正確的

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

但是,例如,這個查詢是錯誤的

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

由於該圖沒有從“程序”傳出並導致“購買”的邊緣

在此處輸入圖像描述

要修復錯誤,請將 joins 參數添加到“Procedure”多維數據集的描述中,它描述了“Procedure”和“Purchase”之間的關系

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM