考虑到您已经用data-warehouse
and标记了这篇文章datamart
,我只能假设您的 FT 表是某种事实,并且查询看起来像:
select
CalendarMonth
, sum(x) as Tot_1
, sum(x) * sum(y) as Tot_2
, sum(x) + sum(z) as Tot_3
from FT as f
join dimDate as d on d.DateKey = f.DateKey
join dimUser as u on u.UserKey = f.UserKey
join dimProduct as p on p.ProductKey = f.ProductKey
where CalendarYear between 2008 and 2010
and Country = 'United States'
and ProductCategory = 'Cool Gadget'
and UserGender = 'Female'
group by CalendarMonth ;
这正是事实表中度量的聚合应该是什么样子的。
现在,出于报告目的,您似乎有一个汇总表 (FA) 来加快报告速度。我只能猜测仓库是在夜间加载的,并且您的查询有时会在早上,工作时间之前准备聚合,因此它每天运行一次 - 或者至少应该运行一次。如果此查询运行时间过长,请考虑在聚合表 (FA) 中添加几个关键字段(通常是 DateKey),然后定期更新 FA 表。
例如,如果您每天有 10,000 笔销售,则上述查询每月总计约 300,000 行。如果聚合表每天聚合,则每天更新一次表需要 10,000 行的总和,而报表每月只需 30 行的总和。
总而言之,为了加速事实聚合查询关注聚合的行数——而不是聚合函数。此外,请确保维度表在查询的 WHERE 子句中提到的列上具有索引。
诚然,我可能在这里假设太多,所以这可能有帮助,也可能没有帮助。