数据仓库中的交叉引用事实和维度

M.R*_*.R. 5 ssas data-warehouse business-intelligence

我正在尝试为许可供应商设计数据仓库,许可供应商在电子商务和其他各种场所销售许可证.他们想要跟踪的事情是销售,产品生命周期和活动.这意味着有不同的销售类型(例如新购买,促销购买,续订)和许可证的不同事件/状态,例如 - 许可证可以安装,更新,激活,注册.许可证可以多次续订(在不同的日期).

所以我认为我的尺寸非常简单 - 日期,产品,来源,销售类型和事件/状态.我会有两个事实表; 一个用于销售,另一个用于事件,它们都具有维度表的外键.我的事实表将是一个累积的事实表,其中每个事件都会添加一个新行 - 因此,许可证可以重复.但是,要求规定他们能够交叉引用这两个事实以及销售类型和事件维度.例如,如果某人看到"A"在"新购买"类型的美国电子商务商店中有100个销售,那么他们希望看到有多少'那些'100个许可证也被激活......然后他们可能会希望看到,激活的人,有多少人注册了......然后(回到saletype)注册了多少人,其中有多少人"更新了".我无法真正定义一个层面,因为你可以有很多这些组合....

我怎样才能做到这一点?正如我正在阅读的那样,我发现根据许可证本身似乎无法将这两个事实联系起来(这是我需要做的).

此外,我还在想,也许我可以拥有1个事实表,并且我可以"技术上"将saletype和eventtype组合成一个大型事件类型维度.所以,然后在事实表中将是一个大事务事实表,它将具有事件维度的偶数外键.但是,所以现在我有一个事实表,每个事件都有一行发生在许可证上.许可证会重复出现,并且一个事件可以多次出现(在不同的日期).因此,如果我选择查看某个事件的总计,我怎么能看到其他事件中还存在多少个许可?

我需要提供所有这些数字作为度量,以便业务用户可以即时查看它们(使用他们想要使用的任何OLAP浏览器)

注意:我使用的是SQL Server分析服务和SQL Server 2008 r2

作为参考,这就是我现在拥有的:

  1. DimProducts(PK:ProductID和其他属性)
  2. DimDate(PK:DateKey和其他属性)
  3. DimEvent(PK:EventID和其他属性)

  4. FactLicenses(FK:ProductID; FK:DateKey; FK:EventID和许可证字段(varchar))

所以我重复了许可证,每次发生许可证时都会发生事件(安装,激活,续订,取消,续订(再次).可能有一个许可证具有相同的eventID,但从不在同一个DateKey上.表的主键是DateKey + EventID + License

编辑:

所以,我在很多地方都读过这样的情况下的事实表应该是一个累积的事实表,它有多个指向同一(类型)维度的列 - (即日期),我应该创建角色扮演每个人的维度.但是,您如何解释许可证可以多次续订,并且可以多次安装等事实......?

M.R*_*.R. 1

此后,我又回顾了拉尔夫·金博尔的书,找到了一个可以为我解决这个问题的案例研究。我还将销售类型和活动类型合并到一个主要组中。因此,仍然存在两组事情 - 许可证可能发生一次的事情,与许可证可能发生多次的事情。许可证可能发生的所有事情现在都存储在累积事实表中。然后,许可证可能多次发生的所有情况都存储在不同的表中(每个实体或可能发生的事件“类型”都有一个不同的表)。

这有效地解决了我的问题,因为在分析服务中,我现在能够建立一种称为“引用”关系的东西,其中该关系就是“许可证”。因此,与不同表相关的任何维度都可以通过原始累积事实表(具有许可证列)进行链接。

感谢您的投入,无论谁试图回答。