If statement 在Tableau中使用IF语句筛选数据

If statement 在Tableau中使用IF语句筛选数据,if-statement,tableau-api,visualization,If Statement,Tableau Api,Visualization,我在tableau中有一个类似的数据源: SKU Backup_Storage A 5 A 1 B 2 B 3 C 1 D 0 我想在tableau中创建一个计算字段,如果SKU列包含字符串“a”或“d”,则执行求和计算,如果SKU列包含字母“C”或“B”,则执行平均计算 这就是我正在做的: IF CONTAINS(ATTR([SKU]),'A') or

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

   SKU      Backup_Storage
  
   A        5
   A        1
   B        2
   B        3
   C        1
   D        0
我想在tableau中创建一个计算字段,如果SKU列包含字符串“a”或“d”,则执行求和计算,如果SKU列包含字母“C”或“B”,则执行平均计算

这就是我正在做的:

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)
上面的计算显示为有效,但我在数据源表中看到空值。 如有任何建议,我们将不胜感激

我已将计算字段命名为: SKU_过滤器_计算


基本上,
IF-THEN-ELSE
条件在一个测试为真/假时起作用。您指定的条件不是
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\u 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)
当置于视图时,将返回
8


不用说,如果您需要任何其他运算符而不是
+
,则必须在
CF
中相应地更改该运算符,基本上,
如果一个测试为真/假,if-THEN-ELSE
条件起作用。您指定的条件不是
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\u 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)
当置于视图时,将返回
8


不用说,如果您想要任何其他操作符而不是
+
,您必须根据您编辑的帖子在
CF
中相应地更改该操作符,我建议使用不同的方法。创建要在其中执行不同聚合的差异组

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

步骤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获取所需视图


祝你好运

根据你编辑的帖子,我建议采用不同的方法。创建要在其中执行不同聚合的差异组

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

步骤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不确定如何处理每行的不同结果,这意味着如何进一步聚合这些结果。除非你非常清楚你想要得到什么,以及在什么样的细节层次,否则解决方案是无法提出的。例如,A行和D行的结果可以添加到B行和C行的结果中。这些结果可以求平均值,然后减去。是否要对这些单独的结果求和。一个函数不能有多个映像。我将更新帖子。谢谢,我看到在期望的可视化中有一些错误。您可以通过键入或写入此处包含的示例数据,将所需内容作为输出包含在其中吗?请尝试这样理解,您在此处使用不同的行级别,每行的结果将不同,并且您已经为每行定义了聚合。但tableau不确定如何处理每行的不同结果,这意味着如何进一步聚合这些结果。除非你非常清楚你想要得到什么,以及在什么样的细节层次,否则解决方案是无法提出的。例如,A行和D行的结果可以添加到B行和C行的结果中。这些结果可以求平均值,然后减去。是否要对这些单独的结果求和。一个函数不能有多个映像。我将更新帖子。谢谢@anilgoyal我已经用更新更新了帖子hi@anilgoyal我已经用更新更新了帖子