Loading

计算字段返回 Null 结果

发布日期: Nov 13, 2023
描述
计算字段返回 NULL 或空白值,而不是预期结果

Cause

  • 对于情形 1、2 和 4,任何包括 NULL 的计算将返回 NULL,因为 NULL 值不是数字值,因此需要特殊处理。
  • 对于情形 3,Tableau 向没有 ELSE 语句的任何逻辑计算中添加 ELSE NULL。这意味着,如果所有条件为 False,则将返回 NULL。
  • 对于情形 5,任何除以零的数字在数学上是未定义的。为保持一致,Tableau 会将值显示为 NULL。有关详细信息,请参阅 Wikipedia 文章被零除
解决方案
单击以展开解决方案
情形 1:字段包含 NULL 值的表达式可能会返回 NULL 值
对于基础数据中一个或两个度量值均为 NULL 的记录,表达式 [Sales]+[Profit] 将返回 NULL。如果整个总和为 NULL,即使 SUM() 这样的聚合会忽略 NULL 值,表达式 SUM([Sales])+SUM([Profit]) 也可能返回 NULL。

解决方案:将字段或聚合封装在 ZN() 中
ZN() 函数可将 NULL 值转换为零。

[Sales] + [Profit] 将变为 ZN( [Sales] ) + ZN( [Profit] )

SUM( [Sales] ) + SUM( [Profit] ) 将变为 ZN( SUM( [Sales] )) + ZN( SUM( [Profit] ))
单击以展开解决方案
情形 2:包含 NULL 值的条件将返回 NULL 值
任何引用任一 NULL 的条件都将返回 NULL。例如,[Region] = NULL 将始终返回 NULL 值。

解决方案:使用 ISNULL() 或 IFNULL()
ISNULL() 函数将检查字段或文本值是否为 NULL,并返回 True 或 False。IFNULL() 函数将 NULL 值替换为指定值。

[Region] = NULL 将变为 ISNULL( [Region] )
单击以展开解决方案
情形 3:如果没有条件为 True,则不含 ELSE 语句的 CASE 或 IF 语句将返回 NULL 值
Tableau 将遍历每个条件,直至一个条件为 True 为止,然后返回该值。如果没有条件为 True,则 Tableau 将返回 ELSE 语句中的值。如果没有 ELSE 语句,则 Tableau 将返回 NULL。例如,下面的计算将始终返回 NULL,因为“North Pole”不是示例 Superstore 数据集中的一个区域:
 
IF [Region] = "North Pole"
THEN [Sales]
END
 
选项 1:更改条件以使其返回 True。例如,

IF [Region] = "Central"
THEN [Sales]
END


选项 2:添加 ELSE 语句,以返回不是 NULL 的其他值。例如,

IF [Region] = "North Pole"
THEN [Sales]
ELSE 0
END
单击以展开解决方案
情形 4:包括多个互斥 CASE 或 IF 语句的表达式可能返回 NULL 值
用于比较 IF 或 CASE 语句,或者包含多个绝不会同时为 True 的条件的计算可能会返回 NULL。例如,下面使用 Superstore 数据的示例将始终返回 NULL,因为基础数据中没有两个 IF 语句均同时返回非 NULL 值的记录: 
IF [Region] = "Central" THEN [Sales] END
-
IF [Region] = "West" THEN [Sales] END

解决方案:修改计算,以便所有表达式均返回非 NULL 值

选项 1 

将每个 IF THEN 语句封装在一个聚合中,例如 SUM():
SUM( IF [Region] = "Central" THEN [Sales] END )
 - 
SUM( IF [Region] = "West" THEN [Sales] END )

注意:如果条件语句中使用的任何维度包括在视图中,则此选项将不起作用。如果视图中包括“[Region]”(区域),上面的示例将不起作用。


选项 2

将每个聚合的 IF THEN 语句封装在详细级别 (LOD) 表达式中。例如:
{ FIXED : SUM( IF [Region] = "Central" THEN [Sales] END ) }

-

{ FIXED : SUM( IF [Region] = "West" THEN [Sales] END ) }

 

注意:可能必须将视图中的维度添加到上面的计算中(放在 FIXED 后面)。

选项 3

将每个聚合的 IF THEN 语句封装在表函数中。例如:
WINDOW_SUM( SUM( IF [Region] = "Central" THEN [Sales] END ))
- 
WINDOW_SUM( SUM( IF [Region] = "West" THEN [Sales] END ))
有关使用表函数的另一个示例,请参见计算视图中相同度量的两个值之间的差异
单击以展开解决方案
情形 5:将非数值字符串转换为数字
在转换为数字后,包含非数值字符的字符串(也称为文本值)将返回 NULL。

解决方案:修改字符串以移除非数值字符
举例来说,如果字段“[Price]”(价格)包含字符串“$4.50”,则以下计算将返回 NULL:

FLOAT( [Price] )

如果“[Price]”(价格)中的每个值都有“$”前缀,则可将计算修改为

FLOAT( RIGHT( [Price], LEN( [Price] ) - 1 ))

如果“[Price]”(价格)包含的一些字符串值带“$”,一些未带“$”,则可将计算修改为:

FLOAT(
IF ISNULL( FLOAT( LEFT( [Price],1 )))
THEN RIGHT( [Price], LEN( [Price] ) - 1 )
ELSE [Price]
END

)
单击以展开解决方案
情形 6:除以零的表达式将返回 NULL
在 Tableau 中,任何数除以零都将返回 NULL 值。

解决方案:将分母更改为另一个值。
单击以展开解决方案
情形 7:DATE() 或 DATEPARSE() 可能返回 NULL
如果计算机的区域设置不支持文本值的日期格式,则函数 DATE() 或 DATEPARSE() 可能返回 NULL。有关详细信息,请参见将字段转换为日期字段

如果指定日期格式与字段的日期格式不匹配,则函数 DATEPARSE() 也可能返回 NULL。例如,字段“[Order Date]”(订单日期)包含格式设置为 m/d/yyyy(例如“1/13/2018”)的值。计算 DATEPARSE('m-d-yyyy', [Order Date] ) 将返回 NULL 值,因为它使用破折号,而不是斜杠。

解决方案:更改日期格式以与数据的日期格式完全匹配
知识文章编号

001474028

 
正在加载
Salesforce Help | Article