根据您的评论,听起来您的 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。