事实表:具有相同数据和不同含义的列

时间:2013-06-14 01:07:02

标签: database-design data-warehouse business-intelligence

我的事实表包含有关外贸(货物进出口)的数据,我有2列,名为:coutryFrom和countryTo,coutryFrom是货物来自的国家,countryTo是目的地好。

我需要了解每个国家的出口总值,以便选择前5个目的地,有时我需要相同的结果,但需要通过coutryFrom进口。

如您所知,国家/地区预定义的国家/地区列表,适用于FR法国,IT意大利,英国,美国,......

我不知道我是否应该在事实表中添加两个国家/或者只添加国家/地区并采取措施来解决此问题

感谢

1 个答案:

答案 0 :(得分:3)

不要将国家/地区名称直接添加到事实表中,而是使用DIM_COUNTRY代理键创建DIM_COUNRTY_ID维度表,并将代理键放入COUNTRY_FROM_ID和{{1在事实表上。然后,您可以在查询中对COUNTRY_TO_ID表进行别名,以便它可以加入DIM_COUNTRYCOUNTRY_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。无论哪种方式,您仍然会使用代理键而不是将国家/地区名称放入事实表中。