根据 Kimball 的说法,处理缺失数据的最佳实践是什么?

问题描述 投票:0回答:2

我有一个包含下表的数据库:

客户、发票、推销员、目标。

关心我问题的是客户、发票。

发票中使用了客户ID,但客户表中不存在这些客户ID。

如果我仅使用客户表中的客户,我的客户维度将不完整。

我的解决方案是将发票中的这些 ID 附加到客户,并用空值填充客户表中的其他列。

我不知道根据 Kimball 的说法这是否是最好的方法?

另外,如果这是一个好的解决方案,我如何添加使用Power bi Desktop来完成它?

客户表:“生成的数据”

发票表:

.....只是一个示例,表格有数千行。

powerbi powerquery powerbi-desktop data-cleaning data-modeling
2个回答
2
投票

这里有两点:

首先,(至少在导入模式下)PBI 已经为事实表中存在但在维度表中缺失的项目创建了“空白行”,正是针对这种情况。如果您不需要每个缺失客户 ID 的粒度,那么您不需要执行任何操作。

其次,如果您需要保留这种粒度,那么您的方法就是正确的。在Power Query中执行此操作的方法如下:

  1. 创建一个新查询,该查询采用您的客户维度表,并对客户 ID 与您的发票事实表进行左外连接。
  2. 展开新加入的表,但仅保留新的客户 id 列。
  3. 删除除新客户 ID 列之外的所有列。
  4. 删除重复项
  5. 您现在有了一份缺失客户 ID 的列表。确保列名与客户维度表中您的客户id的列名相同。将其附加到原始客户维度查询中,系统将自动填充缺失列的空值。

1
投票

请记住,这是 Kimball,而不是 Kimble。

There are 4 steps of DWH Methodology:
1) Understand Business Process (What your process is actually measuring?)
2) Deciding the grain (It means what every row in your fact table actually represents?)
3) Deciding Dimensions (Ask Where-What-Who-Where-How-HowMany-HowMuch to your grain declaration formed together with business processing)
4) Define Facts (Metrics)

根据这个顺序,您在构建事实表之前定义维度表:如果您的维度表(本例中的客户表)在事实表中可用的客户方面缺失,根据 DWH 维度建模,我最大的建议是正确设置您的顾客餐桌!在你的维度表中定义每一个客户!!!!然后用记录填充事实表:

[Customer ID] in Customer Table : PRIMARY KEY
[CustomerID] in Invoice Table : FOREIGN KEY

SQL and Power BI reacts very differently in your problem:

1) Power BI has no referential integrity concept: It adds a blank row to your dimension table in such a case.
2) SQL gives referential integrity error, and you can't even add rows to your fact table. I support SQL in this case personally!!!!

最后:使用一些 ETL 工具(SSIS、Talend、ODI 甚至 Power Query)使维度表尽可能准确: 例如:

请勿将任何列值留为空!

如果存在未知日期,请输入默认日期值,例如“1900-12-31” 如果文本属性未知,请输入关键字“未知”、“不可用”等..

因为维度表是SQL语句查询的来源;并且不同的 SQL 供应商(SQL Server、Oracle、MySQL)必须以不同的方式处理 NULL 值,这会导致性能方面的问题!!

© www.soinside.com 2019 - 2024. All rights reserved.