2010-07-16 67 views
2

我正在为我的仓库设计一个新的客户事实和维度。在我寻找好的示例模型时,我注意到一些奇怪的东西。没有人似乎有一个以客户为中心的事实。我发现的每个例子都有一个交易事件,例如销售或订单,作为以客户为维度的核心事实。这对我提出了一个问题。没有人使用客户事实?

我想通过客户的事实来认真对待错误吗?我们的目标是对客户行为进行分析,例如订单频率,总支出,购置成本,独特性,产品数量等等。这些问题自然意味着我不是一个维度。我已经有一个订单事实,对于以订单为中心的查询很有用,但对于以客户为中心的查询并不好。

为了让您更详细一点的客户情况将可能有下列措施及尺寸:

措施:

  • 客户的计数
  • 鲜明的产品数
  • 完成顺序计数
  • 总收入
  • 总成本
  • 计数券收到赎回
  • 成本券赎回

尺寸券

  • 计数:

    • 订单交货日期
    • 订单交货时间
    • 订单交货地理
    • Acquisit上述离子源
    • 订单类型
    • 优惠券类型

    的似乎很自然的我,但我很担心我缺少一个明显的禁忌,采取了以客户为中心的方法,在这个新的多维数据集。

  • +0

    另一个忽略提及的项目是需要多对多关系的数量。例如,我将具有订单日期和订单地理的维度。这两者都必须是多对多的,因为每个客户可以下多个订单,并且每个订单都可以交付到不同的地点。事实上,我的几乎所有维度都是多对多的。 这是否会改变您对我的方法智慧的评估? – 2010-07-19 04:16:59

    +0

    @凯文一个事实只能与一个维度相联系。如果客户有多个订单,“订单”不能成为客户的维度。从客户到订单有一张桥牌桌是毫无意义的 - 因为那个人必须将两个明星(客户和订单)连接到他们的业务密钥上。同上地理。不可能询问客户的“多地理区域”。订单的位置和数量以及平均订单数量都是可以询问客户的事情。看看你提出的尺寸 - 其中大部分对于顾客而言是毫无意义的。 – 2010-07-19 12:10:28

    +0

    @Kevin例如:2010年1月1日起,客户C的产品计数地理位置是什么?问这个问题没有意义。客户有这样的事实,但地理不是事实的有效维度。 – 2010-07-19 12:12:06

    回答

    0

    我可能误解了你的问题,但让我们看看,可从factOrder,老式的方式客户的行为来学习。

    假设factOrder的那粒是为了 在一行上,并且有的OrderID作为退化维度。

    -- Number of customers who ordered something at least once 
    select 
        count(distinct CustomerKey) as PayingCustomers 
    from factOrder ; 
    

    -- Number of orders and sales per customer 
    select 
         CustomerKey 
        , count(distinct OrderID) as NumberOfOrders 
        , sum(ExtendedPrice)  as Total 
    from factOrder 
    group by CustomerKey ; 
    

    -- Histogram (x = NumberOfOrders, y = People, Amount) 
    with 
    orders_per_customer as (
        select 
         CustomerKey 
        , count(distinct OrderID) as cnt 
        , sum(ExtendedPrice)  as Total 
        from factOrder 
        group by CustomerKey 
    ) 
    select 
         cnt  as NumberOfOrders 
        , count(1) as People 
        , sum(Total) as Amount 
    from orders_per_customer 
    group by cnt 
    order by cnt asc ; 
    

    -- Distinct products ordered by customer 
    select 
         CustomerKey 
        , count(distinct ProductKey) as DistinctProductsOrdered 
    from factOrder 
    group by CustomerKey ; 
    

    -- Histogram (x = NumberOfDistinctProducts, y = People) 
    with 
    products_per_customer as (
        select 
         CustomerKey 
        , count(distinct ProductKey) as cnt 
        from factOrder 
        group by CustomerKey 
    ) 
    select 
         cnt  as NumberOfDistinctProducts 
        , count(1) as People 
    from products_per_customer 
    group by cnt 
    order by cnt asc ; 
    
    +0

    我的商业用户不是与仓库交互而是与多维数据集进行交互。立方体交互由Excel或Cognos调解。虽然我可以很容易地在SQL或MDX中执行这样的查询,但我的商业用户却不能。这是我作为我的订单多维数据集的一个补充,似乎正在推动客户多维数据集的另一个原因。 – 2010-07-19 04:19:28

    4

    我们有客户资料。很多时候,他们都是只是连接几个维度的事实表。

    听起来像是你的很多事实都派生或摘要。粮食仍然很重要。如果你说的订单计数是MTD(和日期)或所有时间等。

    我不认为这有什么问题,但我认为,因为这是派生数据,大多数人会把它在“数据集市”或任何分析子集中最好的明确术语。

    我同意用相同的方式建模它是完全有效的。唯一需要注意的是与所有派生数据相同,它需要保持一致。

    您的客户将有一个尺寸(符合,因为它是模型之间共享),然后CustomerStats事实表也好,都与那粒这股所有这些方面每一个事实。

    +0

    你在这里做出了一些非常好的观点。特别是关于没有事实的事实表。但要明确这不是我要建立的。 – 2010-07-23 14:00:39

    1

    之所以这么多的系统是为了为中心而非以客户为中心是你如何识别客户如此频繁地随时间变化:以前治疗业务的客户发展成治疗个别员工为客户,反之亦然,或客户将更改/拆分/合并地址,或者企业更改其名称,并且我们希望整合(或隔离)旧的和新的性能总计,或者现在必须扩展送货地址和帐单地址以包括支持地址,或者操作员忘记或错误地为另一个地址目的,或者客户希望仅使用特定的送货地址,等等等。

    这是here更详细的说明。

    0

    措施,如order frequencytotal spendacquisition costdistinct product count实际上从Orders推导出一个事实表,与客户的尺寸。每个客户的聚合可以很容易地按每个产品或每个地理位置进行聚合。

    正如凯德鲁曾建议,你可以建立一个客户汇总表,它应该从另一个事实表然而被分离,这将完全是一个性能决定。通过构建Customers作为Orders的维度,您保留最大的灵活性。

    +0

    我已经有一个使用多个维度的订单事实。其中一个方面是客户。然而,问题是我的商业用户试图回答周围行为的很多问题都非常难以用现有的订单事实和维度来回答。我可以改变设计,但这会对我的用户产生额外的下游影响。这一新客户事实的驱动因素之一就是让我可以保留现有的事实并尽量减少对用户的影响。 – 2010-07-23 14:04:10

    +0

    由于性能问题或由于模式限制,是否极其困难? 如果是模式限制 - 你能提供一个还是两个例子? – shmichael 2010-07-27 09:04:18

    相关问题