gpt4 book ai didi

sql-server - 为什么 NULL 值在事实表中映射为 0?

转载 作者:行者123 更新时间:2023-12-02 21:29:52 26 4
gpt4 key购买 nike

在事实表(维度建模数据仓库)的度量字段中,NULL 值通常映射为 0 的原因是什么?

最佳答案

虽然您已经接受了另一个答案,但我想说,出于几个原因,使用 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

如果我们假设此处的度量是“制造元素的天数”并且 NULL 表示仍在生产的元素,那么零会给出错误的答案。同样的推理也适用于 MIN() 和 MAX()。

第二个问题是,如果零是默认值,那么如何区分默认值零和实际值零?例如,考虑“欧元运费”的衡量标准,其中 NULL 表示客户自己领取订单,因此没有运费,零表示订单免费运送给客户。你不能用零来代替NULL而不完全改变数据的含义。您显然可以争辩说,从其他维度(例如运输方式)来看,区别应该很明显,但这增加了报告和理解数据的复杂性。

关于sql-server - 为什么 NULL 值在事实表中映射为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8300953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com