4.3 聊聊 Cube

在資料分析的領域中，有一個與 資料倉儲（Data Warehouse, DW） 概念相近的名詞—Cube（多維數據立方體）。由於這兩個術語經常出現在相似的場景中，因此容易被混淆。筆者起初也曾感到困惑，但實際上，這並不影響商業智能（BI）的應用。

在 OLAP（Online Analytical Processing） 中，Cube 是一種專為多維數據分析設計的數據結構。它能夠幫助我們從多個角度組織和呈現數據，並支持快速查詢與分析。Cube 通常用於高效處理彙總數據，例如分地區、產品或時間的銷售分析。

儘管 Cube 和 DW 在概念上有一定的相似性，但它們的功能和用途有所不同。本書在接下來的章節中的說明，會以資料倉儲（DW）的設計和應用為主，而對 Cube 的介紹則以基本概念為主。希望讀者在了解這兩者的異同後，能更靈活地運用 BI 工具進行數據分析。

圖片來源: https://www.javatpoint.com/data-warehouse-what-is-data-cube

4.3.1 基本概念說明

Cube 的核心概念

多維性（Multidimensionality）

OLAP Cube 是基於多維數據模型構建的，可以將數據從不同的角度進行查看和分析。每個維度（Dimension）表示數據的一個分析角度，例如時間、地區或產品。

數據事實（Facts）

Cube 中的核心數據通常是數值型的關鍵指標，稱為**事實（Facts）**，如銷售額、利潤或數量。

維度（Dimensions）

維度是數據的分類方式，幫助進行切片和分析。常見維度有：

時間維度：年、月、日

地理維度：國家、省份、城市

產品維度：產品類別、品牌、型號

度量（Measures）

每個事實與一組維度關聯，這些事實的值即為度量。例如，『2025 年台北銷售的產品 A 總銷售額是 100 萬』。

Cube 的結構

Cube 的結構由以下部分組成：

邏輯表示：

它是一個多維空間，想像為一個立方體，每個維度形成一條軸。例如：

X：時間

Y：地理區域

Z：產品

切片（Slice）：

固定某一維度後獲得的二維子集。例如，分析特定年份的銷售額。

切塊（Dice）：

選擇多個維度的特定值形成的子集。例如，分析 2025 年台北地區的某類產品銷售。

鑽取（Drill）：

向下鑽取（Drill Down）：深入到更細粒度的數據層級。例如，從年度銷售額鑽取到季度或月份的數據。

向上鑽取（Drill Up）：從更細的層級彙總到更高層級。

旋轉（Pivot）：改變維度的視角，例如從按地區查看轉為按產品查看。

兩種常見的設計模式

Star Schema

在Star Schema中，事實表位於中央，維度表環繞在周圍，幾乎一次JOIN 就能得到所需要的資訊，看起來像是星星的形狀。

Snowflake Schema

事實表一樣位於中央，維度表環繞周圍，與Star Schema不同的地方是可能會有多層的維度表，長得像是雪花一樣。

Cube 的優點

快速分析：Cube 預計算和存儲數據的匯總值，能極大提高查詢效率。

多角度分析：支持用戶從多個維度探索數據，回答如『在特定時間地點的表現如何？』這樣的問題。

直觀展示：Cube 支持與 BI 工具集成，可視化展示數據，讓商業用戶輕鬆理解分析結果。

Cube 的實際應用

零售業：分析每月的產品銷售表現，分地區和品牌查看。

製造業：評估每個工廠的生產效率，按產品類別和時間劃分。

金融業：監控每個分支機構的收入和風險，按季度和產品類別統計。

4.3.2 模擬 OLAP Cube 的資料庫表結構設計

以下是一個模擬 OLAP Cube 的資料庫表結構設計，基於典型的零售業分析場景，展示多維數據模型的實現方法。這個結構使用 星型模型（Star Schema），包括一個事實表和多個維度表。

事實表：sales_fact

用途：存儲核心的數值數據（度量），如銷售額和銷售數量。

欄位名稱 | 資料類型 | 說明
sales_id | INT (主鍵) | 唯一的銷售記錄標識
date_id | INT (外鍵) | 對應 date_dim 的主鍵
product_id | INT (外鍵) | 對應 product_dim 的主鍵
store_id | INT (外鍵) | 對應 store_dim 的主鍵
sales_amount | DECIMAL(10, 2) | 銷售金額
sales_quantity | INT | 銷售數量

維度表

日期維度表：date_dim

用途：存儲時間相關的細節，支持時間序列分析。

欄位名稱 | 資料類型 | 說明
date_id | INT (主鍵) | 唯一的日期標識
date | DATE | 日期
year | INT | 年
quarter | INT | 季度
month | INT | 月份
week | INT | 周次
day_of_week | VARCHAR(10) | 星期幾

產品維度表：product_dim

用途：存儲產品相關的細節。

欄位名稱 | 資料類型 | 說明
product_id | INT (主鍵) | 唯一的產品標識
product_name | VARCHAR(100) | 產品名稱
category | VARCHAR(50) | 產品類別
brand | VARCHAR(50) | 品牌
price | DECIMAL(10, 2) | 單價

