0

我是 DW 的新手,我需要为一个电子商务网站创建一个非常简单的仓库。

维度表

  • 日期维度表(id、年、季度、月、日)
  • 时间维度表(id、小时、分钟)
  • 产品维度表(id、产品名称、价格、类别id)
  • 产品类别维度表(id、类别名称)

事实表

  • 每个产品的销售额(日期 ID、产品 ID、销售计数、价格总和)

此事实表适用于“6 月份售出多少产品”等问题。

但我需要回答诸如“6 月份哪个类别的产品销量最多?”之类的问题。或“星期三一天中最成功的时间是什么时候?”。

我看到两种可能性:

  1. 我可以在产品事实表中添加新列(类别 ID 或时间 ID)。但是这个id会改变表的粒度
  2. 我可以为类别创建另一个事实表,其中将包含有关类别的事实。但这(在我看来)是在浪费磁盘空间,不是吗?

哪种可能性是正确的?

4

3 回答 3

1

Your sales fact table should be by order line item

You could add a degenerate dimension just for hour of the day, or add a time dimension table at the grain of hour.

Why don't you just add category name to dim_product?

于 2013-03-02T02:02:31.807 回答
0

如果您在每个项目的销售额级别创建您的 Fact_table,即几乎在事务粒度上,我认为您可以将类别 ID 添加到 Fact_table 引用一个 Dim_category。这肯定会增加关于 Fact_table 的磁盘存储,但在稍后阶段,这个 Datamart 将能够回答您的任何问题。

于 2013-05-30T09:40:26.563 回答
0

是的。始终以最精细的方式创建业务流程中发生的事实(如果您的源系统允许)——在这种情况下,每个产品在特定数据和时间向客户的每次销售。如果(且仅当)需要性能时,您始终可以稍后从这些细化事实创建聚合

与返工相比,磁盘空间非常便宜。

于 2015-12-16T03:27:46.163 回答