用量
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
子句中。除了人工用户执行的查询之外,此限制将适用于信息中心、预定的样式以及依赖于该探索的嵌入式信息。
可以使用数据库的实际表和列名称以纯 SQL 写入条件。它还可以使用如下所示的 Looker 引用:
${view_name.SQL_TABLE_NAME}
:引用其他 Looker 视图或派生表。请注意,此参考中的SQL_TABLE_NAME
是一个字面量字符串;您无需将其替换为任何内容。${view_name.field_name}
,引用 Looker 字段。与直接引用 SQL 列相比,最好使用此方法,因为 Looker 可以自动添加任何必要的联接。
sql_always_having
条件不会向用户显示,除非他们查看自己创建的任何查询的底层 SQL。
示例
禁止用户查看订单数少于 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
。
在为查询生成 SQL 时,Looker 会尝试尽可能创建最简洁的 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
。