知识库

将 NULL 或缺少的数据替换为零或现有数据


发布时间: 27 Mar 2017
上次修改日期: 09 Feb 2024

问题

如何将 NULL 或缺失的值替换为零。

例如,每个项目在视图中应有三个阶段,如果某个阶段没有“[Amount]”(金额)数据,则视图应显示零。

环境

Tableau Desktop

答案

单击以展开选项 1
选项 1:使用 ZN
  1. 选择“分析”>“创建计算字段”
  2. 在打开的“计算字段”对话框中,执行以下操作,然后单击“确定”
    1. 命名此计算字段。在此示例中,计算字段名为“Replace empty cells with zero (opt 1)”(将空单元格替换为零(选项 1))
    2. 在公式字段中,创建一个类似于如下的计算:
      ZN(SUM([Amount])) 
    • ZN() 函数会将任何 NULL 值替换为零
  3. 使用类似于如下的计算创建一个名称类似于“Replace empty cells with last value (opt 1) ”(将空单元格替换为最后一个值(选项 1))的计算字段:
    • IFNULL(
          SUM([Amount]),
          PREVIOUS_VALUE(0)
      )
    • IFNULL(..., PREVIOUS_VALUE(0)) 会将任何 NULL 值替换为此计算的最后一个值,从而会创建连续的最后一个值。
    • 根据视图的构建方式,可能必须以不同方式运算 PREVIOUS_VALUE()。请参见使用表计算转换值
  4. 将“标记”卡的“文本”上的“[Amount]”(金额)替换为“[Replace empty cells with zero (opt 1)]”(将空单元格替换为零(选项 1))或“[Replace empty cells with last value (opt 1)]”(将空单元格替换为最后一个值(选项 1)),具体情况视所需的最终结果而定
  5. (可选)通过右键单击值并根据需要设置其格式,对视图中的值进行自定义。
若要查看以下视频中显示的步骤,请展开上述部分。
注意:视频没有声音。
 
单击以展开选项 2
选项 2:将筛选器替换为参数
此选项会将 NULL 数据和已从视图中筛选出的数据替换为零。
  1. 单击数据窗格中“维度”旁边的向下箭头,并选择“创建参数…”
  2. “创建参数”对话框中,执行以下操作,并单击“确定”
    1. 为参数命名。在此示例中,我将其称为“Date Parameter”(日期参数)
    2. 对于“数据类型”,选择“日期”
    3. 对于“允许的值”,选择“全部”
  3. 右键单击数据窗格中的“[Date Parameter]”(日期参数),并选择“显示参数控件”
  4. 选择“分析”>“创建计算字段”
  5. 在打开的“计算字段”对话框中,执行以下操作,然后单击“确定”
    1. 命名此计算字段。在此示例中,计算字段名为“Filtered Amount or zero (opt 2)”(筛选的金额或零(选项 2))
    2. 在公式字段中,创建一个类似于如下的计算:
      ZN( IF [Date] >= [Date Parameter]
      THEN [Amount] 
      END )
      
    • ZN() 函数会将任何 NULL 值替换为零。IF 语句替换“[Date]”(日期)筛选器。
  6. 使用类似于如下的计算创建一个名称类似于“Filtered Amount or last value (opt 2)”(筛选的金额或最后一个值(选项 2))的计算字段:
    1. IFNULL(
          SUM(
          IF [Date] >= [Date Parameter]
          THEN [Amount]
          END
          ),
          PREVIOUS_VALUE(0)
      )
    • IFNULL(..., PREVIOUS_VALUE(0)) 会将任何 NULL 值替换为此计算的最后一个值,从而会创建连续的最后一个值。
    • 根据视图的构建方式,可能必须以不同方式运算 PREVIOUS_VALUE()。请参见使用表计算转换值
  7. 将“标记”卡的“文本”上的“[Amount]”(金额)替换为“[Filtered Amount or zero (opt 2)]”(筛选的金额或零(选项 2))或“[Filtered Amount or last value (opt 2)]”(筛选的金额或最后一个值(选项 2)),具体情况视所需的最终结果而定
  8. 从“筛选器”功能区中移除“[Date]”(日期)
  9. (可选)通过右键单击值并根据需要设置其格式,对视图中的值进行自定义。
若要查看以下视频中显示的步骤,请展开上述部分。
注意:视频没有声音。
 
