1

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

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

任何帮助将非常感激!

编辑:

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

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

4

1 回答 1

4

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

并不真地。许可证销售是事实。它是有代价的。

许可证销售具有日期、产品、客户和程序等维度。

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

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

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

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

这非常有效。

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

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

对。您正在将事实表中的几行连接在一起。出售事件的行,外部连接的行与安装事件的行 外部连接的行与激活事件的行等。这只是事实之间的外部连接。

所以。三月份的销售统计很容易。事件 =“销售”。时间是 time.month = "march" 的所有行。简单的。

3 月份的销售量变成了安装量。相同的“三月销售”,其中条款外部加入了这些许可证的所有“安装”事件。“销售”计数与 count(*) 相同。安装计数可能会更小,因为外部连接会放入一些空值。

3 月份的销售数量变成了激活。“三月销售” where 子句外部加入了所有“激活”事件。请注意,激活没有日期限制。

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

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

话虽如此,它“效果不佳”意味着它没有提供最终的灵活性。在某些情况下,您不需要最终的灵活性。在某些情况下,行业(或法规)可能会定义一个非常固定的结构。

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

尺寸定义。事实表只有两件事——测量和对维度的 FK。

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

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

在做任何其他事情之前,请先阅读 Ralph Kimball 的数据仓库工具包。

于 2011-04-14T17:22:36.250 回答