【问题标题】:Is it typical to have the same value for FKs in my fact table across all FK columns?我的事实表中所有 FK 列的 FK 值是否相同?
【发布时间】:2012-07-23 17:52:22
【问题描述】:

我是多维数据仓库的新手,我的工作场所是 为报告目的开发数据仓库解决方案,所以这可能是一个 愚蠢的问题,但它就在这里......

我的事实表中的每条记录都有链接到各自维度表的 FK 列(例如 dimCustomer、dimGeography、dimProduct)。

在 ETL 过程中加载数据仓库时,我首先加载包含详细信息的维度表,然后加载事实表并进行查找转换以找到要放入事实表的 FK 值。这样做时,事实表中的每一行似乎都有相同值的 FK(例如,row1 在每列中的 FK 为 1,row2 的值为 2...等等)

我只是想知道这是否是典型的,或者我是否需要重新考虑仓库和 ETL 流程的设计。

任何建议将不胜感激。

谢谢

【问题讨论】:

  • 只是补充一点,当我装载仓库时,我会先清空它,然后再装载它。
  • 需要更多背景知识。可能由于您加载的顺序,FK 值自然会按该顺序下降。在源数据中找到一个实例,其中两行具有相同的客户和不同的地理位置,并查看这些点的值是什么。如果它们仍然相同,那么您可能加载不正确。更简单地说,您的 dimGeography 表中有多少 'Texas' 条目?
  • 同意@WilliamToddSalzman。你很有可能只是“幸运”了。但是请注意,如果事实中的每一行在维度中都有一行,则该数据值可能不属于维度 - 例如,如果您有 DimTransactionNumber。
  • @N West 在这种情况下,我想我可能不得不重新考虑数据仓库的设计,因为我的 OLTP 中的每一行都作为我的事实表中的单独行以及随之而来的维度加载.
  • 提供更多详细信息:数据库的性质是为联络中心处理有关各种客户的各种产品的呼叫。呼叫可以包括各种类型(例如,一般、投诉、杂项)。我需要记录谁来电和通话时长的详细信息。目前我有每个调用类型的事实表,如 FactGeneral、FactComplaint、FactMisc。

标签: ssis ssas data-warehouse sql-server-2012


【解决方案1】:

根据您的 cmets,听起来您的 ETL 流程中缺少步骤。

对于呼叫中心/联络中心,我可能会从这样的事实表开始:

CallFactID - unique key just for ETL purposes only
AssociateID - call center associate who initially took the call
ProductID - product that the user is calling about
CallTypeID - General, Complaint, Misc, etc
ClientID - company / individual that is calling
CallDateID - linked to your Date (by day) Dimension
CallTimeOfDayID - bucketed id for call time based on business rules
CallStartTimestamp - ANSI timestamp of start time
CallEndTimestamp - ANSI timestamp of end time
CallDurationTimestamp - INTERVAL data type, or integer in seconds, call duration

您的维度表将是:

AssociateDim
ProductDim
CallTypeDim
ClientDim
DateDim
TimeOfDayDim

您的 ETL 需要先构建维度。如果您的源系统中有一个关系模型,您通常只需转到各种事物的“查找”表,例如“产品”表或“关联”表,并对任何有意义的关系进行非规范化以包含为属性。例如,关系产品表可能如下所示:

PRODUCTS: ProductKey, 
          ProductName, 
          ProductTypeKey, 
          ProductManufacturerKey, 
          SKU, 
          UPC

您可以通过查找产品类型和制造商将其非规范化为一般产品维度,最终得到如下内容:

PRODUCTDIM: PRODUCTID (DW surrogate key), 
            ProductKey, 
            ProductName, 
            ProductTypeDesc, 
            ManufacturerDesc,
            ManufacturerCountry,
            SKU,
            UPC

对于仅在您的交易(通话记录)表上但基数较低的属性,您可以通过在这些表上执行SELECT DISTINCT 来创建维度。

加载完所有维度后,您可以通过基于自然键(已保存在维度中)对每个维度进行查找来加载事实,然后将该键分配给事实行.

有关使用 DW 星型模式的 ETL 的更详细指南,我强烈推荐 Ralph Kimball 的书 The Data Warehouse ETL Toolkit

【讨论】:

  • 很好的回复!感谢您提供的重要信息。我确定我会在此过程中遇到更多问题,但我会将这些问题留到另一个问题发布。
猜你喜欢
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
相关资源
最近更新 更多