from(用于联接)

本页引用了联接中的 from 参数。

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

用量

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

接受
现有视图的名称

定义

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

通常,仅当您希望联接及其字段与基础视图的名称不同时,才使用 from。为便于理解,我们假设在名为 underlying_view 的视图中创建了名为 order_value 的维度:

  • 此字段通常在探索界面中显示为 UNDERLYING VIEW Order Value,并将在 LookML 中使用 ${underlying_view.order_value} 引用。
  • 在上述使用示例中,该字段将显示为“NEW ALIAS NAME Order Value”,并被引用为“${new_alias_name.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