当每小时填充一个事实 table 存储计数时,是否应该包括 0 计数记录?

When populating a fact table storing counts hourly, should 0-count records be included?

我有一个 table 存储每个通话记录。我正在尝试将其转化为一个事实 table,每小时聚合一次日志。

Fact_CallLog
===============
dim_date_id(PK)
dim_time_id(PK)
call_type(PK)
call_result(PK)
call_count

我写这个查询是为了填充事实 table。

SELECT log_dim.dim_date_id
      ,log_dim.dim_time_id
      ,log_dim.call_type
      ,log_dim.call_result
      ,COUNT(*) call_count
FROM [DW_Source_CTI].[dbo].[OLD_cti_call_log] log
LEFT JOIN (
      --categorize each call log with date, time, call type, call result
) log_dim ON log.cid = log_dim.cid
WHERE ~~~ --exclude faulty call logs
GROUP BY log_dim.dim_date_id
        ,log_dim.dim_time_id
        ,log_dim.call_type
        ,log_dim.call_result

问题是,此查询无法在没有呼叫时填充记录。例如某段时间的通话记录如下,

12AM  3 calls
1AM   0 call
2AM   1 call

那么凌晨 1 点的记录将不会在 Fact_CallLog 上填充。

我的问题是,我应该用 call_count = 0 插入这些未填充的记录吗?还是不行?

如果您没有,可能没有必要将它们放入 table。但是,如果你 want/need 他们在那里,那么 运行 查询就像:

SELECT . . .
FROM log_dim LEFT JOIN
     [DW_Source_CTI].[dbo].[OLD_cti_call_log] log
     ON log.cid = log_dim.cid AND
         ~~~ --exclude faulty call logs
. . .

即从LEFT JOINlog_dim开始,然后将WHERE条件移动到ON子句。