【问题标题】:Tableau mixing aggregate and non-aggregate results errorTableau 混合聚合和非聚合结果错误
【发布时间】:2017-10-23 15:40:17
【问题描述】:

我在 Tableau 中创建计算字段时遇到问题。我有这样的数据:

ID    ...   Status     Step1    Step2    Step3
1     ...   Accepted   1        1        1
2     ...   Waiting    1        0        0
3     ...   Discard    0        0        0
4     ...   Waiting    1        1        0
...

我想创建一个计算列,它会给我最后一步的名称,但仅当状态为“已接受”时。否则我想要状态。语法很简单,如下所示:

IF [Status] = 'Accepted' THEN (
    IF [Step3] = 1 THEN 'Step3' ELSEIF [STEP2] = 1 THEN 'Step2' ELSEIF [STEP1] = '1' THEN 'Step1' ELSE 'Step0') 
ELSE [Status]

问题在于“状态”列是一个维度,而“步骤”状态来自度量。所以他们是 AGG(Step1), AGG(Step2),... 我想这就是我收到此错误的原因:

Cannot mix aggregate and non-aggregate comparisons or results in 'IF' expressions.

我对 Tableau 不是很熟悉。知道如何解决这个问题吗?

【问题讨论】:

  • 您好,您的 [step3] 度量的格式是什么?假设它是一个数字,尝试将其更改为一个字符串,这样会消除错误吗?
  • 嘿,这是从实际代码中复制粘贴的吗?使用 step if 语句,您似乎在说第 3 步和第 2 步是否等于第 1 步,那么在第 1 步中您是在说它是否等于字符串(“1”)。更改此设置可以解决您的问题吗?
  • 你能显示Step1的定义吗?它是数据集中的计算字段还是显式字段
  • 您可能会发现使用多个数据源更容易——假设它们都是相同基础表的视图,由数据窗格中的不同连接创建。因此,每个 ID 都有一个数据源,对于回答诸如每个项目的当前状态之类的问题很有用。还有另一个数据源,每个状态更改都有一行(例如,记录在此日期,第 3 项更改移动到第 2 步)该数据源将方便其他类型的问题,例如那些专注于跟踪状态随时间变化的问题跨度>

标签: tableau-api calculated-field


【解决方案1】:

解决方案:

只需使用函数 ATTR 即可将非聚合函数(状态)变为聚合函数。然后可以将它们组合起来,计算就可以了。

IF ATTR([Status]) = 'Accepted' THEN (
    IF [Step3] = 1 THEN 'Step3' ELSEIF [STEP2] = 1 THEN 'Step2' ELSEIF [STEP1] = '1' THEN 'Step1' ELSE 'Step0') 
ELSE ATTR([Status])

【讨论】:

    【解决方案2】:

    Tableau 自动将数值解释为度量值。尽管在您的情况下,它们似乎是一个布尔值(0 代表假,1 代表真)并且确实应该是维度。

    将步骤 1、步骤 2 和步骤 3 转换为尺寸。突出显示字段,单击鼠标右键,然后选择转换为维度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 2014-12-25
      • 2021-11-07
      • 1970-01-01
      相关资源
      最近更新 更多