星型模式中的粒度导致事实表中的多个值?

时间:2016-02-12 00:06:05

标签: data-warehouse datamodel star-schema

我现在试图了解星型图案&在粒度上苦苦挣扎。

假设我有一个具有session_id,user_id,order_id,product_id的事实表,并且我希望按周用户汇总到会话(请记住,并非每个会话都会导致订单或产品& DW需要跟踪非购买用户以及购买者的会话。

我认为没有理由在事实表中跟踪order_ids或session_ids,因此它会变成:

week_date,user_id,total_orders,total_sessions ...

但是,如果用户在一周内进行多次购买,我将如何跟踪product_ids?我假设我不能将多个产品ID保存在一个数组中(例如:" 20/02 / 2012"," 5"," 3",& #34; PR01,PR32,PR22&#34)?

我认为可能需要在每个会话中保留'水平,但可能会导致非常大量的数据。您将如何实现上述示例的粒度?

1 个答案:

答案 0 :(得分:0)

尺寸建模需要尺寸和事实。

您需要一个日期/日历维度,其中包含以下列:

calendar (id,cal_date,cal_year,cal_month,...)

" grain"事实表是数据存储的关键。如果您有交易,那么交易应该是粮食,每个交易存储一行。使用适当的(整数)代理键到你的尺寸,你的桌子不会像你担心的那样大。

现在您可以编写一个这样的查询,按年计算产品销售额:

select product_name,cal_year,sum(purchase_amount)
from   fact_whatever
       inner join calendar on id = fact_whatever.calendar_id
       inner join product on id = fact_whatever.product_id
group  by product_name,cal_year