用量
explore: explore_name {
sql_always_having: ${count} >= 100 ;;
}
|
階層
sql_always_having |
預設值
無
接受
使用指標名稱和/或 SQL 欄位名稱的 SQL HAVING 條件
特別規則
如果您在 sql_always_having 中參照的 SQL 資料欄名稱屬於已聯結的檢視區塊,而非屬於「探索」,請務必使用 always_join 參數,或改為參照欄位名稱。 |
定義
sql_always_having 可讓您套用使用者無法變更的查詢限制。對於使用 sql_always_having 的所有探索查詢,限制條件會插入 Looker 產生的基礎 SQL 的 HAVING 子句中。除了使用者執行的查詢,這些限制也會套用至使用該探索的資訊主頁、排程 Look 和嵌入資訊。
條件可以純 SQL 撰寫,使用資料庫的實際資料表和資料欄名稱。也可以使用 Looker 參照,例如:
${view_name.SQL_TABLE_NAME},參照不同的 Looker 檢視區塊或衍生資料表。請注意,這個參照中的SQL_TABLE_NAME是字串常值,不需要替換成任何內容。${view_name.field_name},其中會參照 Looker 欄位。與直接參照 SQL 資料欄相比,這種方法更為理想,因為 Looker 可以自動加入任何必要的聯結。
使用者必須查看自己建立的查詢所用的底層 SQL,才會看到 sql_always_having 條件。
範例
禁止使用者查看訂單少於 100 筆的群組:
# Using Looker references
explore: order {
sql_always_having: ${count} >= 100 ;;
}
# Using raw SQL
explore: order {
sql_always_having: COUNT(*) >= 100 ;;
}
禁止使用者查看收益低於 $1,000 美元的群組:
explore: customer {
sql_always_having: ${total_revenue} >= 1000 ;;
}
禁止使用者查看少於 100 位顧客的群組:
explore: order {
sql_always_having: ${customer.count} >= 100 ;;
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
常見挑戰
如果您使用原始 SQL,可能需要使用 always_join
如果您在 sql_always_having 中參照的 SQL 資料欄名稱屬於已聯結的檢視區塊,而非屬於「探索」,請務必使用 always_join 參數。請參閱以下範例:
explore: order {
sql_always_having: SUM(customer.visits) >= 100 ;;
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
在此情況下,sql_always_having 是參照已彙整 customer 檢視區塊中的資料欄,而不是 order 探索。由於 sql_always_having 會套用至每個查詢,因此請務必在每個查詢中也加入 customer。
Looker 為查詢產生 SQL 時,會盡量建立最乾淨的 SQL,並只使用使用者選取欄位所需的聯結。在這種情況下,只有在使用者選取客戶欄位時,Looker 才會加入 customer。使用 always_join 即可強制執行聯結,無論發生什麼情況都一樣。
如果您使用 sql_always_having: ${customer.total_visits} >= 100 而不是 sql_always_having: SUM(customer.visits) >= 100,Looker 會聰明地建立 customer 聯結,不需要您使用 always_join。因此,建議您盡可能使用 Looker 欄位參照,而非原始 SQL 參照。
每個探索只能使用一個 sql_always_having
explore 定義中只能有一個 sql_always_having。視需要使用 AND 和 OR,將所有所需行為放入單一 sql_always_having 中。
注意事項
SQL WHERE 子句也有類似的參數
與 sql_always_having 非常類似的參數是 sql_always_where,運作方式相同,但會將條件套用至 WHERE 子句,而非 HAVING 子句。
如要讓使用者變更篩選條件,但不能移除,請考慮使用always_filter
如要強制使用者使用特定篩選器組合,但允許變更預設值,請改用 always_filter。
如要使用無法變更的特定使用者篩選器,請考慮使用 access_filter
如要讓探索具有專屬篩選器,且使用者無法變更,請使用 access_filter。