今天要说在後端的Cube.js Server连线DB後,对DB的请求需要做什麽样的设置,也就是如何建立Schema,以及Query的语法应该长什麽样子。
假设DB有张Table - users长这样:
ID | PAYING | CITY | COMPANY_NAME |
---|---|---|---|
1 | true | San Francisco | Pied Piper |
2 | true | Palo Alto | Raviga |
3 | true | Redwood | Aviato |
4 | false | Mountain View | Bream-Hall |
5 | false | Santa Cruz | Hooli |
那麽第一部就需要先在後端的Cube.js先定义一张一样的CUBE。
cube(`Users`, {
sql: `SELECT * FROM users`,
第二步,定义CUBE後,下一步是向多维数据集添加 度量和维度。
度量(Measures)被称为定量数据,例如售出的单位数量、唯一访问次数、利润等。
维度(Dimensions)被称为分类数据,例如状态、性别、产品名称或时间单位(例如,天、周、月)。
cube(`Users`, {
sql: `SELECT * FROM users`,
measures: {
count: {
sql: `id`,
type: `count`,
},
},
dimensions: {
city: {
sql: `city`,
type: `string`,
},
companyName: {
sql: `company_name`,
type: `string`,
},
},
});
type count
和 sql id
表示当通过 API 请求时,Cube.js 将生成并执行以下 SQL:
SELECT count(id) from users;
如果我们将城市维度应用於度量以查看“用户在哪里?”时,Cube.js 将生成带有GROUP BY子句的SQL :
SELECT city, count(id) from users GROUP BY 1;
执行分组时,您可以根据需要向查询添加任意数量的维度。
步骤三添加过滤器在度量(Measures)上
现在让我们回答下一个问题——“我们有多少付费用户?”。为此,我们将引入度量过滤器:
cube(`Users`, {
measures: {
count: {
sql: `id`,
type: `count`,
},
payingCount: {
sql: `id`,
type: `count`,
filters: [{ sql: `${CUBE}.paying = 'true'` }],
},
},
});
现在我们有了payingCount度量,它只显示我们的付费用户。当请求此度量时,Cube.js 将生成以下 SQL:
SELECT
count(
CASE WHEN (users.paying = 'true') THEN users.id END
) "users.paying_count"
FROM users
步骤四,使用计算量度
要回答“付费用户占总数的百分比?”,我们需要计算付费用户比例,基本上是payingCount / count。Cube.js 使执行这种计算变得非常容易。让我们向名为 的多维数据集添加一个新度量payingPercentage:
cube(`Users`, {
measures: {
count: {
sql: `id`,
type: `count`,
},
payingCount: {
sql: `id`,
type: `count`,
filters: [{ sql: `${CUBE}.paying = 'true'` }],
},
payingPercentage: {
sql: `100.0 * ${payingCount} / ${count}`,
type: `number`,
format: `percent`,
},
},
});
在这里,我们定义一个计算度量值payingPercentage,其将 payingCount通过count。此示例说明如何在其他度量定义中引用度量。当您payingPercentage 通过 API请求度量时,将生成以下 SQL:
SELECT
100.0 * count(
CASE WHEN (users.paying = 'true') THEN users.id END
) / count(users.id) "users.paying_percentage"
FROM users
<<: 予焦啦!结论与展望(二):铁人赛、正体中文科技写作与杂谈
>>: Day 26 - 使用者影音互动 - 即时串流声音与影片
Hello, 各位 iT邦帮忙 的粉丝们大家好~~~ 本篇是 Re: 从零开始用 Xamarin 技...
杰哥的考研纪录 tags: IT铁人 首先先跟各位打个招呼! 欢迎来到杰哥的考研小天地~ 这篇会简单...
如果想印出1到100的数字,更常的做法是使用for回圈而不是while 例 for i in 1.....
系统上下文图 System Context Diagram (SCD) 是一种概念图的呈现,用於表达...
在工作中或多或少都会遇到空白行存在的情况。如果只有几个空白行,那麽手动轻松删除即可,但是遇到100行...