2

倉庫の新しい顧客ファクトとディメンションを設計中です。良いサンプル モデルを探していると、奇妙なことに気付きました。誰も顧客中心の事実を持っていないようです。私が見つけたすべての例には、販売や注文などの取引イベントが中心的な事実としてあり、顧客がディメンションとして含まれています。これは私に疑問を投げかけます。

顧客の事実を知りたくて、何か重大な間違いを犯しているでしょうか? 目標は、注文頻度、総支出、獲得コスト、個別、製品数などの顧客の行動を分析できるようにすることです。これらの質問は、私にとって当然、ディメンションではなく事実を意味します。注文中心のクエリには適していますが、顧客中心のクエリには適していない注文ファクトが既にあります。

もう少し詳しく説明すると、顧客ファクトには次のメジャーとディメンションが含まれる可能性があります。

対策:

  • 顧客数
  • 個別商品数
  • 完了した注文数
  • 総収入
  • 総費用
  • 受け取ったクーポンの数
  • 引き換えられたクーポンの数
  • 引き換えたクーポンの費用

寸法:

  • 注文納期
  • 注文配達時間
  • 注文配送地域
  • 取得元
  • 注文タイプ
  • クーポンの種類

上記は非常に自然なことのように思えますが、この新しいキューブで顧客中心のアプローチを採用することで、明らかなノーノーを見逃しているのではないかと懸念しています。

4

4 に答える 4

4

お客様の事実があります。多くの場合、それらは事実のないファクト テーブルであり、いくつかのディメンションがリンクされているだけです。

あなたの事実の多くは、派生または要約されているように聞こえます。穀物は依然として重要です。注文数がその MTD (および日付) または全期間などであると言う場合。

私はそれが間違っているとは思いませんが、これは派生データであるため、ほとんどの人はそれを「データマート」または分析用のサブセットに最適な明確な用語に入れると思います。

同じようにモデル化することが完全に有効であることに同意します。注意しなければならない唯一のことは、すべての派生データが同じであることです。一貫性を保つ必要があります。

顧客にはディメンション (モデル間で共有されているため適合) があり、次に CustomerStats ファクト テーブルなどがあります。これらすべてのディメンションを共有する粒度のすべてのファクトがあります。

于 2010-07-16T19:01:02.360 に答える
1

非常に多くのシステムが顧客中心ではなく注文中心である理由は、顧客を特定する方法が時間の経過とともに非常に頻繁に変化するためです。以前はビジネスを顧客として扱っていましたが、個々の従業員を顧客として扱うように、またはその逆に進化します。住所の変更/分割/統合、または会社の名前が変更され、新旧のパフォーマンスの合計を統合 (または分離) したい場合、または配送先住所と請求先住所を拡張してサポート住所を含める必要がある場合、またはオペレーターが忘れたり、ある住所の目的を別の住所と間違えた、または顧客が特別な配送先住所を一時的にのみ使用したいなど。

これについては、こちらで詳しく説明しています。

于 2010-07-16T19:30:08.697 に答える
0

order frequencytotal spendacquisition costdistinct product countなどのメジャーはOrders実際には顧客をディメンションとするファクト テーブルから派生します。顧客ごとに集計することは、製品ごとまたは地理的な場所ごとに集計することと同じくらい簡単です。

Cade Roux が提案したように、他のファクト テーブルから分離する必要がある顧客集計テーブルを作成できますが、それは純粋にパフォーマンス上の決定になります。Customersの次元として構成することで、最大限の柔軟性を維持できますOrders

于 2010-07-20T15:58:14.143 に答える
0

私はあなたの質問を誤解しているかもしれませんが、昔ながらの方法であるfactOrder onlyから顧客の行動について何が学べるか見てみましょう。

factOrder の粒度が注文の 1 行であり、縮退ディメンションとして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 ;
于 2010-07-16T18:43:16.347 に答える