单击以展开选项 3
选项 3:修改视图并使用 ZN(LOOKUP())
此选项会将 NULL 值、缺失的数据或筛选出的数据替换为零。
  1. 将“[Stage]”(阶段)从“行”功能区移到“列”功能区
  2. 选择“分析”>“创建计算字段”
  3. 在打开的“计算字段”对话框中,执行以下操作,然后单击“确定”
    1. 命名此计算字段。在此示例中,计算字段名为“Replace empty cells with zero (opt 3)”(将空单元格替换为零(选项 3))
    2. 在公式字段中,创建一个类似于如下的计算:
      ZN(LOOKUP(SUM([Amount]),0))
      • LOOKUP() 计算将在视图中查找当前单元格(由 LOOKUP() 的第二个参数 0 指定)的值,如果该值为 NULL,则 ZN() 函数将返回零。
      • 请注意,视图中必须有一个空白单元格,此选项才有用,因为此计算不会添加行/列,只会写入到空白单元格中。举例来说,如果“[Stage]”(阶段)位于“行”上,则“Hibagon”将只有一个阶段行。如果“[Stage]”(阶段)移到“列”,则“Hibagon”有三个阶段列,因为视图中的至少一个其他项目包含每个阶段。
  4. 使用类似于如下的计算创建一个名称类似于“Replace empty cells with last value (opt 3) ”(将空单元格替换为最后一个值(选项 3))的计算字段:
    1. IFNULL(
          LOOKUP(SUM([Amount]),0),
          PREVIOUS_VALUE(0)
      )
    • IFNULL(..., PREVIOUS_VALUE(0)) 会将任何 NULL 值替换为此计算的最后一个值,从而会创建连续的最后一个值。
    • 根据视图的构建方式,可能必须以不同方式运算 PREVIOUS_VALUE()。请参见使用表计算转换值
  5. 根据所需的结果,将“标记”卡的“文本”上的“[Amount]”(金额)替换为“[Replace empty cells with zero (opt 3)]”(将空单元格替换为零(选项 3))或“[Replace empty cells with last value (opt 3)]”(将空单元格替换为最后一个值(选项 3))
  6. (可选)通过右键单击值并根据需要设置其格式,对视图中的值进行自定义。
若要查看以下视频中显示的步骤,请展开上述部分。
注意:视频没有声音。
 
单击以展开选项 4
选项 4:将原始数据联接到主值列表
此选项会在数据为 NULL、缺失或已从视图中筛选出时显示零。
  1. 创建一个包含所有阶段的主列表的文本文件。
  2. 在原始数据和主列表之间创建一个跨数据库联接。使用联接计算按一对一关系联接表
    • 联接计算中 Tableau Desktop 10.2 中增加的新功能。对于更低版本,必须要在基础数据源中创建虚拟链接字段。
    • 有关如何创建跨数据库联接或联接计算的详细信息,请参见联接数据
  3. 选择“分析”>“创建计算字段”
  4. 在打开的“计算字段”对话框中,执行以下操作,然后单击“确定”
    1. 命名此计算字段。在此示例中,计算字段名为“New Amount with zeros”(包含零的新金额)
    2. 在公式字段中,创建一个类似于如下的计算:
      ZN( IF [Stage] = [Stage (Stage Master List)] 
      THEN [Amount] 
      END )
    • 联接将创建重复数据,因此,为了移除重复项,我们只需要显示维度为 NULL 或主列表中相同值缺少值的数据。
    • ZN() 函数会将任何 NULL 值替换为零。
  5. 使用类似于如下的计算创建一个名称类似于“New Amount with last value”(包含最后一个值的新金额)的计算字段:
    1. IFNULL(
          SUM( IF [Stage] = [Stage (Stage Master List)]
          THEN [Amount]
          END),
          PREVIOUS_VALUE(0)
      )
    • IFNULL(..., PREVIOUS_VALUE(0)) 会将任何 NULL 值替换为此计算的最后一个值,从而会创建连续的最后一个值。
    • 根据视图的构建方式,可能必须以不同方式运算 PREVIOUS_VALUE()。请参见使用表计算转换值
  6. 根据所需的最终结果,请使用“[New Amount with zeros]”(包含零的新金额)或“[New Amount with last value]”(包含最后一个值的新金额)
  7. (可选)通过右键单击值并根据需要设置其格式,对视图中的值进行自定义。
若要查看以下视频中显示的步骤,请展开上述部分。
注意:视频没有声音。
 
单击以展开选项 5
选项 5:将缺失的数据添加到基础数据集
编辑原始数据源以加入缺失的数据。

根据使用案例,最佳解决方案可能是在包含 NULL 度量的虚拟记录中添加,然后按照上面选项 1 中的说明进行操作。

其他信息

附带的示例工作簿使用“Superstore”示例数据来演示上面的选项。所有说明都从“原始”工作表开始。

有三种主要情形可能会创建需要替换为零的空白:
  • NULL 数据:当基础数据集包含记录,但度量值为 NULL 或空白时,会发生此情形。在附带的 Excel 工作簿“NULL and Missing Examples.xlsx”中,项目“Brosnya”对于“In-Progress”和“Completed”为 NULL。
  • 缺少数据:当基础数据集中没有记录时,会发生此情形。在示例数据中,项目“Hibagon”缺少“In-Progress”和“Completed”
  • 筛选数据:附带的工作簿中有一个“[Date]”筛选器,该筛选器也会筛选出项目“Dalmatian”的“Started”和“In-Progress”。项目“Dalmatian”的每个阶段在基础数据源中都有记录。
所有选项都会将 NULL 数据替换为零。选项 3、4 和 5 会将缺失的数据替换为零。选项 2、3 和 4 会将筛选出的数据替换为零。

可以使用“分析” >“表布局”>“显示空行”/“显示空列”选项在视图中显示额外的行/列;但是,无法将任何数据写入这些行。

如果交叉表仅包含一个度量,则可能会替换格式设置选项中的所有 NULL 值。请参见设置 null 值格式
此文章是否已解决问题?