在 Kimball 星型模式中处理多粒度事实的方法

问题描述 投票:0回答:1

我目前正在致力于构建星型模式。我有两个不同粒度的事实表。

  • 事实表 A 具有Location级别的数据
  • 事实表 B 具有LocationGroup级别的数据,这是Location
  • 之上的摘要
  • 我们有一个 Location 维度,可以滚动到 LocationGroup 级别。该表有主键
    LocationSk
  • 我们有一个带有主键 LocationGroupSk
    LocationGroup
  • 维度

我看到的用于分析这两个事实的选项(无需创建特殊视图或聚合表)如下所示:

A.向事实表 A 添加额外的

LocationGroupSk
列,以便两个事实表直接连接到 LocationGroup 维度。我将其称为“雪花”方法,因为我们需要两个维度,并且现在我们的维度中有雪花

B.在事实表 B 中添加一个

LocationSK
列,该列指向“虚拟”位置记录,该记录的 Location 为“N/A”,但 LocationGroup 的值正确,我将其称为“多粒度维度”方法,因为我们将多个颗粒放入一个维度中

有人能指出这两种方法的明显缺点吗?特别是选项 B,因为我找不到任何有关这样做的 Kimball 信息。

data-modeling star-schema-datawarehouse kimball
1个回答
0
投票

在我一位尊敬的同事的帮助下进行了一些调查后,我们确定,如果您只是雪花般地缩小尺寸,Power BI(我在问题中没有提到)可以很好地处理这些情况

因此,如果您只是在 Power BI 中表示上述情况,则不需要任何这些数据库级别的方法。由于其“过滤方向”的概念,它将是正确的事情,不会重复计算等。

例如,主要按照上述方式创建所有事实和维度。

  • 事实表 A 具有位置级别的数据。它加入到位置(但不加入位置组)
  • 事实表 B 有 LocationGroup 级别的数据,它连接到 LocationGroup
  • 位置维度加入 LocationGroup
  • LocationGroup 实际上是所有内容的父级。所有连接路径都是一个>多个回到事实表

在 Power BI 中以这种方式建模时

  • 按 LocationGroup 分组时,这两个事实的指标都是正确的
  • 按位置分组时,这两个事实的指标在汇总级别上都是正确的 - 不会重复计算。数据在行上重复,但如果需要,可以使用 DAX 进行清理。
© www.soinside.com 2019 - 2024. All rights reserved.