在 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) = 2
、avg(3) = 3
、avg(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 步 获得您想要的视图
祝你好运
我在 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) = 2
、avg(3) = 3
、avg(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 步 获得您想要的视图
祝你好运