一、总线矩阵的核心思想

总线矩阵是 Kimball 维度建模方法论的基石。它不是一个集中式的单一模型,而是一种分步、增量地构建企业数据仓库的方法,确保最终所有数据能无缝集成。

其核心是 “一致性”

  1. 一致性维度:在不同业务过程(如销售、库存、采购)的事实表中,相同的维度(如 日期产品客户门店)必须具有相同的含义和主键。这是集成的关键。

  2. 一致性事实:如果同一个度量(如“销售额”)出现在不同事实表中,其定义、计算方式和单位必须完全一致。

总线矩阵 是这个架构的设计蓝图:

  • :代表业务过程(如“销售订单”、“库存快照”)。

  • :代表一致性维度。注:如有需要列可以增加业务过程的粒度、度量等信息。

  • 矩阵中的标记(:表示哪个业务过程与哪个维度相关。

二、总线矩阵设计建设步骤

  1. 识别业务过程:与业务部门沟通,确定核心的业务事件或活动(如下订单、支付、发货、盘点)。

  2. 声明粒度:为每个业务过程确定事实表最细粒度的记录是什么(如“单个订单行项目”、“每日库存快照”)。

  3. 识别一致性维度:找出所有业务过程共同需要的维度。这是设计中最关键、最需要跨部门协调的部分。

  4. 识别事实/度量:确定每个业务过程需要记录的数值型指标(如数量、金额、成本)。

  5. 创建总线矩阵:将以上信息整合到矩阵中,形成企业数据仓库的路线图。

  6. 迭代开发一次开发总线矩阵中的一个(或几个相关的)业务过程,构成一个数据集市。逐步扩展,最终所有数据集市通过一致性维度连接成一个整体。


三、样例:某零售企业的总线矩阵设计与实现

假设我们是一家全国性的零售企业,线下门店和线上商城同时运营。

第1步:识别核心业务过程

我们选择三个核心业务过程:

  1. 销售订单:记录客户购买行为。

  2. 每日库存快照:记录每天结束时各仓各商品的库存情况。

  3. 采购到货:记录商品从供应商到仓库的入库行为。

第2步:声明粒度

  1. 销售订单:每个订单行(一个订单可能包含多个商品)。

  2. 每日库存:每个仓库的每个商品,每天一条记录

  3. 采购到货:每个采购订单的每个到货行项目

第3步:设计一致性维度(这是核心!)

我们识别出以下关键一致性维度:

  • 日期维度:所有业务过程的必备维度。包含年、季、月、日、星期、是否节假日等属性。

  • 产品维度:所有业务过程的必备维度。包含产品ID、名称、品牌、类别、规格、所属部门等属性。

  • 门店维度:销售业务使用。包含门店ID、名称、所在城市、区域、经理、规模等级等属性。

  • 仓库维度:库存和采购业务使用。包含仓库ID、名称、类型(中央仓/区域仓)、所在城市等属性。

  • 供应商维度:采购业务使用。包含供应商ID、名称、等级、所属地区等属性。

  • 客户维度:销售业务使用。包含客户ID、姓名(可脱敏)、会员等级、注册渠道等。

关键点产品维度 是连接销售、库存、采购的核心纽带。无论是门店卖出的,还是仓库里存的,或是供应商送来的,指的都是同一个产品。

第4步:创建总线矩阵

业务过程

日期

产品

门店

仓库

供应商

客户

销售订单

每日库存快照

采购到货

注:总线矩阵清晰地展示了不同业务过程与维度的关系,是项目规划和沟通的利器。

第5步:详细模型样例

1. 一致性维度表样例 - dim_product(产品维度)

列名

类型

样例值

说明

product_key

INT (PK)

12345

代理键,自增,事实表的外键

product_id

VARCHAR

‘P10001’

业务源系统中的自然键

product_name

VARCHAR

‘男士纯棉圆领T恤’

brand

VARCHAR

‘自由棉’

category

VARCHAR

‘服装 -> 男装 -> 上装’

层级分类

unit

VARCHAR

‘件’

cost

DECIMAL

45.00

当前标准成本(缓慢变化维)

is_active

BOOLEAN

TRUE

是否在售

scd_start_date

DATE

2023-01-15

缓慢变化维类型2生效日期

scd_end_date

DATE

9999-12-31

缓慢变化维类型2失效日期

2. 事实表样例 - fact_sales_order(销售订单事实表)

列名

类型

样例值

说明

sales_order_key

BIGINT (PK)

1000000001

代理主键

date_key

INT (FK)

20230115

外键,关联 dim_date.date_key

product_key

INT (FK)

12345

外键,关联 dim_product.product_key

store_key

INT (FK)

888

外键,关联 dim_store.store_key

customer_key

INT (FK)

7777

外键,关联 dim_customer.customer_key

order_number

VARCHAR

‘SO202301150001’

业务订单号(与order_line_number构成业务主键)

order_line_number

INT

1

订单行号

sales_quantity

INT

2

可加性事实

sales_amount

DECIMAL(18,2)

199.98

销售额 = 单价 * 数量 (一致性事实,与财务系统定义一致)

cost_amount

DECIMAL(18,2)

90.00

成本额 = 产品标准成本 * 数量 (一致性事实,用于计算毛利)

discount_amount

DECIMAL(18,2)

20.00

可加性事实

3. 事实表样例 - fact_inventory_daily(每日库存事实表)

列名

类型

样例值

说明

inventory_key

BIGINT (PK)

5000001

代理主键

date_key

INT (FK)

20230115

外键,关联 dim_date.date_key

product_key

INT (FK)

12345

外键,关联 dim_product.product_key

warehouse_key

INT (FK)

99

外键,关联 dim_warehouse.warehouse_key

on_hand_qty

INT

150

半可加性事实(可跨产品,不可跨时间直接加总)

cost_value

DECIMAL(18,2)

6750.00

库存成本值


四、总结

通过总线矩阵,我们实现了:

  • 可扩展性:可以先做销售主题,再做库存主题,互不干扰,最后自然集成。

  • 数据一致性:所有数据都基于统一的dim_product, dim_date等维度,确保“单一真相源”。

  • 灵活性:业务部门可以根据需要,基于一致性维度,自由组合和分析不同业务过程的数据。