具有产品和库存维度的销售事实的维度建模

Posted

技术标签:

【中文标题】具有产品和库存维度的销售事实的维度建模【英文标题】:Dimensional modeling for sales fact with product and inventory dimension 【发布时间】:2014-06-16 17:57:09 【问题描述】:

我正在为销售分析构建一个维度模型,该模型具有一个名为 Sales 的事实并与 Product 维度相关联。

重点是产品库存每天都会发生变化,并且此信息对于他们分析特定产品未售出的原因很重要(例如,在 XX/XX 天,产品 123456 未售出,因为库存中没有产品)。

我想知道对这种情况进行建模的最佳选择,并在可能的情况下简要说明它的工作原理。

提前致谢!

【问题讨论】:

【参考方案1】:

这是一个相当广泛的讨论问题,所以在这里'进行一些讨论。

维度表

--  Products  -----
ProductId
Name
 (etc.)

每个被跟踪的产品包含一行 ProductId 应该是代理键

--  Time  --------
TimeId
ReportingPeriod (Q1, week 17, whatever as desired)
 (etc.)

包含每一天被跟踪的一行。 一旦知道一天活动的结果,就可以将其添加到仓库中

请注意,TimeId 不必是代理键

事实表

--  Inventory  -------------------------
ProductId
TimeId

一旦知道一天活动的结果,就可以将它们添加到仓库中 每个产品一行(每天),列出截至当天结束时可用的库存

但随后就变得复杂了:需要哪些数据,哪些数据可用?假设数据是一天的,可能要跟踪和记录的事实包括:

StartingInventory  -- What you had at the start of the day
UnitsReceived  --  Units received for storage today
UnitsSold  --  Units sold (that cannot be sold again) but not yet shipped
UnitsShipped  --  Units shipped (sold or otherwise)
EndingInventory  --  Units in stock at end of day

它会很快变得复杂。同样,很大程度上取决于您有哪些可用信息以及您的仓库会被问到哪些问题。

【讨论】:

感谢您的解释!!在我们的例子中,我们的事实表将是销售额(销售的产品总数、销售总额 - 每个产品、客户、商店等)。根据我的理解,他们想跟踪一个问题,比如“好吧,这个产品上周每天的销量在 40 左右,而本周它的销量下降了 70%。是因为库存中没有更多了吗?”。也许跟踪此信息的解决方案是通过历史表格,但我不确定它是如何工作的。 另一件事是,事实表中还会有其他指标,例如 Medium Ticket、Average Number of Sold Products、Max Price Paid、Min Price Paid... 在这种情况下,最好的办法是因为某些指标在事实中没有意义(例如,每个产品的中票:如果按产品详细说明事实,则此信息将与“售出的产品数量”相同,对吧?) 不太清楚“中票”是什么意思。如果是个别产品不适用的事实,则制作单独的事实表(可能是表 DaySummary、columsn TimeId、TotalSales、MediumTicket 等?) Medium Ticket 是总销售额中赚取的平均金额(一笔 3 美元的销售额和 7 美元的一笔,MT = 5 美元)。我的销售事实将有一些愿景:按时间、商店、产品、地区、(产品的)类别、品牌等)。我们将提取的分析类型类似于“在给定的时间段内什么产品卖得更多?”,或“今天,每小时销量最高的 10 种产品是什么?”。我不确定我应该如何构建我的事实表。 听起来像一个粗略的问题。如果您记录仓库中的每一笔销售,您几乎可以计算任何东西;如果您存储聚合(一天的总销售额),您可能会失去精确度(例如每小时销售量)。真的超出了这个问题的范围。

以上是关于具有产品和库存维度的销售事实的维度建模的主要内容,如果未能解决你的问题,请参考以下文章

维度建模实践一例 维度还是事实

维度建模实践一例 维度还是事实

20190424 数据仓库 维度建模

如何使用不同谷物的事实表对日期维度进行建模

对两个事实表之间的关系建模

大数据开发实战:维度建模1-相关概念