0

現在、ODS テーブルとディメンション テーブルに基づいてファクト テーブルを作成しています。私のODSテーブルのような

1.dateWiseData

sid_date

total_impressions

2.デバイス(携帯電話、PCなど)

sid_date

デバイスID

装置名

total_impressions

3.広告主データ

sid_date

広告主 ID

広告主_名前

total_impressions

ファクト テーブル

ID

sid_date

デバイスID

広告主 ID

total_impressions

ここで、3 つのテーブル データすべてを 1 つのファクト テーブルに結合するという問題に直面しています。この場合、各テーブルに 3 つの異なる合計インプレッションがあります。しかし実際には、合計インプレッションを 1 つだけ追加するだけです。それを計算して結合する方法。さまざまな結合技術者を試しましたが、完璧な解決策は見つかりませんでした。

このケースの処理にご協力ください

4

1 に答える 1

0

次元 (Kimball) データ ウェアハウスを構築しようとしていますか? その場合、いくつかの変更を加えることができます。

(1) dateWiseData は必要ありません。

(2) デバイスでは total_impressions は必要ありません。

(3) advertiserData に total_impressions は必要ありません。

モデルが次のようになることをお勧めします。

calendar (id, cal_date, cal_year, cal_month, ... )
device (id, name)
advertiser (id, name)
impression (calendar_id, device_id, advertiser_id, impression_count)

これは、ファクトが複数のインプレッションを持つ可能性があることを前提としています。これが正しくない場合、「事実のない事実」と呼ばれるものがあり、表は次のようになります。

impression (calendar_id, device_id, advertiser_id)

たとえば、特定の日付のデバイス別の合計インプレッション数を計算するクエリを実行できるようになりました。

select device.name,count(*)
from   impression
       inner join device on device.id = device_id
       inner join calendar on calendar.id = calendar_id
where  calendar.cal_date = '2016-02-08'
group  by device.name;

それはあなたの要件を満たしていますか?

編集:以下の質問に答えてください。

その場合、ファクト テーブルの最初の形式が必要です。

impression (calendar_id, device_id, advertiser_id, impression_count)

広告主別にインプレッションを検索するクエリは次のようになります。

select advertiser.name,sum(impression_count)
from   impression
       inner join advertiser on advertiser.id = advertiser_id
       inner join calendar on calendar.id = calendar_id
where  calendar.cal_date = '2016-02-08'
group  by advertiser.name;

合計をどこかに持ち込もうとすると、苦痛の世界に陥ります。

于 2016-02-09T09:44:25.750 に答える