当每小时填充一个事实 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 JOIN
的log_dim
开始,然后将WHERE
条件移动到ON
子句。
我有一个 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 JOIN
的log_dim
开始,然后将WHERE
条件移动到ON
子句。