If statement 在Tableau中使用IF语句筛选数据
我在tableau中有一个类似的数据源: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
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我已经用更新更新了帖子