【问题标题】:Filter data using IF Statement in Tableau在 Tableau 中使用 IF 语句筛选数据
【发布时间】:2021-03-03 10:36:16
【问题描述】:

我在 tableau 中有一个类似于以下内容的数据源:

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

如果 SKU 列包含字符串 'A' 或 'D' ,我想在 tableau 中创建一个计算字段来执行 SUM 计算,并执行 AVERAGE 如果 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)

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

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

【问题讨论】:

  • 我看到所需的可视化存在一些错误。您能否通过键入或书写的方式将您想要的内容作为此处包含的示例数据的输出?
  • 试着像这样理解,你在这里工作在不同的行级别,每一行的结果都会不同,你已经为每一行定义了聚合。但是 tableau 不确定如何处理每一行的这些不同结果,这意味着如何进一步聚合这些结果。除非您非常清楚您要获得什么以及详细程度如何,否则无法提出解决方案。例如。 A 和 D 行的结果可以添加到 B 和 C 的结果中。这些可以被平均,减去。你想总结这些单独的结果。一个函数不能有多个图像
  • 我会更新帖子的。谢谢

标签: if-statement tableau-api visualization


【解决方案1】:

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

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

Step-2创建计算字段CF为

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 步获得您想要的视图

祝你好运

【讨论】:

    【解决方案2】:

    基本上,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_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 中更改它

    【讨论】:

    • 嗨@anilgoyal 我已经用更新更新了帖子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多