使用 OR 子句和多个字段时如何解决 Tableau 计算错误?
How do I resolve Tableau calculation error when using OR clause and multiple fields?
我正在使用 Tableau 来可视化一些数据,并且我正在为满足以下条件的每一行创建一个集合avg。
[Parent Id]=1 or [Account Id]=1
这个公式看起来很简单。但是,我收到一条错误消息,指出 "The formula must be an aggregate calculation or refer only to this field." 我该如何解决这个问题?谢谢
如果您想根据涉及多个字段(不使用聚合)的布尔表达式的值将单个数据行分成两个 类,则从您的公式中创建一个计算字段并将该字段用作视图中的过滤器或维度。
如果您想根据特定字段进行动态设置,比如 [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] 是否是该集合的成员将是未定义的。集合成员资格将取决于相关数据行。
在那种情况下,我想说您可能并没有真正根据客户 ID 字段定义动态集,而是考虑了一些其他目标。这导致回到这里使用计算字段而不是集合。
底线:错误消息中的限制是基于字段的集合的明确定义所必需的,而不是实施强加的人为限制。
解决方案是用 max 函数包装 parentId。
Max([Parent Id])=1 or [Account Id]=1
我正在使用 Tableau 来可视化一些数据,并且我正在为满足以下条件的每一行创建一个集合avg。
[Parent Id]=1 or [Account Id]=1
这个公式看起来很简单。但是,我收到一条错误消息,指出 "The formula must be an aggregate calculation or refer only to this field." 我该如何解决这个问题?谢谢
如果您想根据涉及多个字段(不使用聚合)的布尔表达式的值将单个数据行分成两个 类,则从您的公式中创建一个计算字段并将该字段用作视图中的过滤器或维度。
如果您想根据特定字段进行动态设置,比如 [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] 是否是该集合的成员将是未定义的。集合成员资格将取决于相关数据行。
在那种情况下,我想说您可能并没有真正根据客户 ID 字段定义动态集,而是考虑了一些其他目标。这导致回到这里使用计算字段而不是集合。
底线:错误消息中的限制是基于字段的集合的明确定义所必需的,而不是实施强加的人为限制。
解决方案是用 max 函数包装 parentId。
Max([Parent Id])=1 or [Account Id]=1