用量
cancel_grouping_field: [
fully_ scope_field,
full_scope_field,
...
]
}
层次结构
cancel_grouping_fields |
默认值
无接受
包含完全限定字段名称的逗号分隔列表的方括号特殊规则
|
定义
cancel_grouping_fields
可让您阻止 Looker 将 GROUP BY
子句添加到其生成的 SQL 中。如果您指定的任何字段被用户包括在内,Looker 将不会分组。此功能通常用于提升超大型表的查询性能。除了极少数和独特的情况之外,您应只添加表中每行的唯一字段,例如主键。
由于 Looker 衡量代表 SQL 聚合函数,因此需要 GROUP BY
子句才能正常运行,因此请注意,任何包含测量的报表都不适用于 cancel_grouping_fields
。此外,使用 relationship: one_to_many
或 relationship: many_to_many
时,cancel_grouping_fields
不起作用。
最后请注意,您列出的字段必须是完全限定的。换句话说,它们应写为 view_name.field_name
,而不只是 field_name
。
示例
如果用户在字段选择器中选择 Order ID,则不对结果进行分组:
explore: order {
cancel_grouping_fields: [order.id]
}
如果用户在字段选择器中选择 Order ID 或 Order Hash,请勿对结果进行分组:
explore: order {
cancel_grouping_fields: [order.id, order.hash]
}
如果用户在字段选择器中选择 Person ID 或 DNA ID,请勿对结果进行分组:
explore: person {
cancel_grouping_fields: [person.id, dna.id]
join: dna {
sql_on: ${person.dna_id} = ${dna.id} ;;
relationship: one_to_one
}
}
常见挑战
cancel_grouping_fields
需要范围限定的字段名称
如果您自行编写字段名称,Looker 中的大多数参数都会根据参数的使用位置假定为视图名称。cancel_grouping_fields
不支持这种方式,您需要同时编写视图名称和字段名称。
例如,您可能会认为此操作有效,并且 id
将被解释为字段选择器中显示的订单 ID:
explore: order {
cancel_grouping_fields: [id]
}
不过,情况并非如此,您会收到错误消息。您必须编写如下代码:
explore: order {
cancel_grouping_fields: [order.id]
}
选择任意指定字段即会触发 cancel_grouping_fields
,因此不需要选择所有字段
如果您在 cancel_grouping_fields
中指定了多个字段,则当用户选择列表中的任意字段时,系统会取消分组。用户无需选择列表中的所有字段。因此,多列主键不支持 cancel_grouping_fields
。
注意事项
Looker 无需 cancel_grouping_fields
即可正常运行。用于改进大型表的查询
在手动编写 SQL 时,除非绝对有必要,否则大多数人都不会包含 GROUP BY
子句。在某些情况下,Looker 还会避免不必要的 GROUP BY
子句。如果查询中有一个维度被定义为您使用的探索的主键(使用 primary_key
参数),GROUP BY
子句将被丢弃。
不过,在某些情况下,另一个维度(非主键)仍然会定义唯一行。在这些情况下,Looker 可能会生成不必要的 GROUP BY
,因为按维度分组是 Looker 运作方式的基本组成部分。在大多数情况下,这不会造成任何问题。结果会以您期望的方式显示,并且速度很快。
但是,在某些非常大的表中,不必要的 GROUP BY
子句可能会延长查询时间。这是使用 cancel_grouping_fields
的理想情况。