如何在数据仓库中按顺序在多个产品中存储事实数据表
问题描述:
我试图为我的项目之一(销售订单)设计数据仓库的维度建模。我对这个概念很陌生。如何在数据仓库中按顺序在多个产品中存储事实数据表
到目前为止,我可以理解产品,客户和日期可以存储在维度表中,并且订单信息将位于事实表中。
Date_dimension表结构将是
date_dim_id, date, week_number, month_number
Product_dimension表结构将是
product_dim_id, product_name, desc, sku
Order_fact表结构将是
order_id, product_dim_id(fk), date_dim_id(fk), order_quantity, order_total_price, etc
如果次序是地方有2或更多数的产品,那么在order_fact表中会有相同的重复条目order_id, date_dim_id
请帮忙。我很困惑。我知道在关系数据库中,order table
每个订单将有一个条目,并且产品和订单之间的关系将保留在具有order_id和product_id作为外键的另一个表中。
在此先感谢。
答
这是一个经典案例,您应该(probbaly)有两个事实表 FactOrderHeader和FactOrderDetail。
FactOrderHeader将为每个订单创建一个记录,存储有关订单价值和任何订单级别折扣的信息;尽管在某些情况下它们可以表示为OrderDetail记录。
FactOrderDetail将为每个订单行记录一条记录,存储有关产品,产品成本,产品销售价格,商品数量,商品折扣的信息。等等。
如果您想要存储非正常的信息,例如订单被拍下,交付,付款的日期,您可能还需要一个DimOrderHeader。
你想从订单表头中保存什么信息?您在订单级别详细信息中创建一个事实,然后解决如何保存订单标题信息。例如,客户只出现在源系统的标题中,但在订单事实表中,它将针对所有单个产品订单重复。这没有问题。唯一的挑战是如果头上有总购物金额,则无法在多个产品记录中重复此操作。 –
对此有两种主要的解决方法:1.按记录数除运输并将其分布到所有记录中; 2.添加另一条记录并假装航运是一种产品。无论您做什么,您都需要保留原始订单号码,以便衡量“每笔订单的平均销售额”和“每份订单的平均产品数量”等。无论如何,这种头/细节尺寸建模在互联网上被讨论为令人厌恶的。你为什么不做一些研究并提出具体问题。 –
您应该使用订单行项目作为事实表的颗粒 –