Link 个维度的不同粒度级别的事实表

Link fact tables at different granularity levels of a dimension

数据仓库设计的新手。我有一个代表地理(例如郊区、城市、州)的非规范化维度 table。这是一个缓慢变化的维度。

还有多个事实 table,每个都处于不同的粒度级别。

是否可以对此进行建模,以便 tables 使用代理键,同时保持非规范化维度 table?

如果您实际上拥有相同的维度数据但粒度不同,那么您可以通过创建“聚合”维度来处理此问题。在您的示例中,复制 dim_geo table 定义(不是数据),将 dim 命名为 dim_geo_city 并以比 city 更小的粒度删除所有列(例如 suburb_id, 郊区).如果您在州级别有事实,那么您将以相同的方式创建 dim_geo_state - 依此类推任何进一步的聚合级别。

Fact_population 将继续引用 dim_geo 但 fact_housing 应该引用 dim_geo_city.

填充聚合 dims 的最简单方法是 运行 在基础 dim (dim_geo) 上使用 SELECT DISTINCT,并且仅包含目标 dim (dim_geo_city) - 然后获取结果数据并将适当的 SCD 逻辑应用到 insert/update 到目标 dim 中。