我从非规范化表中获取数据,我保留名称和操作(除了其他内容)。我想创建一个计算字段,该字段将返回工作组名称的总和,但仅当给定工作组的DB中存在五个以上的操作时才会生效。
在我想检查是否已为工作组注册了某些操作时,我是如何做到的:
WINDOW_SUM(COUNTD(IF [action] = "ADD" THEN [workgroup_name] END))
当我尝试用count做类似的事情时,我得到了#34;不能混合聚合和非聚合的参数":
WINDOW_SUM(COUNTD(IF COUNT([Number of Records]) > 5 THEN [workgroup_name] END))
我知道IF条款存在问题,但不知道如何修复它。
如何更改IF有效?也许有一种更简单的方法,我想念它?
编辑: (在Inox的回应之后)
我知道我的问题是将聚合与非聚合字段混合在一起。我不能使用过滤器来做这件事,因为我想稍后将其用作更复杂视图的一部分 - 过滤会破坏整个想法。
答案 0 :(得分:3)
不,问题是将聚合的参数(例如,sum,count)与非聚合的参数(例如,直接的任何字段)混合。这就是你正在将COUNT([Number of Records])
和[workgroup_name]
如果您的目标是知道有多少workgroup_name(唯一)有超过5条记录(根据您的代码的想法看起来那样),我认为过滤然后计数会更容易。
首先你将workgroup_name拖到Filter,转到tab条件,选择By field,Records of Number,Count,>,5
这样,您只会过滤包含5条以上记录的workgroup_name。
现在您可以使用简单的COUNTD(workgroup_name)
编辑:澄清之后
好的,您需要添加数据库中已修复的标记。因此,表格计算对您没有帮助。
根据定义,表计算取决于工作表上的字段(以及您决定如何使用这些字段进行分区或寻址),并且仅在表单中调用后计算。这样,每次调用函数时它都会重新计算,并且对于您可能想要进行的某些分析,您需要使表格计算正确的字段不会出现。
同样的事情适用于聚合(计数,总和,......),聚合依赖于您的聚合级别。
在这种情况下,最好在将数据连接到Tableau之前对其进行操作。我没有看到直接的方法(一个可以解决问题的单个计算字段)。可以做的是从Tableau生成数据库(具有每个工作组名称的记录数的聚合),然后将其导出到csv或mdb,然后将其重新连接到Tableau。但是,如果您可以在Tableau之外操作数据库,那么它通常是更好的解决方案