数据仓库 - 维度建模

时间:2011-04-14 17:07:36

标签: data-warehouse modeling dimension fact

我是BI / Datawarehousing的新手,在构建了一些简单的样本之后,我需要构建一个更复杂的结构。我的项目最初涉及产品许可证,我按月/年和按程序计算销售量,并计算许可证数量。

现在要求引入这些指标的跳出。就像在您获得某组许可证时一样,他们希望看到完整的不同指标。例如,如果在2011年3月售出100个许可证,其中有多少安装,激活和取消产品。 (我们跟踪该信息,但不在DW中)。所以,我正在寻找最好的方法来做到这一点...我假设我要做的第一件事就是为安装,激活和取消添加三个维度 - 并且有三个事实表?或者每个许可证都有一个事实表,并且有一行用于取消,安装或激活? (因此可以重复一个许可证)。或者有一个事实表,安装,取消,激活不同的字段?另外,你如何将一个事实表与另一个事实表联系起来?它是通过尺寸,还是以其他方式相关?

非常感谢任何帮助!

编辑:

感谢帖子...我也在想第二个选项可能是正确的。但在这个实现中,我有一个独特的问题。因此,衡量的事实之一是销售的许可证数量 - 当然是按日期。让我说我添加一行安装,取消,激活。要求是他们能够看到相关的事实。例如,如果我在给定时间范围的情况下添加单个行,我可以判断已售出的数量以及已安装的数量。

但是他们希望看到给定的时间框架,购买了多少,以及其中有多少已安装。例如,如果时间范围是3月,并且100个已经在3月份出售,那么在100个中,安装了多少 - 即使它们的安装时间远远晚于3月,因此行日期不会在他们正在寻找的时间范围内在......这是一个常见的问题吗?它是如何解决的?

1 个答案:

答案 0 :(得分:4)

  

我假设我要做的第一件事是为安装,激活和取消添加三个维度 - 并且有三个事实表?

不是真的。许可证销售是一个事实。它有价格。

许可证销售的维度包括日期,产品,客户和程序。

“安装”或“激活”是许可证的状态更改事件。每个许可证都有“事件”(销售,安装,激活等)

因此,许可证具有“销售”事实,“安装”事实和“激活”事实。每个都是(最低限度)与时间的关系。

  

或者每个许可证都有一个事实表,并且有一行用于取消,安装或激活? (因此可以重复一个许可证)。

这提供了最大的灵活性,因为每个事件都可以包含多个维度。然后可以组织一系列事件来提供许可证的历史记录。

这很好用。

您通常希望为简单计数和总和创建汇总表,以节省必须遍历最常见仪表板指标的所有事件。

  

要求他们能够看到相关的事实。

右。您将从事实表中连接几行。事件被销售的一行,外部连接有一个安装事件的行外部连接,事件被激活的行等等。它只是事实中的外部连接。

因此。三月的销售数量很容易。事件=“销售”。时间是time.month =“march”的所有行。容易。

成为安装的3月的销售额。相同的“行军销售”where子句外部加入了这些许可证的所有“安装”事件。 “销售额”的计数与计数(*)相同。安装次数可能较小,因为外连接会放入一些空值。

三月的销售数量成为激活。 “march sales”where子句外部加入了所有“激活”事件。请注意,激活没有日期约束。

  

或者有一个事实表,有不同的字段用于安装,取消,激活?

这也不行,因为表的列决定了业务流程。该业务流程可能会发生变化,您将无休止地调整事实表中的列。

说过它“不行”也意味着它没有给出最大的灵活性。在某些情况下,您不需要最大的灵活性。在某些情况下,行业(或法规)可能会定义一个非常固定的结构。

  

另外,你如何将一个事实表与另一个事实表联系起来?它是通过尺寸,还是以其他方式相关?

根据定义的尺寸。事实表只有两件事 - 测量和尺寸的FK。

某些维度(例如“许可证实例”)是退化的,因为除了PK之外,维度几乎没有可用的属性。

因此,您有一个与许可证相关的“已售出”事实,这是一个与许可证相关的可选“已安装”事实,以及与许可证绑定的可选“激活”事实。许可证是对象ID(数据库代理键)和 - 可能 - 许可证标识符本身(可能是许可证序列号或数据库之外的东西)。

请在执行更多操作之前使用Ralph Kimball的数据仓库工具包。