此页面介绍了属于 联接的
fields参数。
fields也可以用作探索的一部分,如fields(适用于探索)参数文档页面中所述。
fields也可以作为集合的一部分使用,如set参数文档页面中所述。
用法
explore: view_name_1 {
join: view_name_2 {
fields: [
field-or-set-specification,
field-or-set-specification,
...
]
}
}
|
层次结构
fields |
默认值
联接视图中的所有字段
接受
包含以英文逗号分隔的字段或集合列表的方括号
特殊规则
|
定义
fields 在联接级别,您可以指定将联接视图中的哪些字段引入探索。如果您不使用 fields,Looker 默认会添加视图中的所有字段。
可以使用字段列表,例如 [field_a, field_b]。
您还可以引用一组字段(由 set 参数创建),例如 [set_a*]。星号表示您引用的是集合名称,而不是字段名称。
示例
仅将 customer 视图中名为 name 的字段添加到 order 探索中:
explore: order {
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
fields: [name]
}
}
将 customer 视图中名为 name、address 和 age 的字段添加到 order 探索中:
explore: order {
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
fields: [name, address, age]
}
}
将 customer 视图中名为 order_fields 的一组字段添加到 order 探索中:
explore: order {
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
fields: [order_fields* ]
}
}
常见挑战
fields 只能引用其自身 join 中的字段
fields 将是引用视图的 join 的子级。fields 中引用的任何维度或度量都必须是相应视图的一部分。例如,假设我们有:
explore: order {
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
fields: [name]
}
}
为了正常运行,customer 视图中必须存在名为 name 的维度或度量。
注意事项
使用 fields: [] 和空列表可排除所有字段
您可以在联接中使用 fields 参数,并在其中指定一个空列表,以从联接视图中排除所有字段,如下所示:
explore: order {
join: customer {
fields: []
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
在此示例中,customer 视图中的任何字段都不会显示在 order 探索中。
移除 join 级别的字段的唯一方法是使用 fields: [] 一次性排除所有这些字段。您无法使用 ALL_FIELDS* 集来排除 join 级的所有字段。
不过,在 explore 级别,您可以使用 ALL_FIELDS* 集来排除单个商品,如本页上的您可以使用 fields 和 explore 排除单个商品部分中所述。
您可以使用 fields 和 explore 排除个别商品
当 fields 嵌套在 join 参数下时,您可以使用 fields: [] 一次性排除所有字段,也可以包含特定字段。但您无法一次排除一个特定字段。例如,如果您有 100 个字段,但只想排除其中一个字段,那么您需要列出您需要的所有 99 个字段。
不过,您可以改为将 fields 嵌套在 explore 参数下,以便利用 ALL_FIELDS* 集,然后排除字段。例如:
explore: order {
fields: [
ALL_FIELDS*,
-customer.unwanted_field_a,
-customer.unwanted_field_b
]
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
请注意,我们如何能够使用 view_name.field_name 语法在探索级别的 fields 参数中引用联接视图 customer 中的字段。
不同类型的 fields 参数在不同时间应用
本页介绍了嵌套在 join 参数下的 fields。还有一个类似的 fields 参数,嵌套在 explore 下。如果同时使用这两者,系统会按特定顺序应用它们,从而影响最终行为:
首先,应用 join 下的所有 fields 参数。这会创建一组可供探索选择的字段。请参考下面的示例:
explore: orders {
join: users {
fields: [name]
sql_on: ${orders.user_id} = ${users.id} ;;
}
}
在这种情况下,可用的字段包括 orders 中的所有字段,以及 users 中的 name。这是 ALL_FIELDS* 集中的一组字段(如排除个别商品部分中所述)。
现在,如果我们向 explore 下添加 fields 参数,则会在该组的基础上添加限制。假设我们执行了以下操作:
explore: orders {
fields: [orders.price, users.address]
join: users {
fields: [name]
sql_on: ${orders.user_id} = ${users.id} ;;
}
}
在此示例中:
- 来自
orders的price将按预期显示,因为它位于我们创建的ALL_FIELDS*集中。 - 来自
users的address不会显示,因为在加入users时未包含address(仅包含name)。 - 来自
users的name也不会显示,因为我们未将其添加到第fields: [orders.price, users.address]行的“探索”中。