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

时间:2015-03-24 19:35:34

标签: tableau

我正在使用Tableau来显示某些数据,我正在为满足以下条件的每一行创建一个集合。

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

这个公式似乎很简单。但是,我收到一条错误消息,指出“公式必须是汇总计算或仅指代此字段。”我该如何解决这个问题?感谢。

2 个答案:

答案 0 :(得分:2)

如果要根据涉及多个字段的布尔表达式的值(不使用聚合)将单个数据行分成两个类,则从公式中创建一个计算字段,并将该字段用作过滤器或维度。图。

如果您希望根据特定字段进行动态设置,请说[客户ID],并根据条件是否成立包含或排除集合中的[客户ID],则条件必须遵守上述限制在您的错误消息中。

基于[Customer Id]字段的动态计算集的目标是明确地将[Customer Id]的Universe划分为作为集合成员的那些[Customer Ids]和不是成员的那些成员。集。

如果您考虑如何为关系数据源实现集合,则错误消息中提到的要求才有意义。例如,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。在这种情况下,[客户ID]是否是该集合的成员将是未定义的。设置成员资格取决于相关数据行。

在这种情况下,我会说你可能并没有真正根据Customer Id字段定义动态集,但还有其他一些目标。这导致使用计算字段而不是此处的集合。

底线:基于要明确定义的字段的集合需要错误消息中的限制,并且不是实现强加的人为限制。

答案 1 :(得分:2)

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

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