required_joins

用量

explore: view_name_1 {
  join: view_name_2 { ... }
  join: view_name_3 {
    required_joins: [view_name_2, ...]
  }
}
階層
required_joins
預設值

接受
方括號,內含這個「探索」的聯結清單 (以半形逗號分隔)

特別規則
檢視區塊必須先加入探索,才能在 required_joins 中參照

定義

required_joins 會強制在 Looker 產生的 SQL 中加入一或多個 joins,即使使用者未從該已聯結的檢視區塊選取欄位也一樣。只要使用者從您指定的相關檢視畫面中選取欄位,就會觸發這項行為。如要進行多次聯結,請使用以半形逗號分隔的清單,例如 [join_name_a, join_name_b, ...]

Looker 為查詢產生 SQL 時,會盡量建立最乾淨的 SQL,並只使用使用者選取欄位所需的聯結。在本頁頂端的語法圖表示例中:

  • 如果使用者只從 view_name_2 選擇欄位,則只有該欄位會彙整至探索。
  • 如果使用者從 view_name_3 選取欄位,該彙整的 required_joins 參數會導致 view_name_2 彙整至探索。

required_joins 的主要用途包括:

使用 sql_on 的舊語法樣式

搭配 ${view_name.looker_dimension_name} 語法使用時,sql_on 不需要 required_joins。不過,部分舊版模型仍使用 view_name.native_column_name 語法。例如:

explore: order_items {
  join: order {
    sql_on: order_items.order_id = order.id ;;
  }
  join: customer {
    sql_on: order.customer_id = customer.id ;;
    required_joins: [order]
  }
}

在本例中,每當使用者從 customer 選取欄位時,也必須加入 order 檢視區塊,才能維持正確的聯結關係。如果您忘記要求這項查詢,使用者剛好從所有必要檢視區塊選擇欄位,查詢可能仍可運作。不過,其他查詢可能會因錯誤的聯結而產生錯誤資料,但不會顯示任何訊息。

建議您改用 ${view_name.looker_dimension_name} 語法修改模型,而非使用 required_joins

需要或想要撰寫原始 SQL

在某些情況下,您無法或不想搭配 sql_on 使用 ${view_name.looker_dimension_name} 語法。通常是因為您想使用資料庫中的原始值,並避免 ${view_name.looker_dimension_name} 語法造成的任何轉換或其他操作。用法範例如下:

explore: order {
  join: user {
    sql_on: ${order.user_id} = ${user.id} ;;
  }
  join: pre_sign_up_events {
    from: event
    sql_on:
      ${event.user_id} = ${user.id} AND
      event.date BETWEEN user.creation_date AND user.sign_up_date ;;
    required_joins: [user]
    relationship: one_to_many
  }
}

在本範例中,pre_sign_up_events 聯結會依據 user 中的日期。因此,請務必使用 required_joins 加入 user

請考慮使用 date_raw 型別,避免使用 required_joins,以免使用時間或日期欄位進行轉換。required_joins

常見挑戰

檢視區塊必須先加入「探索」,才能在 required_joins 中參照

如要將檢視區塊放入 required_joins,請務必將其加入使用 required_joinsexplore。舉例來說,以下程式碼無法運作:

explore: order_items {
  join: customer {
    sql_on: order.customer_id = customer.id ;;
    required_joins: [order]
  }
}

order」尚未加入「order_items」,因此無法在「required_joins」中使用。