你是否曾在数据仓库的海洋中迷失方向?实体、维度、度量...这些看似熟悉却又模糊的概念,是否曾让你感到困惑?
🔍 实体的世界:从商品到用户,实体是我们分析的核心对象。
🌐 维度的视角:选择合适的维度,就是选择正确的分析角度。
📈 度量的力量:业务流程中的数值,是我们洞察数据的关键。
🌟 粒度的艺术:粒度决定细节,细节决定成败。
📐 口径的统一:取数的逻辑,决定数据的精准度。
📊 指标的衡量:指标是口径的量化,是业务需求的直接体现。
🏷️ 标签的魅力:标签是高度精炼的特征标识,让数据更加生动。
🔑 自然键与代理键:业务与技术的完美结合,让数据更加紧密相连。
🚫 退化维度的智慧:空间换时间,让查询更加高效。
⏳ 缓慢变化维的奥秘:时间是最好的见证者,维度也会随时间而变。
🔍 微型维度的创新:解决快变超大维度的难题,让分析更加灵活。
🔄 下钻与上卷:粒度的粗细之间,尽显数据分析的魅力。 🛒 数据集市的聚焦:专注单一主题,让分析更加深入。
为了更好地理解这些概念,我们可以尝试用SQL来逐一解释:
1. 实体:实体通常对应数据库中的表。
○ 示例:一个名为Products的表,包含了商品的信息。
CREATE TABLE Products ( ProductID INT PRIMARY KEY, ProductName VARCHAR(255), Category VARCHAR(255) );
2. 维度:维度在数据库中通常对应于事实表的列,用于描述事实的不同方面。
○ 示例:一个名为Sales的事实表,包含了ProductCategory作为维度。
CREATE TABLE Sales ( SaleID INT PRIMARY KEY, ProductCategory VARCHAR(255), SaleDate DATE, Quantity INT, Price DECIMAL(10,2) );
3. 度量:度量是事实表中记录的具体数值。
○ 示例:在Sales表中,Quantity和Price是度量。
4. 粒度:粒度决定了数据的详细程度,通常与事实表的设计有关。
○ 示例:Sales表中的每条记录代表一个销售事件,粒度为单个销售事件。
5. 口径:口径涉及SQL查询中的WHERE子句,用于限定查询的范围。
○ 示例:查询特定日期范围内的销售额。
SELECT SUM(Quantity * Price) AS TotalSales FROM Sales WHERE SaleDate BETWEEN '2023-01-01' AND '2023-01-31';
6. 指标:指标通常是通过SQL聚合函数计算得出的。
○ 示例:计算每个产品类别的总销售额。
SELECT ProductCategory, SUM(Quantity * Price) AS TotalSales FROM Sales GROUP BY ProductCategory;
7. 标签:标签在数据库中可能不直接体现,但可以理解为对某些列的值进行标记或分类。
○ 示例:为Products表中的商品添加一个IsFeatured标签列。
ALTER TABLE Products ADD IsFeatured BOOLEAN;
8. 自然键:自然键是业务上有意义的唯一标识符。
○ 示例:Products表中的ProductID。
9. 代理键:代理键是无业务含义的唯一标识符,用于技术上的关联。
○ 示例:如果Products表的ProductID不是连续的,可以创建一个名为ProductSK的代理键列。
ALTER TABLE Products ADD ProductSK INT IDENTITY(1,1);
10. 退化维度:退化维度在事实表中直接存储维度属性。
○ 示例:Sales表中直接存储StoreID作为退化维度。
CREATE TABLE Sales ( SaleID INT PRIMARY KEY, StoreID INT, -- 退化维度 ... );
11. 缓慢变化维:缓慢变化维的处理可以通过添加新行来实现。
○ 示例:Products表中的Manufacturer字段随时间变化。
INSERT INTO Products (ProductID, ProductName, Manufacturer, ChangeDate) VALUES (1, 'Widget', 'NewManufacturer', '2023-01-01');
12. 微型维度:微型维度通过创建单独的表来解决大维度表的问题。
○ 示例:创建一个名为ProductAttributes的微型维度表。
CREATE TABLE ProductAttributes ( AttributeID INT PRIMARY KEY, AttributeName VARCHAR(255), ProductSK INT, AttributeValue VARCHAR(255) );
13. 下钻:下钻可以通过增加查询中的细节来实现。
○ 示例:从年销售总额下钻到月销售总额。
SELECT DATE_TRUNC('month', SaleDate) AS SaleMonth, SUM(Quantity * Price) AS MonthlySales FROM Sales GROUP BY SaleMonth;
14. 上卷:上卷可以通过减少查询中的细节来实现。
○ 示例:从月销售总额上卷到年销售总额。
SELECT DATE_TRUNC('year', SaleDate) AS SaleYear, SUM(Quantity * Price) AS YearlySales FROM Sales GROUP BY SaleYear;
15. 数据集市:数据集市可以是一个独立的数据库或模式,包含特定主题的数据。
○ 示例:创建一个名为SalesDataMart的模式,包含销售相关的表。
CREATE SCHEMA SalesDataMart;
CREATE TABLE SalesDataMart.Sales (...) -- 销售相关表结构




