我有一个存储每个通话记录的表。我试图将其ETL转换为每小时聚合日志的事实表。
Fact_CallLog
===============
dim_date_id(PK)
dim_time_id(PK)
call_type(PK)
call_result(PK)
call_count
我写了这个查询来填充事实表。
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}}上不会填充1AM的记录。
我的问题是,我应该使用Fact_CallLog
插入这些未填充的记录吗?或者不是?
答案 0 :(得分:0)
如果你没有它们,可能没有必要把它们放在桌子上。但是,如果你想要/需要它们,那么运行如下的查询:
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
. . .
即,从log_dim
的{{1}}开始,然后将LEFT JOIN
条件移至WHERE
子句。