用量
explore: explore_name {
sql_always_where: ${created_date} >= '2017-01-01' ;;
}
|
階層
sql_always_where |
預設值
無
接受
使用維度名稱和/或 SQL 資料欄名稱的 SQL WHERE 條件
特別規則
如果您在 sql_always_where 中參照的 SQL 資料欄名稱屬於已聯結的檢視區塊,而非 Explore 的一部分,請務必使用 always_join 參數,或改為參照欄位名稱。 |
定義
sql_always_where 可讓您套用使用者無法變更的查詢限制。對於使用 sql_always_where 的所有探索查詢,限制條件會插入 Looker 產生的基礎 SQL 的 WHERE 子句中。除了使用者執行的查詢,這些限制也會套用至使用該探索的資訊主頁、排程 Look 和嵌入資訊。
條件可以純 SQL 撰寫,使用資料庫的實際資料表和資料欄名稱。也可以使用 Looker 參照,例如:
${view_name.SQL_TABLE_NAME},參照不同的 Looker 檢視區塊或衍生資料表。請注意,這個參照中的SQL_TABLE_NAME是字串常值,不需要替換成任何內容。${view_name.field_name},其中會參照 Looker 欄位。與直接參照 SQL 資料欄相比,這種方法更為理想,因為 Looker 可以自動加入任何必要的聯結。
使用者必須查看自己建立的查詢所用的底層 SQL,才會看到 sql_always_where 條件。
範例
禁止使用者查看 2012 年 1 月 1 日前的訂單:
# Using Looker references
explore: order {
sql_always_where: ${created_date} >= '2012-01-01' ;;
}
# Using raw SQL
explore: order {
sql_always_where: DATE(created_time) >= '2012-01-01' ;;
}
禁止使用者查看 Altostrat Corporation 的客戶資訊:
explore: customer {
sql_always_where: ${name} <> 'Altostrat Corporation' ;;
}
禁止使用者查看 Altostrat Corporation 的訂單:
explore: order {
sql_always_where: ${customer.name} <> 'Altostrat Corporation' ;;
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
常見挑戰
如果您使用原始 SQL,可能需要使用 always_join
如果您在 sql_always_where 中參照的 SQL 欄名屬於已聯結的檢視區塊,請務必使用 always_join 參數,而非「探索」。請參閱以下範例:
explore: order {
sql_always_where: customer.name <> 'Altostrat Corporation' ;;
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
在此情況下,sql_always_where 是參照已彙整 customer 檢視區塊中的資料欄,而不是 order 探索。由於 sql_always_where 會套用至每個查詢,因此請務必在每個查詢中也加入 customer。
Looker 為查詢產生 SQL 時,會盡量建立最乾淨的 SQL,並只使用使用者選取欄位所需的聯結。在這種情況下,只有在使用者選取客戶欄位時,Looker 才會加入 customer。使用 always_join 即可強制執行聯結,無論發生什麼情況都一樣。
如果您使用 sql_always_where: ${customer.name} <> 'Altostrat Corporation' 而不是 sql_always_where: customer.name <> 'Altostrat Corporation',Looker 會聰明地建立 customer 聯結,不需要您使用 always_join。因此,建議您盡可能使用 Looker 欄位參照,而非原始 SQL 參照。
每個探索只能使用一個 sql_always_where
explore 定義中只能有一個 sql_always_where。視需要使用 AND 和 OR,將所有所需行為放入單一 sql_always_where 中。
注意事項
SQL HAVING 子句也有類似的參數
與 sql_always_where 非常類似的參數是 sql_always_having,運作方式相同,但會將條件套用至 HAVING 子句,而非 WHERE 子句。
如要讓使用者變更篩選條件,但不能移除,請考慮使用always_filter
如要強制使用者使用特定篩選器組合,但允許變更預設值,請改用 always_filter。
如要使用無法變更的特定使用者篩選器,請考慮使用 access_filter
如要讓探索具有專屬篩選器,且使用者無法變更,請使用 access_filter。
如果探索包含 sql_always_where,full_suggestions 的預設值會切換為 yes
如果探索包含 sql_always_where 參數,full_suggestions 的預設值會切換為 yes。這會導致建議查詢使用「探索」邏輯執行,也就是說,系統會套用 sql_always_where 來縮小傳回的建議範圍,將建議清單限制為使用者預期可存取的資料。
如果您手動將 full_suggestions 設為 no,系統就不會執行篩選器建議查詢。