jra*_*ara 5 sql-server null ssis data-warehouse dimensional-modeling
在事实表中的度量字段(维度建模数据仓库)中,NULL值通常映射为0的原因是什么?
Pon*_*ife 15
虽然你已经接受了另一个答案,但我会说使用NULL实际上是一个更好的选择,原因有两个.
第一个原因是,当存在NULL时,聚合返回"正确"答案(即用户倾向于期望的答案)但在使用零时给出"错误"答案.在这两个查询中考虑AVG()的结果:
-- with zero; gives 1.5
select SUM(measure), AVG(measure)
from
(
select 1.0 as 'measure'
union all
select 2.0
union all
select 3.0
union all
select 0
) dt
-- with null; gives 2
select SUM(measure), AVG(measure)
from
(
select 1.0 as 'measure'
union all
select 2.0
union all
select 3.0
union all
select null
) dt
Run Code Online (Sandbox Code Playgroud)
如果我们假设此处的度量是"制造物品的天数"而NULL表示仍在生产的物品,则零给出错误的答案.同样的推理也适用于MIN()和MAX().
第二个问题是,如果零是默认值,那么如何区分零作为默认值和零作为实际值?例如,考虑"欧元运费"的衡量标准,其中NULL表示客户自己接收订单,因此没有运费,零表示订单是免费运送给客户的.在不完全更改数据含义的情况下,不能使用零来替换NULL.您可以明显地认为,区别应该从其他维度(例如运输方法)中明确,但这会增加报告的复杂性并理解数据.
这取决于你的建模,但一般来说,这是为了避免执行聚合的复杂性.在许多情况下NULL,0为这些目的进行治疗是有意义的.
例如,NULL订单在给定时间段内的订单.或者是销售NULL收入的销售人员(对他感到羞耻!).
| 归档时间: |
|
| 查看次数: |
4103 次 |
| 最近记录: |