Tableau api 使用OR子句和多个字段时,如何解决Tableau计算错误?

Tableau api 使用OR子句和多个字段时,如何解决Tableau计算错误?,tableau-api,Tableau Api,我使用Tableau可视化一些数据,并为满足以下条件的每一行创建一个集合AVG [Parent Id]=1 or [Account Id]=1 这个公式似乎很简单。但是,我收到一条错误消息,说公式必须是聚合计算或仅引用此字段。我如何解决这个问题?谢谢。如果要根据涉及多个字段的布尔表达式的值将单个数据行分为两个类而不使用聚合,请根据公式生成一个计算字段,并将该字段用作视图中的过滤器或维度 相反,如果您希望基于特定字段(例如[Customer Id])进行动态设置,并根据条件是否成立,将[Cust

我使用Tableau可视化一些数据,并为满足以下条件的每一行创建一个集合AVG

[Parent Id]=1 or [Account Id]=1

这个公式似乎很简单。但是,我收到一条错误消息,说公式必须是聚合计算或仅引用此字段。我如何解决这个问题?谢谢。

如果要根据涉及多个字段的布尔表达式的值将单个数据行分为两个类而不使用聚合,请根据公式生成一个计算字段,并将该字段用作视图中的过滤器或维度

相反,如果您希望基于特定字段(例如[Customer Id])进行动态设置,并根据条件是否成立,将[Customer Id]包括或排除在设置中,则条件必须遵守错误消息中提到的限制

基于[Customer Id]字段的动态计算集的目标是明确地将[Customer Id]划分为属于该集成员的[Customer Id]和不属于该集成员的[Customer Id]

如果您考虑如何为关系数据源实现集合,则错误消息中提到的要求是有意义的。例如,Tableau可以在提供聚合计算器时生成having子句,例如:

select [Customer Id] group by [Customer Id] having min([Parent Id]) = 1 or Sum([Sales]) > 1000
如果条件仅提及定义集合的字段,则在未使用聚合函数时使用where子句,例如:

 select distinct [Customer Id] where [Customer Id] < 10
我并不是说每个驱动程序都会生成这个确切的SQL,但通过推理SQL Tableau可能生成什么来实现一个特性,通常可以了解它的行为方式以及为什么会有特定的限制

假设您试图根据[Customer Id]字段定义集合,但提供的公式不符合这些限制。对于[Customer Id]的某些数据行,公式的计算结果可能为true,对于具有相同[Customer Id]的其他数据行,公式的计算结果可能为false。在这种情况下,[Customer Id]是否是集合的成员将是未定义的。集合成员资格将取决于所讨论的数据行

在这种情况下,我想说的是,您可能并没有真正基于Customer Id字段定义动态集,而是考虑了其他一些目标。这导致我们在这里使用计算字段而不是集合


一句话:错误消息中的限制是基于字段的集合需要良好定义的,而不是实现强加的人为限制。

如果要根据涉及多个字段的布尔表达式的值将单个数据行分为两个类,而不使用聚合,然后根据公式创建一个计算字段,并将该字段用作视图中的过滤器或标注

相反,如果您希望基于特定字段(例如[Customer Id])进行动态设置,并根据条件是否成立,将[Customer Id]包括或排除在设置中,则条件必须遵守错误消息中提到的限制

基于[Customer Id]字段的动态计算集的目标是明确地将[Customer Id]划分为属于该集成员的[Customer Id]和不属于该集成员的[Customer Id]

如果您考虑如何为关系数据源实现集合,则错误消息中提到的要求是有意义的。例如,Tableau可以在提供聚合计算器时生成having子句,例如:

select [Customer Id] group by [Customer Id] having min([Parent Id]) = 1 or Sum([Sales]) > 1000
如果条件仅提及定义集合的字段,则在未使用聚合函数时使用where子句,例如:

 select distinct [Customer Id] where [Customer Id] < 10
我并不是说每个驱动程序都会生成这个确切的SQL,但通过推理SQL Tableau可能生成什么来实现一个特性,通常可以了解它的行为方式以及为什么会有特定的限制

假设您试图根据[Customer Id]字段定义集合,但提供的公式不符合这些限制。对于[Customer Id]的某些数据行,公式的计算结果可能为true,对于具有相同[Customer Id]的其他数据行,公式的计算结果可能为false。在这种情况下,[Customer Id]是否是集合的成员将是未定义的。集合成员资格将取决于所讨论的数据行

在这种情况下,我想说的是,您可能并没有真正基于Customer Id字段定义动态集,而是考虑了其他一些目标。这导致我们在这里使用计算字段而不是集合


一句话:错误消息中的限制是基于字段的集合需要良好定义的,而不是实现强加的人为限制。

解决方案是用max函数包装parentId

Max([Parent Id])=1 or [Account Id]=1

解决方案是用max函数包装parentId

Max([Parent Id])=1 or [Account Id]=1
试着做
从SQL的角度来看,您所说的是有意义的,但这不是它在Tableau中的工作方式。实际上,我过长的回答确实解释了为什么Tableau在定义集合时需要在[Parent Id]周围使用一个聚合函数,如MIN或MAX。这就是它在画面中的工作方式。您选择使用Max而不是Min,但我的解释仍然有效。您所说的从SQL角度来看是有意义的,但这不是Tableau中的工作方式。实际上,我过长的回答确实解释了为什么Tableau在定义集合时需要在[Parent Id]周围使用像Min或Max这样的聚合函数。这就是它在画面中的工作方式。您选择使用Max而不是Min,但我的解释仍然有效。