在 Tableau 中使用 IF 语句过滤数据

Filter data using IF Statement in Tableau

我在 tableau 中有一个类似于此的数据源:

   SKU      Backup_Storage
  
   A        5
   A        1
   B        2
   B        3
   C        1
   D        0

我想在 tableau 中创建一个计算字段,如果 SKU 列包含字符串 'A' 或 [,则执行 SUM 计算=39=] ,如果 SKU 列包含字母 'C' 或 'B'

,则执行 AVERAGE 计算

这就是我正在做的事情:

IF CONTAINS(ATTR([SKU]),'A') or 
CONTAINS(ATTR([SKU]),'D') 
THEN SUM([Backup_Storage]) 
ELSEIF CONTAINS(ATTR([SKU]),'B') or 
CONTAINS(ATTR([SKU]),'C') 
THEN AVG([Backup_Storage])
END

更新 - 所需的输出为:

SKU    BACKUP
A, D   6               (This is the SUM OF A and D)
B, C   2               (This is the AVG of B and C)

上面的计算显示有效,但是,我在数据源中看到 NULLS table. 任何建议表示赞赏。

我已将计算字段命名为: SKU_FILTER_CALCULATION

基本上,IF THEN ELSE 条件在一个测试为 TRUE/FALSE 时有效。您指定的条件不是 IF THEN ELSE 的正确用例,因为 SKU 可以采用所有可能的值。这样看..

您的数据

SKU      Backup_Storage
  
   A        5
   A        1
   B        2
   B        3
   C        1
   D        0

让我们将您的计算字段命名为 CF,然后 CF 将在第一行取值 A 并输出 SUM(5) = 5。对于第二行,它将输出 sum(1) = 1,对于第三行及以后的行,它将输出为 avg(2) = 2avg(3) = 3avg(1)sum(0)分别。所有这些值仅等于 [Backup_storage],我确定您不会试图得到这个值。

如果相反,你试图获得 sum(5,1,0) + avg(2,3,1)(显然我在这里假设 +)等于 8 即一整个数据集的单一值,请继续此计算字段..

SUM(IF CONTAINS([SKU], 'A') OR CONTAINS([SKU], 'D')
THEN [Backup storage] END)
+
AVG(IF CONTAINS([SKU], 'B') OR CONTAINS([SKU], 'C')
THEN [Backup storage] END)

这将 return 显示为 8

不用说,如果您想要任何其他运算符而不是 +,则必须相应地在 CF 中更改它

根据您编辑的 post,我建议采用不同的方法。在要执行不同聚合的地方创建差异组

Step-1 在 SKU 字段上创建组。我已将此组命名为 SKUG

Step-2 创建计算字段 CF as

SUM(ZN(IF CONTAINS([SKU], 'A') OR CONTAINS([SKU], 'D')
THEN [Backup storage] END))
+
AVG(ZN(IF CONTAINS([SKU], 'B') OR CONTAINS([SKU], 'C')
THEN [Backup storage] END))

第 3 步 获得您想要的视图

祝你好运