2011-04-14 55 views
1

我是BI/DatawareHousing的新手,在构建了一些简单的示例之后,我需要构建更复杂的结构。我的项目最初涉及产品许可证,我正在计算按月份/年和按计划销售的数量,并且只计算许可证数量。数据仓库 - 维度建模

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

任何帮助将不胜感激!

编辑:

谢谢你的职位......我还想到了第二个选项可能是正确的。但在这个实现中,我有一个独特的问题。因此,衡量的事实之一是销售许可证的数量 - 当然是按日期。比方说,我添加一行安装,取消,激活。要求是他们能够看到相关的事实。例如,如果我添加单独的行,给定时间范围,我可以知道有多少个已售出,以及安装了多少个。

但他们希望看到给定的时间范围,购买了多少,以及从中安装了多少。例如,如果时间框架是行军时间,并且在100人中有100人是在3月份出售的,那么安装了多少人 - 尽管他们可能比游行时间晚安装,因此行日期不会在他们期待的时间范围内在....这是一个常见问题?它是如何解决的?

回答

4

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

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

许可证销售具有日期,产品,客户和计划等维度。

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

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

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

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

这个结果非常好。

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

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

没错。你正在连接事实表中的几行。事件被销售的行,外部连接的事件被安装的行外部连接事件被激活的行等等。这只是事实之间的外部连接。

所以。三月份的销售计数很容易。活动=“销售”。时间是time.month =“march”的所有行。简单。

在成为安装的3月的销售数。同样的“三月销售”,其中条款外部与这些许可证的所有“安装”事件结合在一起。 “销售额”的计数与计数(*)相同。由于外部连接存在一些空值,因此安装计数可能会更小。

三月的销售计数成为激活。 “march sales”where clause与所有“激活”事件结合在一起。请注意,激活没有日期限制。

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

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

说了这么做,“不如”意味着它不会给予最终的灵活性。在某些情况下,您不需要最终的灵活性。在某些情况下,行业(或法规)可能会定义一个相当固定的结构。

另外,你如何将一个事实表与另一个事实表相关联?它是通过维度,还是以其他方式相关?

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

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

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

在做更多事情之前,请通过Ralph Kimball的数据仓库工具包。

+0

@ user708305:对不起,我认为这是情绪化的。我想在这里提出一个非常明确的观点。我试图变得简单直接。请删除所有状态评论。他们没有帮助。我试图使问题完整和一致,答案简单而完整。状态注释既不能帮助,状态评论既不是问题也不是答案,它们是一种元会话。请简单地删除它们。 – 2011-04-18 14:32:12