Datawharehouse Fact Table Geneate

时间:2016-02-08 10:19:04

标签: postgresql data-warehouse jointable fact-table pentaho-spoon

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

1.dateWiseData

sid_date

TOTAL_IMPRESSIONS

2.devices(手机,PC等)

sid_date

DEVICE_ID

DEVICE_NAME

TOTAL_IMPRESSIONS

3.AdvertiserData

sid_date

ADVERTISER_ID

ADVERTISER_NAME

TOTAL_IMPRESSIONS

事实表

ID

sid_date

devicesID

ADVERTISERID

TOTAL_IMPRESSIONS

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

请帮助我们处理此案例

1 个答案:

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

如果你试图在其他任何地方携带总数,你将陷入痛苦的世界。