没有人使用客户事实吗?

时间:2010-07-16 17:28:57

标签: ssas data-warehouse cube

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

我是否因为想要客户事实而做了严重错误的事情?目标是能够分析客户行为,例如订单频率,总支出,购置成本,不同,产品数量......等等。这些问题自然意味着我不是一个维度。我已经有一个订单事实,非常适合以订单为中心的查询,但不适合以客户为中心的查询。

为了向您提供更多详细信息,客户事实可能会有以下措施和维度:

措施:

  • 客户数
  • 不同的产品数量
  • 已完成订单计数
  • 总收入
  • 总费用
  • 收到的优惠券数量
  • 优惠券数量赎回
  • 兑换优惠券的费用

尺寸:

  • 订单交付日期
  • 订单交货时间
  • 订单交付地理
  • 收购来源
  • 订单类型
  • 优惠券类型

上述内容对我来说似乎很自然,但我担心在这个新的多维数据集中采用以客户为中心的方法,我错过了一个明显的禁忌。

4 个答案:

答案 0 :(得分:4)

我们有客户的事实。很多时候它们都是无事实的事实表,只是链接了几个维度。

听起来很多事实都是派生或总结的。粮食仍然很重要。如果您说订单数量是MTD(和什么日期)或所有时间等等

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

我同意以相同的方式对其进行建模是完全有效的。唯一需要注意的是所有派生数据都一样,需要保持一致。

您的客户将拥有一个维度(符合,因为它在模型之间共享),然后是一个CustomerStats事实表或其他任何内容,其中包含所有这些维度的每个事实。

答案 1 :(得分:1)

如此众多的系统以订单为中心而非以客户为中心的原因在于您如何随着时间的推移如此频繁地识别客户变更:先前将业务视为客户,将个体员工视为客户,反之亦然,或者客户将更改/拆分/合并地址,或者业务更改其名称,我们希望合并(或隔离)旧的和新的性能总计,或者现在必须扩展送货地址和帐单地址以包括支持地址,或者操作员忘记或误认为另一个地址目的,或者客户只想暂时使用特殊的送货地址,等等。

更详细地解决了这个问题here

答案 2 :(得分: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 ;

答案 3 :(得分:0)

order frequencytotal spendacquisition costdistinct product count 等措施实际上是从Orders作为事实表派生的,以客户为维度。每个客户的聚合可以很容易地聚合每个产品或每个地理位置。

正如Cade Roux建议的那样,您可以构建一个客户聚合表,该表应该与其他事实表分离,但这纯粹是一个性能决策。通过将Customers构建为Orders的维度,您可以保持最大的灵活性。