用量
explore: explore_name {
cancel_grouping_fields: [
fully_scoped_field,
fully_scoped_field,
...
]
}
|
階層
cancel_grouping_fields |
預設值
無
接受
方括號,內含以半形逗號分隔的完整範圍欄位名稱清單
特別規則
|
定義
cancel_grouping_fields 可讓您停止在 Looker 產生的 SQL 中加入 GROUP BY 子句。如果使用者加入您指定的任何欄位,Looker 就不會分組。這項功能通常用於提升超大型資料表的查詢效能。除非是罕見的特殊情況,否則您應只納入資料表中每個資料列獨有的欄位,例如主鍵。
由於 Looker 測量值代表 SQL 匯總函式,需要 GROUP BY 子句才能運作,因此請注意,cancel_grouping_fields 無法用於包含測量值的任何查詢。此外,使用 relationship: one_to_many 或 relationship: many_to_many 時,cancel_grouping_fields 無法運作。
最後,請注意,您列出的欄位必須完全符合範圍。換句話說,這些函式應寫為 view_name.field_name,而非單純寫為 field_name。
範例
如果使用者在欄位挑選器中選擇「訂單 ID」,請勿將結果分組:
explore: order {
cancel_grouping_fields: [order.id]
}
如果使用者在欄位挑選器中選擇「訂單 ID」或「訂單雜湊」,請勿將結果分組:
explore: order {
cancel_grouping_fields: [order.id, order.hash]
}
如果使用者在欄位挑選器中選擇「Person ID」或「DNA ID」,請勿將結果分組:
explore: person {
cancel_grouping_fields: [person.id, dna.id]
join: dna {
sql_on: ${person.dna_id} = ${dna.id} ;;
relationship: one_to_one
}
}
常見挑戰
cancel_grouping_fields 需要完整範圍的欄位名稱
如果您單獨撰寫欄位名稱,Looker 中的大多數參數會根據參數的使用位置,假設檢視區塊名稱。cancel_grouping_fields 並非採用這種方式,因此您必須同時編寫檢視區塊名稱和欄位名稱。
舉例來說,您可能會認為這樣做可行,且 id 會解讀為欄位挑選器中顯示的「訂單 ID」:
explore: order {
cancel_grouping_fields: [id]
}
但事實並非如此,您會收到錯誤訊息。請改為編寫:
explore: order {
cancel_grouping_fields: [order.id]
}
cancel_grouping_fields 只要選擇任何指定欄位就會觸發,不需選擇所有欄位
如果在 cancel_grouping_fields 中指定多個欄位,使用者選取清單中的任何欄位時,系統就會取消分組。使用者不必選取清單中的所有欄位。因此,多欄主鍵不適用於 cancel_grouping_fields。
注意事項
Looker 不需 cancel_grouping_fields 即可正常運作。可改善大型資料表的查詢效能
手動編寫 SQL 時,除非絕對必要,否則大多數人不會加入 GROUP BY 子句。在某些情況下,Looker 也會避免不必要的 GROUP BY 子句。如果查詢中的其中一個維度已定義為所用探索的主要鍵 (使用 primary_key 參數),系統會捨棄 GROUP BY 子句。
不過,在某些情況下,其他維度 (而非主鍵) 仍會定義不重複的資料列。在這些情況下,Looker 可能會產生不必要的 GROUP BY,因為依維度分組是 Looker 運作方式的基本環節。在大多數情況下,這不會造成任何問題。結果會以您預期的方式顯示,而且速度很快。
不過,在某些非常大的資料表中,不必要的 GROUP BY 子句可能會延長查詢時間。這是使用 cancel_grouping_fields 的理想情況。