我刚接触BI/数据仓库,在构建了一些简单的示例之后,我需要构建一个更复杂的结构。我的项目最初涉及产品许可证,我测量了按月/年和按程序售出的数量,并计算了许可证的数量。
现在的要求是从这些指标中引入跳跃。也就是说,当您遇到一组特定的许可证时,他们希望看到这些许可证的一个完全不同的指标。例如,如果在2011年3月售出了100个许可证,其中有多少许可证安装、激活和取消了产品。(我们跟踪该信息,但不在数据仓库中)。所以,我正在寻找最好的方法来做这件事……我想我要做的第一件事就是为安装、激活和取消添加三个维度--并且有三个事实表?或者每个许可证都有一个事实表,并有一行表示已取消、已安装或已激活?(因此,一个许可证可能会重复)。或者有一个事实表,有不同的字段用于安装,取消,激活?另外,您如何将一个事实表与另一个事实表关联起来?它是通过维度,还是它们可以以其他方式联系在一起?
任何帮助都将不胜感激!
编辑:
谢谢你的帖子。我也在想,第二种选择可能是正确的。但是在这个实现中,我有一个独特的问题。因此,衡量的事实之一是售出的许可证数量-当然是截止日期。假设我为已安装、已取消、已激活添加了一行。要求他们能够看到一个相关的事实。例如,如果我在给定的时间范围内添加单独的行,我就可以知道售出了多少行,安装了多少行。
但他们希望看到给定的时间表,购买了多少,以及其中有多少安装了。例如,如果时间范围是3月份,并且在3月份售出了100台,那么在这100台设备中,有多少台被安装了--即使他们安装的时间可能比3月份晚得多,因此行日期不会在他们认为这是一个常见问题的时间范围内? at....is?它是如何解决的?
发布于 2011-04-15 01:22:36
我假设我要做的第一件事是添加三个维度,分别是安装、激活和取消--并且有三个事实表?
不怎么有意思。许可证销售是一个事实。这是有代价的。
许可证销售具有日期、产品、客户和计划等维度。
“安装”或“激活”是许可证的状态更改事件。每个许可证都有“事件”(销售、安装、激活等)
因此,许可证有一个“销售”事实,一个“安装”事实和一个“激活”事实。其中每一个(至少)都是与时间的关系。
或为每个许可证设置一个事实表,并为已取消、已安装或已激活设置一行?(因此,一个许可证可能会重复)。
这提供了最大的灵活性,因为每个事件都可以具有多个维度。然后可以组织一系列事件以提供许可证的历史记录。
这样做效果很好。
您通常希望为简单的计数和总和创建汇总表,这样就不必遍历最常见的仪表板指标的所有事件。
要求他们能够看到一个相关的事实。
正确的。您正在将事实表中的几行连接在一起。事件被出售的行,外部连接与事件安装的行外部连接与事件被激活的行,等等。它只是外部连接之间的事实。
所以。统计三月份的销售量很容易。Event = "Sale“。时间是指time.month = "march“的所有行。很简单。
成为安装量的三月份销售量。相同的“三月销售”where子句外部连接了这些许可证的所有“安装”事件。"sales“的Count与count(*)相同。安装的次数可能会更少,因为外部联接会放入一些空值。
成为激活的3月份的销售计数。“三月销售”where子句外部连接了所有“激活”事件。请注意,激活没有日期限制。
,还是只有一个事实表,不同的字段分别代表已安装、已取消、已激活?
这并不能很好地工作,因为表的列决定了一个业务流程。该业务流程可能会发生变化,您将无休止地调整事实数据表中的列。
已经说过,它不能“很好”地工作,这意味着它没有提供终极的灵活性。在某些情况下,您不需要终极灵活性。在某些情况下,行业(或法规)可能会定义一个相当固定的结构。
另外,您如何将一个事实表与另一个事实表相关联?它是通过维度,还是它们可以以其他方式联系在一起?
按定义标注尺寸。事实表只有两样东西--度量和FK到维度。
一些维度(如"license instance")是退化的,因为维度可能除了主键之外几乎没有可用的属性。
因此,您有一个与许可证相关的“已售出”事实,一个与许可证相关的可选“已安装”事实,以及一个与许可证相关的可选“激活”事实。许可证是一个对象ID (数据库代理键)和--也许--许可证标识符本身(可能是许可证序列号或数据库之外的其他东西)。
在做更多事情之前,请使用Ralph Kimball的数据仓库工具包。
https://stackoverflow.com/questions/5666924
复制相似问题