用量
sql_always_where: ${created_date} >= '2017-01-01' ;
}
层次结构
sql_always_where |
默认值
无接受
使用维度名称和/或 SQL 列名称的 SQL WHERE 条件特殊规则
如果您在 sql_always_where 中引用某个属于联接视图的 SQL 列名称,而不是作为“探索”的一部分,则务必使用 always_join 参数 - 或者引用字段名称 |
定义
sql_always_where
允许您应用用户无法更改的查询限制。对于使用 sql_always_where
的探索中的所有查询,此限制将插入到 Looker 生成的底层 SQL 的 WHERE
子句中。除了人工用户执行的查询之外,此限制将适用于信息中心、预定的样式以及依赖于该探索的嵌入式信息。
可以使用数据库的实际表和列名称以纯 SQL 写入条件。它还可以使用如下所示的 Looker 引用:
${view_name.SQL_TABLE_NAME}
:引用其他 Looker 视图或派生表。请注意,此参考中的SQL_TABLE_NAME
是一个字面量字符串;您无需将其替换为任何内容。${view_name.field_name}
,引用 Looker 字段。与直接引用 SQL 列相比,最好使用此方法,因为 Looker 可以自动添加任何必要的联接。
sql_always_where
条件不会向用户显示,除非他们查看自己创建的任何查询的底层 SQL。
示例
禁止用户在 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' ;;
}
禁止用户查看 Periaptly Corporation 的客户信息:
explore: customer {
sql_always_where: ${name} <> 'Periaptly Corporation' ;;
}
禁止用户查看 Periaptly Corporation 的订单:
explore: order {
sql_always_where: ${customer.name} <> 'Periaptly 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 <> 'Periaptly Corporation' ;;
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
在本例中,sql_always_where
引用了合并后的 customer
视图中的列,而不是 order
探索。由于 sql_always_where
将应用于每个查询,因此必须在每个查询中联接 customer
。
在为查询生成 SQL 时,Looker 会尝试尽可能创建最简洁的 SQL,并且只会使用用户选择的字段所必需的联接。在这种情况下,只有用户选择客户字段后,Looker 才会加入 customer
。无论使用何种方式,您都可以使用 always_join
强制联接。
如果使用 sql_always_where: ${customer.name} <> 'Periaptly Corporation'
代替 sql_always_where: customer.name <> 'Periaptly 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
。