我正在使用Tableau来显示某些数据,我正在为满足以下条件的每一行创建一个集合。
[Parent Id]=1 or [Account Id]=1
这个公式似乎很简单。但是,我收到一条错误消息,指出“公式必须是汇总计算或仅指代此字段。”我该如何解决这个问题?感谢。
答案 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