另一个避免使用 Gordon 未涵盖的 NULL 的原因:不清楚 NULL 的含义。
有时,您在数据集市或数据仓库中有 NULL,因为 ETL 或源系统中出现问题,导致 NULL。其他时候你有一个 NULL 因为该列不适用于该特定行。或者在诸如累积快照表之类的情况下,因为该列尚未被填充,因为正在报告的进程尚未达到该列将被填充的点。
我喜欢设置多个而不是单个默认值;例如,您可以将每个维度设置为具有指示“未知”的行,您可以将其用于缺失值,并设置一个指示“N/A”的行,用于该值不适用的情况。我倾向于为键设置负整数(-1 是未知,-2 是 N/A 等),因为这允许我在每个表中对这些行使用相同的键。但正如 Kimball 和 Gordon 所指出的,您实际上应该在维度中创建这些行。
这使得运行数据质量检查以查找出现问题的情况变得非常容易。这意味着您可以在任何报告或分析工具中显示一些有意义的值,以便人们可以根据需要过滤掉尚未完全填充的行,或者您的数据管理员可以通过这些工具查找有问题的数据。或者,也许人们可能想要专门寻找其中一个维度不适用的那些行。
如果您遇到数据有时以“错误”顺序加载的情况(即填充了事实表,但尚未向相关维度成员添加维度),您还可以使用它来检查需要更新的行您的 ETL 并自动修复问题,而无需重复尝试更新那些不需要更新的行,因为它们将始终具有 NULL。
当其他人接管这个数据集市的支持时,他们会非常感激,因为他们不必花费大量时间来判断那些 NULL 或 -1 是否表示问题。