data-modeling - 在维度的不同粒度级别链接事实表
问题描述
数据仓库设计的新手。我有一个表示地理(例如郊区、城市、州)的非规范化维度表。这是一个缓慢变化的维度。
还有多个事实表,每个都在不同的粒度级别。
是否可以对此进行建模,以便事实表使用代理键,同时维护非规范化维度表?
解决方案
如果您实际上拥有相同的维度数据但粒度不同,那么您可以通过创建“聚合”维度来处理这个问题。在您的示例中,复制 dim_geo 表定义(而不是数据),将 dim 命名为 dim_geo_city 之类的名称,并以低于城市的粒度删除所有列(例如,郊区 ID、郊区)。如果您在州级别有事实,那么您将以相同的方式创建 dim_geo_state - 以此类推,以用于任何进一步的聚合级别。
Fact_population 将继续引用 dim_geo,但 fact_housing 应引用 dim_geo_city。
填充聚合昏暗的最简单方法是在基本昏暗 (dim_geo) 上运行 SELECT DISTINCT 并仅包含目标昏暗 (dim_geo_city) 中存在的列 - 然后获取结果数据并应用适当的 SCD 逻辑插入/将其更新为目标暗淡。
推荐阅读
- c# - 检查列表中的特定列是否有重复项,跳过空值或空值
- image - Qt - 修改 qsvg 插件以支持带有 AnimatedImage 的动画,可能吗?
- asp.net-web-api - .net core 3.1 web api 的 SSO
- java - 插入嵌入文档而不阅读整个文档 - spring,mongo
- .net - 如何将 WPF 应用程序窗口固定到桌面,它不应该在 Window + D 上最小化(显示桌面)
- docker - 运行构建时Docker env_file不起作用
- ios - 通过使用 didSet 方法或在 iOS、Swift 中使用函数将数据绑定到 tableview 单元 iOS 时有什么区别
- java - 将 .pcm 文件转换为 .wav 文件
- python - 如何使用 pygame 连接两个客户端,以便它们在同一个网络上运行,并且两个玩家都能看到彼此的动作?
- java - 在 Android Studio 中的两个 Activity 之间滑动