[英]How to aggregate data from another cube in cubejs?
我有以下多維數據集(我只顯示重現問題所需的數據):
發送信息:
cube(`SentMessages`, {
sql: `Select * from messages_sent`,
dimensions: {
campaignId: {
sql: `campaign_id`,
type: `number`
},
phone: {
sql: `phone_number`,
type: `number`
}
}
});
活動:
cube(`Campaign`, {
sql: `SELECT * FROM campaign`,
joins: {
SentMessages: {
sql: `${Campaign}.id = ${SentMessages}.campaign_id`,
relationship: `hasMany`
}
},
measures: {
messageSentCount: {
sql: `${SentMessages}.phone`,
type: `count`
}
},
dimensions: {
name: {
sql: `name`,
type: `string`
},
}
});
發送的查詢如下所示:
"query": {
"dimensions": ["Campaign.name"],
"timeDimensions": [
{
"dimension": "Campaign.createdOn",
"granularity": "day"
}
],
"measures": [
"Campaign.messageSentCount"
],
"filters": []
},
"authInfo": {
"iat": 1578961890,
"exp": 1579048290
},
"requestId": "da7bf907-90de-4ba0-80f8-1a802dd442f6"
由於某種原因,這會導致以下錯誤:
錯誤:“Campaign.messageSentCount”引用了導致行乘法的多維數據集。 請使用子查詢重寫它。
我在這個錯誤上搜索了很多,但找不到任何東西。 有人可以幫忙或提供一些有關問題的見解嗎? 如果框架可以顯示僅用於故障排除目的而生成的錯誤 sql,那就太好了。
Campaign
有很多SentMessages
,如果加入來計算Campaign.messageSentCount
這個計算結果可能會受到影響。 有一個簡單的檢查可以確保聚合函數中沒有引用hasMany
多維數據集。 需要這種簡單的健全性檢查以避免導致計算結果不正確的情況。 例如,如果ReceivedMessages
也被添加為Campaign
的連接,那么如果同時選擇ReceivedMessages
和SentMessages
Campaign.messageSentCount
將生成不正確的結果。
為避免此健全性檢查錯誤,此處應使用子查詢進行替換,如下所示:
發送信息:
cube(`SentMessages`, {
sql: `Select * from messages_sent`,
measures: {
count: {
type: `count`
}
},
dimensions: {
campaignId: {
sql: `campaign_id`,
type: `number`
},
phone: {
sql: `phone_number`,
type: `number`
}
}
});
活動:
cube(`Campaign`, {
sql: `SELECT * FROM campaign`,
joins: {
SentMessages: {
sql: `${Campaign}.id = ${SentMessages}.campaign_id`,
relationship: `hasMany`
}
},
measures: {
totalMessageSendCount: {
sql: `${messageSentCount}`,
type: `sum`
}
},
dimensions: {
messageSentCount: {
sql: `${SentMessages.count}`,
type: `number`,
subQuery: true
},
name: {
sql: `name`,
type: `string`
},
}
});
對於Campaign.messageSentCount
作為維度沒有任何意義的情況,可以簡化架構並直接使用SentMessages.count
。
我自己想出了一部分(至少是解決方案部分),我想我會發布以防其他人遇到困難:
看來這個定義是有問題的(而且是不必要的):
messageSentCount: {
sql: `${SentMessages}.phone`,
type: `count`
}
我相信這樣做的正確方法是向要應用 COUNT 的表添加一個度量。 在此查詢中,我想要 SentMessages.phone 的計數(如上所示),因此應將以下內容添加到 SentMessages 多維數據集中。
count: {
sql: `phone`
type: `count`,
},
然后查詢的工作方式如下:
"query": {
"dimensions": [
"Campaign.name"
],
"timeDimensions": [
{
"dimension": "SentMessages.createdOn",
"granularity": "day"
}
],
"measures": [
"SentMessages.count"
],
"filters": []
},
"authInfo": {
"iat": 1578964732,
"exp": 1579051132
},
"requestId": "c84b4596-2ee8-48e7-8e0a-974eb284dde3"
它按預期工作。 我仍然不明白行乘法錯誤以及為什么這個度量在放置在 Campaign 多維數據集中時不起作用。 我會等待接受這個答案,因為我是通過實驗發現的,但仍然不清楚問題所在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.