【问题标题】: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”)?

我认为它可能必须保持在“每个会话”级别,但这可能会导致大量数据。对于上述示例,您将如何实现粒度?

【问题讨论】:

    标签: data-warehouse datamodel star-schema


    【解决方案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
    

    【讨论】:

    • 谢谢!还没有代表投票,但这非常有用!
    猜你喜欢
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多