iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
自我挑戰組

轉職未滿一年的點點滴滴系列 第 27

[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] - 『轉職工作的Lessons learned』 - Cube.js(II)
下一篇
[Day 28] - 『轉職工作的Lessons learned』 - Cube.js(IV)
系列文
轉職未滿一年的點點滴滴30

尚未有邦友留言

立即登入留言