我的事实表包含有关外贸(货物进出口)的数据,我有2列,名为:coutryFrom和countryTo,coutryFrom是货物来自的国家,countryTo是目的地好。
我需要了解每个国家的出口总值,以便选择前5个目的地,有时我需要相同的结果,但需要通过coutryFrom进口。
如您所知,国家/地区预定义的国家/地区列表,适用于FR法国,IT意大利,英国,美国,......
我不知道我是否应该在事实表中添加两个国家/或者只添加国家/地区并采取措施来解决此问题
感谢
答案 0 :(得分:3)
不要将国家/地区名称直接添加到事实表中,而是使用DIM_COUNTRY
代理键创建DIM_COUNRTY_ID
维度表,并将代理键放入COUNTRY_FROM_ID
和{{1在事实表上。然后,您可以在查询中对COUNTRY_TO_ID
表进行别名,以便它可以加入DIM_COUNTRY
和COUNTRY_FROM_ID
。
前5个国家 来自 :
COUNTRY_TO_ID
前5个国家 到 :
SELECT *
FROM
(
SELECT
RANK() OVER(ORDER BY F.AMOUNT) RANK
, CF.COUNTRY_NAME
, SUM(F.AMOUNT)
FROM
FACT_EXPORTS F
, DIM_COUNTRY CT
, DIM_COUNTRY CF
WHERE 0=0
AND F.COUNTRY_TO_ID = CT.DIM_COUNTRY_ID
AND F.COUNTRY_FROM_ID = CF.DIM_COUNTRY_ID
GROUP BY
CT.COUNTRY_NAME
)
WHERE
RANK <= 5
ORDER BY
RANK
;
请注意,如果存在平局,这两个查询都将返回超过5条记录。最后一个考虑因素是您是否希望为原始国家和目的地国家保留不同的描述属性。然后你需要2个单独的尺寸DIM_COUNTRY_FROM和DIM_COUNTRY_TO。无论哪种方式,您仍然会使用代理键而不是将国家/地区名称放入事实表中。