always_join

用量


explore: explore_name {
  always_join: [
    view_name,
    view_name,
    ...
  ]
}
階層
always_join
預設值

接受
方括號,內含以半形逗號分隔的檢視區塊名稱清單

特別規則
您必須先將檢視區塊加入 explore,才能在 always_join 中使用該檢視區塊。

定義

always_join 會強制在 Looker 產生的 SQL 中加入一或多個 JOIN,即使使用者未從該已加入的檢視區塊選取欄位也一樣。如要進行多次聯結,請使用以半形逗號分隔的清單,例如 [view_name_a, view_name_b, etc]

Looker 為查詢產生 SQL 時,會盡量建立最乾淨的 SQL,並只使用使用者選取欄位所需的聯結。使用 always_join 即可強制執行聯結,無論發生什麼情況都一樣。

如果使用 type 參數執行聯結,且聯結不是 LEFT JOIN,則 always_join 可能很有價值。在這種情況下,聯結對於正確限制傳回的資料列可能至關重要。

範例

請務必將 member 一律加入 event,即使使用者未從 member 選擇欄位也一樣。這樣一來,結果就只會顯示成員建立的活動:

explore: event {
  always_join: [member]
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
    type: inner
  }
}

請務必確保 memberpayment 一律會加入 event,即使使用者未從任一檢視畫面選擇欄位也一樣。這樣一來,結果就只會顯示成員已付費的活動:

explore: event {
  always_join: [member, payment]
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
    type: inner
  }
  join: payment {
    sql_on: ${member.payment_id} = ${payment.id} ;;
    type: inner
  }
}

常見挑戰

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

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

explore: event {
  always_join: [member]
}

這裡的 member 檢視區塊尚未加入 event,因此無法在 always_join 中使用。

注意事項

盡量不要在聯結中套用商業邏輯

標準的 Looker 聯結方法是盡可能使用 LEFT JOIN。在先前的範例中,我們避開 LEFT JOIN,以便在聯結本身套用商業邏輯。在其中一個範例中,我們建立的「探索」只包含與會員相關聯的事件:

explore: event {
  always_join: [member]
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
    type: inner
  }
}

在 Looker 中執行這項操作的偏好方式是使用 LEFT JOIN,將事件資料和會員資料簡單地合併在一起:

explore: event {
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
  }
}

接著,您可以建立維度,並設為「是」或「否」,只查看會員活動:

dimension: is_member_event {
  type: yesno
  sql: ${member.id} IS NOT NULL ;;
}

使用者可彈性查看所有事件,或只查看成員事件。您未強制使用者只能透過加入活動查看成員活動。

如果探索包含 always_joinfull_suggestions 的預設值會切換為 yes

如果探索包含 always_join 參數,full_suggestions 的預設值會切換為 yes。這會導致建議查詢使用「探索」邏輯執行,也就是說,系統會套用 always_join 來縮小傳回的建議範圍,將建議清單限制為使用者預期可存取的資料。

如果您手動將 full_suggestions 設為 no,系統就不會執行篩選器建議查詢。