我对数据仓库设计很陌生,并且正在努力设计事实表,给出非常相似但有些不同的指标。假设您正在评估以下指标,您将如何分解事实表(在这种情况下,公司是客户的子集)。您是否能够为所有这些使用一个表,或者每个被测量的度量标准是否保证其自己的事实表,或者被测量的度量标准的每个部分都是一个事实表中的自己的列?
答案 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的月/年字段加入。 (您可以在每日事实表中包含月份和年份字段,但这些值最终可能会被经验不足的报表构建者错过使用)这一切都可以追溯到您的用户实际需要的内容 - 根据他们的要求设计您的事实表并且不要不要害怕拥有单独的事实表 - 数据仓库不是关于规范化,而是关于以可以使用的方式呈现数据。
祝你好运