用法
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。