首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事实表:具有相同数据和不同含义的列

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

Stack Overflow用户
提问于 2013-06-14 09:07:02
回答 1查看 108关注 0票数 0

我有一个事实表,其中包含有关外贸(货物的进口/出口)的数据,我有两列,名为: coutryFrom和countryTo,coutryFrom是货物的来源国,countryTo是货物的目的地。

有些时候,我需要知道每个countryTo的出口总值,以选择前5个目的地,有时我将需要相同的结果,但由coutryFrom进口。

如您所知的国家/地区列表,为ex FR法国,IT意大利,英国,美国,...

我不知道我是应该在事实表中添加这两个国家,还是只添加国家并做一些事情来解决这个问题

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-15 01:34:05

不要将国家名称直接添加到事实表中,而是使用DIM_COUNRTY_ID代理键创建一个DIM_COUNTRY维度表,并将代理键放入事实表上的COUNTRY_FROM_IDCOUNTRY_TO_ID中。然后,您可以在查询中为DIM_COUNTRY表添加别名,以便可以将其连接到COUNTRY_FROM_IDCOUNTRY_TO_ID

排名前5的国家/地区

代码语言:javascript
复制
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个国家/地区

代码语言:javascript
复制
SELECT *
FROM 
(
  SELECT 
    RANK() OVER(ORDER BY F.AMOUNT) RANK
  , CT.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条以上的记录。最后一个要考虑的问题是,您是否希望为发起国和目的地国家维护不同的描述性属性。那么你需要两个不同的维度DIM_COUNTRY_FROM和DIM_COUNTRY_TO。无论哪种方式,您仍将使用代理键,而不是将国家名称放入事实数据表中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17099624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档