我正在参与创建利用 Kimball 星型模式方法的报告软件。整个团队(包括我)都没有使用过这项技术,所以我们是新手。
到目前为止,或系统中有几个维度和事实表。例如:
- DIM_Customer(客户维度表)
- DIM_BusinessUnit(业务单位维度表)
- FT_Transaction(事实表,每笔交易的粒度)
- FT_Customer(客户事实表,客户 ID 和截止日期在复合 PK 中)
这是 FT_Customer 的当前结构:
- customer_id #(客户 ID,复合 PK 的一部分)
- as_on_date #(观察日期,复合 PK 的一部分)
- waic (KPI)
- wat (KPI)
- waddl (KPI)
- wadtp ( KPI)
-aging_bucket_current (KPI)
-aging_bucket_1_to_10 (KPI)
-aging_bucket_11_to_25 (KPI)
- ... ...
字段 waic、wat、waddl 和 wadtp 与交易支付延迟有关。这些字段是通过针对按 customer_id 和 as_on_date 分组的 FT_Transaction 表的聚合查询计算的。
字段aging_bucket_current、aging_bucket_1_to_10 和aging_bucket_11_to_25 包含按付款延迟分类的交易数量。例如,aging_bucket_current 包含按时支付的交易数量,aging_bucket_1_to_10 包含延迟 1 到 10 天支付的交易数量……
此结构用于从 PHP Web 应用程序和 Cognos Studio 生成报告。我们讨论了重组 FT_Customer 表,以使其更适用于 Cognos 等外部系统。
FT_Customer 的新提议结构:
- customer_id #(客户 ID,复合 PK 的一部分)
- as_on_date #(观察日期,复合 PK 的一部分)
- kpi_id #(KPI 的 id,指向 DIM_KPI 维度表的外键,复合 PK 的一部分)
- kpi_value(值 KPI)
- ... ...
对于这个提案,我们将有额外的维度表 DIM_KPI:
- kpi_id #
-标题
此表将包含所有 KPI(wat、waic、waddl、老化桶...)。
FT_Customer 的第二个结构显然会比当前结构有更多的行。
FT_Customer 哪种结构更通用?
将两种结构保存在单独的表中是否可以接受?这显然会给 ETL 层带来额外的负担,因为有些工作会重复两次,但另一方面它会更容易生成各种报告。
提前感谢您的建议。