[Day 27] - 『转职工作的Lessons learned』 - Cube.js(III)

今天要说在後端的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 - 使用者影音互动 - 即时串流声音与影片

EP 20: Custom Launch Screen for Android

Hello, 各位 iT邦帮忙 的粉丝们大家好~~~ 本篇是 Re: 从零开始用 Xamarin 技...

Day-1 杰哥的考研纪录

杰哥的考研纪录 tags: IT铁人 首先先跟各位打个招呼! 欢迎来到杰哥的考研小天地~ 这篇会简单...

Rust-流程控制-for

如果想印出1到100的数字,更常的做法是使用for回圈而不是while 例 for i in 1.....

Context Diagram 系统上下文图

系统上下文图 System Context Diagram (SCD) 是一种概念图的呈现,用於表达...

Excel删除100个空白行,同事都只用5秒钟搞定!

在工作中或多或少都会遇到空白行存在的情况。如果只有几个空白行,那麽手动轻松删除即可,但是遇到100行...