来自(用于联接)

此页面介绍了属于 联接from 参数。

from 也可以用作探索的一部分,如 from(适用于探索)参数文档页面中所述。

用法


explore: view_name {
  join: join_name {
    from: view_name_2
  }
}
层次结构
from
默认值
名称与联接名称匹配的视图

接受
现有视图的名称

定义

from 指定要在联接中使用的 view。如果省略 from,Looker 会假定底层视图名称与联接名称相同。

通常,只有当您希望联接及其字段的名称与底层视图不同时,才使用 from。为了更清楚地了解这一点,不妨考虑一个示例,其中在名为 underlying_view 的视图中创建了一个名为 order_value 的维度:

当需要以多种不同的方式将同一视图联接到探索时,此方法特别有用。

示例

将视图 person 与“探索”order 联接,但将其称为 customer

explore: order {
  join: customer {
    from: person
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

将视图 person 与“探索”order 联接两次,一次作为 customer,另一次作为 representative

explore: order {
  join: customer {
    from: person
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
  join: representative {
    from: person
    sql_on: ${order.representative_id} = ${representative.id} ;;
  }
}

注意事项

from 更改了在探索中引用字段的方式

如前所述,使用 from 会对字段的引用方式产生重要影响。当 view 在许多不同的地方使用时,这可能会带来一些挑战。请参考下面的示例:

explore: order {
  join: customer {
    from: person
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

此处,person 正在加入 order,但它被称为 customer。因此,如果您需要在 order 内引用 customer 中的某个字段,则应使用 ${customer.field_name}。 如果在第二个探索中,您再次将 person 联接到 order,但将其重命名为 customer,则 ${customer.field_name} 引用在第二个探索中将无法正常运行。解决此问题的一般方法是使用 fields 从第二次探索中排除有问题的字段。这如下所示:

explore: the_second_explore {
  fields: [ALL_FIELDS*, -person.problem_field]
  join: person {
    sql_on: ${the_second_explore.some_field} = ${person.some_field} ;;
  }
}

from 最常用于将同一张表多次联接到探索

如果单个表包含不同类型的实体,则可以将视图多次联接到探索中。假设您有一个 order 探索,需要将 person 视图联接到该探索两次,一次用于客户,一次用于客户服务代表。您可以执行类似如下的操作:

explore: order {
  join: customer {
    from: person
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
  join: representative {
    from: person
    sql_on: ${order.representative_id} = ${representative.id} ;;
  }
}

Looker 将根据此 LookML 生成的 SQL 如下所示:

SELECT    ...
FROM      order
LEFT JOIN person AS customer
ON        customer.id = order.customer_id
LEFT JOIN person AS representative
ON        representative.id = order.representative_id