店鋪維度表：store_dim

用途：存儲地點和銷售渠道相關的信息。

欄位名稱 | 資料類型 | 說明
store_id | INT (主鍵) | 唯一的店鋪標識
store_name | VARCHAR(100) | 店鋪名稱
location | VARCHAR(100) | 地點
region | VARCHAR(50) | 區域
channel | VARCHAR(50) | 銷售渠道（如線上/線下）

範例資料

事實表：sales_fact

sales_id | date_id | product_id | store_id | sales_amount | sales_quantity
1 | 20230101 | 101 | 201 | 500.00 | 10
2 | 20230102 | 102 | 202 | 300.00 | 5

日期維度表：date_dim

date_id | date | year | quarter | month | week | day_of_week
20230101 | 2023-01-01 | 2023 | 1 | 1 | 1 | Sunday
20230102 | 2023-01-02 | 2023 | 1 | 1 | 1 | Monday

產品維度表：product_dim

product_id | product_name | category | brand | price
101 | Product A | Electronics | BrandX | 50.00
102 | Product B | Clothing | BrandY | 60.00

店鋪維度表：store_dim

store_id | store_name | location | region | channel
201 | Store Alpha | New York | East | Online
202 | Store Beta | Los Angeles | West | Offline

如何查詢 OLAP Cube

問題：2023 年 1 月的每個產品在各地區的銷售總額是什麼？

SQL 示例

SELECT

d.year,

d.month,

p.category,

s.region,

SUM(f.sales_amount) AS total_sales

FROM

sales_fact f

JOIN

date_dim d ON f.date_id = d.date_id

JOIN

product_dim p ON f.product_id = p.product_id

JOIN

store_dim s ON f.store_id = s.store_id

WHERE

d.year = 2023 AND d.month = 1

GROUP BY

d.year, d.month, p.category, s.region;

4.3.3 Cube 和 DW 有何異同?

Cube（多維數據立方體） 和 Data Warehouse（數據倉庫） 是兩個密切相關但功能不同的概念，主要用於支持商業智能（BI）和數據分析。以下是它們的異同點：

相同點

目的：兩者都旨在為決策支持系統（DSS）提供數據，幫助用戶進行業務分析和決策。

數據來源：都從操作型數據庫（OLTP 系統）中提取數據，並經過 ETL（Extract, Transform, Load） 過程進行清洗和轉換。

支持多維分析：數據倉庫和 Cube 都可以支持多維數據分析，幫助用戶從不同角度檢視數據（例如按時間、地理區域或產品類別）。

BI 工具整合：BI 工具通常會同時訪問數據倉庫和 Cube，從數據倉庫獲取原始數據，從 Cube 提供快速預計算的分析結果。

差異點

特性 | Data Warehouse（數據倉庫） | Cube（多維數據立方體）
定義 | 用於存儲和管理大規模的業務數據，是一個關聯數據庫。 | 是一種專注於數據分析的多維數據結構。
結構設計 | 以星型或雪花模型設計，基於事實表和維度表的關聯。 | 通過多維數據模型構建，類似於數據的邏輯立方體。
數據存儲 | 存儲完整的業務數據，包括原始數據和彙總數據。 | 主要存儲彙總數據和預計算的結果，用於快速查詢。
作用範圍 | 提供多用途的數據存儲，支持多種查詢和數據處理需求。 | 專注於多維數據分析，支持切片、切塊、鑽取和旋轉等操作。
性能優化 | 需要基於索引和分區來提高查詢性能，但查詢可能較慢。 | 通過預計算和存儲彙總結果提供即時查詢能力。
應用場景 | 用於存儲長期歷史數據和支援所有類型的數據分析。 | 用於快速執行特定的業務分析，例如銷售分析或績效評估。
用戶 | 數據工程師或 BI 開發者會更頻繁地與數據倉庫交互。 | 商業用戶和高層管理者直接使用 Cube 進行數據分析。
維護成本 | 高：需要定期更新數據並優化 ETL 流程。 | 低：Cube 是在數據倉庫基礎上構建，維護相對簡單。
技術基礎 | 基於關聯數據庫技術（如 PostgreSQL、Redshift、Snowflake）。 | 基於 OLAP 技術，可能使用 MOLAP、ROLAP 或 HOLAP。

應用場景的補充說明

數據倉庫的用途**

長期存儲和管理業務數據，例如：銷售記錄、客戶資料、庫存數據。

支持複雜查詢，例如：多年的業務趨勢分析或客戶細分模型構建。

Cube 的用途

快速執行常見的業務查詢，例如：某個地區本季度的銷售額。

支持交互式分析，例如：用戶可以快速切換維度查看不同視角的數據。

實際結合案例

零售業分析：

數據倉庫：存儲每個交易的詳細記錄，包括時間戳、產品 ID、顧客 ID。

Cube：預計算每個月、每個產品類別和地區的銷售總額，方便用戶快速查詢。

金融業風險管理：

數據倉庫：存儲所有交易明細和客戶信用記錄。

Cube：快速計算不同地區的客戶違約率，支持風險預警。