cancel_grouping_fields

用法

explore: explore_name {
  cancel_grouping_fields: [
    fully_scoped_field,
    fully_scoped_field,
    ...
  ]
}
层次结构
cancel_grouping_fields
默认值

接受
包含完全限定字段名称的逗号分隔列表的方括号

特殊规则

定义

借助 cancel_grouping_fields,您可以阻止 Looker 向其生成的 SQL 添加 GROUP BY 子句。如果用户包含您指定的任何字段,Looker 将不会进行分组。此功能通常用于提高对非常大的表的查询性能。除非在罕见且特殊的情况下,否则您应该仅包含表中每个行独有的字段,例如主键。

由于 Looker 衡量指标表示 SQL 聚合函数,而这些函数需要 GROUP BY 子句才能正常运行,因此请注意,cancel_grouping_fields 不适用于包含衡量指标的任何查询。此外,当使用 relationship: one_to_manyrelationship: many_to_many 时,cancel_grouping_fields 不起作用。

最后,请注意,您列出的字段必须是完全限定的。换句话说,它们应写为 view_name.field_name,而不是简单地写为 field_name

示例

如果用户在字段选择器中选择订单 ID ,则不对结果进行分组:

explore: order {
  cancel_grouping_fields: [order.id]
}

如果用户在字段选择器中选择订单 ID订单哈希 ,则不对结果进行分组:

explore: order {
  cancel_grouping_fields: [order.id, order.hash]
}

如果用户在字段选择器中选择人员 IDDNA 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 的理想情况。