0

目前,我正在构建基于我的 ODS 表和维度表的事实表。我的 ODS 表

1.dateWiseData

sid_date

总印象数

2.设备(手机,PC等)

sid_date

设备ID

设备名称

总印象数

3.AdvertiserData

sid_date

广告客户 ID

广告客户名称

总印象数

事实表

ID

sid_date

设备ID

广告客户 ID

总印象数

在这里,我们面临将所有三个表数据连接到单个事实表中的问题。在这种情况下,我们在每张桌子上都有三个不同的总印象数。但实际上表我们只是添加了单个总印象数。我们如何计算它然后加入。我们尝试了不同的连接技术人员,但没有找到完美的解决方案。

请帮助我们处理此案

4

1 回答 1

0

您是否正在尝试构建维度 (Kimball) 数据仓库?如果是这样,您可以进行一些更改。

(1) 您不需要 dateWiseData。

(2) 您不需要在设备上使用 total_impressions。

(3) 您不需要广告客户数据上的 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 回答