事实表的数据仓库设计

时间:2016-08-05 22:27:01

标签: data-warehouse

我对数据仓库设计很陌生,并且正在努力设计事实表,给出非常相似但有些不同的指标。假设您正在评估以下指标,您将如何分解事实表(在这种情况下,公司是客户的子集)。您是否能够为所有这些使用一个表,或者每个被测量的度量标准是否保证其自己的事实表,或者被测量的度量标准的每个部分都是一个事实表中的自己的列?

  • 公司每日/每月/每年处理的文件数
  • 处理的公司每日/每月/每年文件大小总数
  • 公司每日/每月/每年#文件错误
  • 公司每日/每月/每年#文件总数失败
  • 客户每日/每月/每年处理的文件数
  • 处理的客户每日/每月/每年文件大小总计
  • 客户每日/每月/每年#文件错误
  • 客户每日/每月/每年#文件总数失败

1 个答案:

答案 0 :(得分:2)

根据度量名称的外观,我认为您将获得一个事实表,其中包含每个文件的记录和返回date_dim的链接

create table date_dim (
    date_sk        int,
    calendar_date  date,
    month_ordinal  int,
    month_name     nvarchar,
    Year           int,
..etc you've got your own one of these ..
)
create table fact_file_measures (
    date_sk,
    file_sk,           --ref the file_dim with additonal file info
    company_sk,        --ref the company_dim with the client details
    processed  int,    --should always be one, optional depending on how your reporting team like to work
    size_Kb    decimal -- specifiy a size measurement, ambiguity is bad
    error_count int    -- 1 if file had error, 0 if fine
    failed_count int   -- 1 or file failed, 0 if fine
)

所以现在你应该能够构建查询以获得你要求的所有内容

例如,您的月度统计信息:

select 
    c.company_name,
    c.client_name,
    sum(f.file_count) total_files,
    sum(f.size_Kb)    total_files_size_Kb,
    sum(f.file_count) total_files,
    sum(f.file_count) total_files
from
    fact_file_measure f
    inner join dim_company c on f.company_sk = c.company_sk
    inner join dim_date d on f.date_sk = d.date_sk
where
    d.month = 'January' and d.year = "1984"

如果你需要并排的日/月/年'这些东西,您可以构建年份和月份事实表来进行汇总并通过dim_date的月/年字段加入。 (您可以在每日事实表中包含月份和年份字段,但这些值最终可能会被经验不足的报表构建者错过使用)这一切都可以追溯到您的用户实际需要的内容 - 根据他们的要求设计您的事实表并且不要不要害怕拥有单独的事实表 - 数据仓库不是关于规范化,而是关于以可以使用的方式呈现数据。

祝你好运