ray*_*ray 6 database-design sql-server ssas slowly-changing-dimension
我们有以下昏暗和事实:
客户维度:SCD 类型 2,关于客户的信息,即首次购买日期、姓名、地址等 产品维度:SCD 类型 2,关于我们的产品
客户快照事实:有关客户产品销售事实的月度财务事实:客户销售额
并且会有更多涉及客户维度的事实。
我们有一个旧数据库,它正在收集有关客户的 100 个数据字段,并被要求对这些数据进行 DW。有 100 多个字段与客户相关,其中可能是指示客户是否有资格获得某物的标志。用户想要对我们的任何事实表进行的大多数查询可能包括这些指标的过滤和/或分组。
问题是我们是否应该向我们的 Customer Dim 添加 100 多个指标,如果不是,则应如何构建数据,以便将这些信息与我们的所有其他事实结合起来。
谢谢你的帮助。
这意味着任何针对客户维度连接的事实表都可以访问所有指标。如果它们位于维度上,那么您可以轻松地使它们可用于链接到客户维度的任何事实表。
如果您只需要一个事实表,其中包含按维度属性汇总的客户数量,那么您可以创建一个“无事实事实表”,其中只有一个事实 - 值为 1 的“QTY”列。这允许计数按任何属性分组的客户。
如果 Customer 是缓慢变化的维度,请考虑在每次进行类型 2 更改时将 QTY 列中带有 -1 的附加行放入事实表中。这应该链接到维度的先前版本,当前版本具有“数量”为 1 的附加行。这允许您跟踪客户属性随时间变化的统计信息。
多维数据集可以通过实施计算度量来消耗计数随时间的变化,该计算度量对从开始到选定日期的“QTY”中的运行总和进行计算。如果需要,您还可以构建快照表。
如果属性的数量和变化量变得难以控制,那么金博尔在他的第一本书中称之为“快速变化的怪物维度”。在这种情况下,请考虑将属性拉出到单独的垃圾维度中,该维度对于每个不同的值组合都有一行。您仍然需要一些脚手架将其链接到实际维度行,以便您可以将垃圾维度键复制到具有客户维度键的任何事实表上。
多维数据集可以使用任一结构,因此它不太可能成为多维数据集的问题,而成为 ETL 处理的问题。