[英]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.