星型模式中的粒度导致事实表中的多个值?
Posted
技术标签:
【中文标题】星型模式中的粒度导致事实表中的多个值?【英文标题】:Granularity in Star Schema leads to multiple values in Fact Table? 【发布时间】:2016-02-12 00:06:05 【问题描述】:我目前正在尝试理解星型模式,并且在粒度方面遇到了很多困难。
假设我有一个包含 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”、“PR01、PR32、PR22”)?
我认为它可能必须保持在“每个会话”级别,但这可能会导致大量数据。对于上述示例,您将如何实现粒度?
【问题讨论】:
【参考方案1】:需要维度建模 维度和事实。
您需要一个日期/日历维度,其中包括如下列:
calendar (id,cal_date,cal_year,cal_month,...)
事实表的“粒度”是数据存储的关键。如果您有交易,那么交易应该是谷物,并且每个交易存储一行。为您的维度使用正确的(整数)代理键,您的表格不会像您担心的那么大。
现在您可以编写这样的查询,按年份汇总产品销售额:
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
【讨论】:
谢谢!还没有代表投票,但这非常有用!以上是关于星型模式中的粒度导致事实表中的多个值?的主要内容,如果未能解决你的问题,请参考以下文章