0

今日、Customer というディメンションがあります。

いくつかの SCD2 属性があるため、レコードがアクティブだった期間を示す DateFrom 列と DateTo 列があります。また、顧客が作成されたときの CreationDate と、顧客が削除されたときの RemoveDate もあります。

ここで、特定の期間の一意の顧客数を Excel で表示できるキューブを作成したいと考えています。たとえば、削除されなかった顧客の数を月ごとに表示したいとします。エクセルではこんな感じです

2013-01     2013-02     2013-03
100         120         80

2013 年 2 月には、合計 120 の顧客がありました。これは、2013 年から 2001 年にかけて 20 人の新規顧客を獲得したという意味ではありません。数人の顧客を失った可能性があるからです。たぶん、30人が新規に獲得し、10人を失いました。

これはどのように行うことができますか?私が読んだすべての例は、売上のファクト テーブルへの接続を示しています。しかし、顧客の数を知りたいです。事実のないファクト テーブルを使用し、count(distinct CustomerId) の尺度を使用することで、問題の一部を解決できたと思います。しかし、それは顧客の総数を分割する可能性を与えるだけです. 月ごとの顧客数を知りたい。したがって、日付次元を何らかの方法で接続する必要があると思います。しかし、その特定の日のみがカウントされるため、作成日または削除日と接続することはできません。

ありがとう!

4

1 に答える 1

0

非常に簡単に思えます...追跡したい期間の特定の顧客の「最初の」トランザクションのみを記録する集計ファクトテーブルを作成します。あなたの販売ファクト テーブルには販売日が含まれていると思いますか?

顧客の SCD の日付は、セールの日付とは関係ありません...

AGG_CUSTOMER_SHOP
------------------------
MONTH_NUMBER INTEGER
CUSTOMER_ID INTEGER

次のようなことを行ってこれを構築する ETL プロセス

SELECT distinct month_number, customer_id 
  FROM fact_sales s 
  JOIN dim_date d on (s.date_id = d.date_id)
  JOIN dim_customer c on (c.customer_id = s.customer_id)

date dim は月番号 (201301) などを取得し、それを集計テーブルに保存するだけです。

于 2013-04-17T15:08:27.060 に答える