过滤器表达式是过滤 Looker 查询的高级方式,本页介绍了如何编写这些查询。在 Looker 的“探索”部分,您可以添加过滤条件并选择匹配项(高级)选项,从而使用 Looker。它们在 LookML 中也用于接受 filter
参数的元素。
在 LookML 中使用过滤条件表达式时,您应将表达式放在引号中(如需正确使用,请参阅
filters
文档页面)。这对于NULL
等逻辑值来说尤为重要。在 Looker 的“探索”部分使用过滤条件表达式时,您无需将表达式括在引号中。
授予访问权限不支持过滤器表达式。如需了解详情,请参阅
access_grant
文档页面。
字符串
字符串过滤条件中的匹配项取决于模型文件中的
case_sensitive
设置,以及您的方言是否支持区分大小写。例如,如果您的模型中启用了case_sensitive
,表达式“FOO
”不会与“食品”一词匹配。如果case_sensitive
未启用,或者您的方言不支持区分大小写,则表达式FOO
将与单词“food”匹配。
示例 | 说明 |
---|---|
FOO |
等于“FOO”,确切地说是“FOO” |
FOO,BAR |
等于“FOO”或“BAR” |
%FOO% |
包含“FOO”,与“水牛”和“快餐”都匹配 |
FOO% |
以“FOO”开头,与“Foolish”和“Foote”匹配,但与“Buffoon”或“快餐”不匹配 |
%FOO |
结尾为“FOO”,与“Buffoo”和“Fast foo”匹配,但不与“buffoon”或“快餐”匹配 |
F%OD |
以“F”开头,以“OD”结尾,与“快餐”匹配 |
EMPTY |
字符串为空(包含零字符)或 null(无值) |
NULL |
值为 null(当作为 LookML 过滤条件表达式的一部分使用时,请将 NULL 括在英文引号中,如 filters 文档页面中所示) |
-FOO |
不等于“FOO”(除“FOO”以外的任何值),匹配“比萨”、“垃圾”和“有趣”,但不匹配“foo” |
-FOO,-BAR |
不等于“FOO”或“BAR”,匹配除“FOO”和“BAR”以外的任何值 |
-%FOO% |
不包含“FOO”,与“水牛”或“快餐”都不匹配 |
-FOO% |
不以“FOO”开头,与“Foolish”或“food”不匹配 |
-%FOO |
结尾不是“FOO”,与“Buffoo”或“Fast foo”不匹配 |
-EMPTY |
字符串不为空(至少包含一个字符) |
-NULL |
列值不为 null(当将其用作 LookML 过滤条件表达式的一部分时,请将 -NULL 括在英文引号中,如 filters 文档页面中所示) |
FOO%,BAR |
以“FOO”或“BAR”完全匹配,与“food”完全匹配,但与“bar”不匹配,但与“barfood”不匹配 |
FOO%,-FOOD |
以“FOO”开头,但不是“FOOD” |
_UF |
包含任意字符,后接“UF”,匹配“Buffoon” |
在字符串过滤条件中包含特殊字符
在字符串过滤条件中添加特殊字符时,请注意以下规则:
- 如需添加
"
、%
或_
,请添加前缀转义字符^
。例如:^"
、^%
和^_
- 如需添加前导
-
,请将其转义为^-
。仅当-
是前导字符时,才需要这么做;如果-
位于字符串内,则无需转义。 - 如需添加
^
,请将其转义为^^
。 - 如需在常规界面字符串过滤条件中添加英文逗号,请在英文逗号前面添加反斜杠字符作为前缀:
\`. For example:
Santa Cruz\, CA`。 - 要在过滤条件中添加匹配(高级)选项的英文逗号,请在英文逗号前面添加转义字符
^
。例如:Santa Cruz^, CA
。 - 如需在 LookML 的过滤条件表达式中添加英文逗号,请在前缀中添加转义字符
^
。例如:
field: filtered_count {
type: count
filters: [city: "Santa Cruz^, CA"]
}
在某些情况下,您还可以在对 Looker 内容使用自定义细目时,在字符串过滤条件中转义或包含特殊字符。如需了解详情,请参阅
Link
参数页面上的链接到 Looker 内容时的注意事项部分。
日期和时间
Looker 日期过滤允许使用英语短语,而不是 SQL 日期函数。
日期和时间过滤器的基本结构
对于以下示例:
{n}
是一个整数。{interval}
是时间增量,例如小时、天、周或月。使用的措辞决定了
{interval}
是包含不完整的时间段,还是仅包含完整的时间段。例如,表达式3 days
包括当前和部分日期,以及前两天。表达式3 days ago for 3 days
包括前三个完整的日期,不包括当前的不完整日期。如需了解详情,请参阅相对日期部分。{time}
可以采用 YYYY-MM-DD HH:MM:SS 或 YYYY/MM/DD HH:MM:SS 格式指定时间,也可以将日期指定为 YYYY-MM-DD 或 YYYY/MM/DD 格式。使用 YYYY-MM-DD 格式时,请务必同时添加月份和日期的数字,例如 2016-01。将月或日期截断为一位数位会解释为偏移,而不是日期。例如,2016-1 会被解释为 2016 减去 1 年或 2015。
以下是日期过滤器的所有可能组合:
组合 | 示例 | 备注 |
---|---|---|
this {interval} |
this month |
您可以使用 this week 、this month 、this quarter 或 this year 。请注意,this day 不受支持。如果要获取当天的数据,您可以使用 today 。 |
{n} {interval} |
3 days |
|
{n} {interval} ago |
3 days ago |
|
{n} {interval} ago for {n} {interval} |
3 months ago for 2 days |
|
before {n} {interval} ago |
before 3 days ago |
|
before {time} |
before 2018-01-01 12:00:00 |
before 不包含您指定的时间。表达式 before 2018-01-01 将返回 2018-01-01 之前的所有日期的数据,但不会返回 2018-01-01 之前的数据。 |
after {time} |
after 2018-10-05 |
after 包含您指定的时间。因此,表达式 after 2018-10-05 将返回 2018-10-05 以及 2018-10-05 之后的所有日期的数据。 |
{time} to {time} |
2018-05-18 12:00:00 to 2018-05-18 14:00:00 |
初始时间值包含边界值。后一个时间值则不是。因此,表达式 2018-05-18 12:00:00 to 2018-05-18 14:00:00 将返回时间“2018-05-18 12:00:00”至“2018-05-18 13:59:59”的数据。 |
this {interval} to {interval} |
this year to second |
每个间隔的起始时间都会使用。例如,表达式 this year to second 会返回运行查询的年份开始时的数据,到运行查询的第二年开始时的数据。this week to day 返回从运行查询的那一周开始到当天开始运行的数据。 |
{time} for {n} {interval} |
2018-01-01 12:00:00 for 3 days |
|
today |
today |
|
yesterday |
yesterday |
|
tomorrow |
tomorrow |
|
{day of week} |
Monday |
使用维度组日期字段指定星期几,返回与指定周几相匹配的最近日期。例如,表达式 Dimension Group Date matches (advanced) Monday 会返回最近的星期一。在这种情况下,您还可以将 {day of week} 与 before 和 after 关键字一起使用。例如,表达式 Dimension Group Date matches (advanced) after Monday 会返回最近的星期一以及最近星期一之后的所有内容。表达式 Dimension Group Date matches (advanced) before Monday 会在最近的星期一之前每天返回,但不会返回最近的星期一。使用维度组周日期字段指定一周中的某一天,系统就会返回与周几匹配的每天。因此,表达式 Dimension Group Day of Week matches (advanced) Monday 会在每个星期一返回。 |
next {week, month, quarter, fiscal quarter, year, fiscal year} |
next week |
next 关键字非常独特,因为它需要采用上面列出的某种间隔,并且无法与其他间隔一起使用。 |
{n} {interval} from now |
3 days from now |
|
{n} {interval} from now for {n} {interval} |
3 days from now for 2 weeks |
您还可以组合使用日期过滤条件:
- 获取 OR 逻辑:在同一过滤条件中输入多个条件,以英文逗号分隔。例如,
today, 7 days ago
表示“今天或 7 天前”。 - 获取 AND 逻辑:在多项日期或时间过滤条件中逐个输入条件。例如,您可以将
after 2014-01-01
放入创建日期过滤器,然后将before 2 days ago
放入创建时间过滤器。这意味着“2014 年 1 月 1 日及之后以及 2 天前”。
绝对日期
绝对日期过滤条件使用特定日期值来生成查询结果。它们在特定日期范围创建查询时非常有用。
示例 | 说明 |
---|---|
2018/05/29 |
2018 年 5 月 29 日某个时候 |
2018/05/10 for 3 days |
2018/05/10 00:00:00 至 2018/05/12 23:59:59 |
after 2018/05/10 |
2018/05/10 00:00:00 及之后 |
before 2018/05/10 |
2018/05/10 00:00:00 之前 |
2018/05 |
在 2018/05 整个月内 |
2018/05 for 2 months |
在 2018 年 5 月和 2018 年 6 月的整个月内 |
2018/05/10 05:00 for 5 hours |
2018 年 5 月 10 日 05:00:00 至 2018 年 5 月 10 日 9:59:59 |
2018/05/10 for 5 months |
2018 年 5 月 10 日 00:00:00 至 2018 年 10 月 9 日 23:59:59 |
2018 |
2018 年全年(2018/01/01 00:00:00 至 2018/12/31 23:59:59) |
FY2018 |
从 2018 年开始的整个财年(如果 Looker 开发者指明您的财年始于 4 月,则对应 2018/04/01 00:00 至 2019/03/31 23:59) |
FY2018-Q1 |
2018 财年的第一季度(如果 Looker 开发者指定了您的财年从 4 月开始,则此日期为 2018/04/01 00:00:00 至 2018/06/30 23:59:59) |
相对日期
使用相对日期过滤条件,您可以创建使用与当前日期相对应的滚动日期值的查询。这些查询在创建每次运行查询时都会更新的查询非常有用。
在下面的所有示例中,假设今天是 2018/05/18 18:30:02。在 Looker 中,除非您使用 week_start_day
更改该设置,否则每周从周一开始。
数秒
示例 | 说明 |
---|---|
1 second |
当前秒 (2018/05/18 18:30:02) |
60 seconds |
60 秒前 60 秒(2018/05/18 18:29:02 至 2018/05/18 18:30:01) |
60 seconds ago for 1 second |
60 秒前 1 秒 (2018/05/18 18:29:02) |
分钟数
示例 | 说明 |
---|---|
1 minute |
当前分钟(2018 年 5 月 18 日 18:30:00 至 18:30:59) |
60 minutes |
60 分钟之前为 60 分钟(2018/05/18 17:31:00 至 2018/05/18 18:30:59) |
60 minutes ago for 1 minute |
60 分钟前,时长为 1 分钟(2018 年 5 月 18 日 17:30:00 至 2018 年 5 月 18 日 17:30:59) |
营业时间
示例 | 说明 |
---|---|
1 hour |
当前小时(2018 年 5 月 18 日 18:00 至 2018 年 5 月 18 日 18:59) |
24 hours |
一天 24 小时前的 24 小时(2018/05/17 19:00 至 2018/05/18 18:59) |
24 hours ago for 1 hour |
一天前的 24 小时持续 1 小时(2018 年 5 月 17 日 18:00 至 2018 年 5 月 17 日 18:59) |
天
示例 | 说明 |
---|---|
today |
当天(2018 年 5 月 18 日 00:00 至 2018/05/18 23:59) |
2 days |
所有昨天和今天(2018/05/17 00:00 至 2018/05/18 23:59) |
1 day ago |
仅昨天(2018/05/17 00:00 至 2018/05/17 23:59) |
7 days ago for 7 days |
过去完整 7 天(2018/05/11 00:00 至 2018/05/17 23:59) |
today for 7 days |
从午夜开始,未来 7 天(2018/05/18 00:00 至 2018/05/24 23:59)当天 |
last 3 days |
2 天前至当天结束(2018/05/16 00:00 至 2018/05/18 23:59) |
7 days from now |
7 天后(2018/05/25 00:00 至 2018/05/25 23:59) |
周
示例 | 说明 |
---|---|
1 week |
本周顶部(2018 年 5 月 14 日 00:00 至 2018/05/20 23:59) |
this week |
本周顶部(2018 年 5 月 14 日 00:00 至 2018/05/20 23:59) |
before this week |
本周之前的任何时间(2018/05/14 00:00 之前) |
after this week |
本周结束后(2018 年 5 月 14 日 00:00 及之后)任意时间 |
next week |
下一周的周一(2018/05/21 00:00 至 2018/05/27 23:59) |
2 weeks |
一周前的周一(2018/05/07 00:00 至 2018/05/20 23:59) |
last week |
“1 周前”的同义词 |
1 week ago |
1 周前(周一至 1 周) |
月
示例 | 说明 |
---|---|
1 month |
当月(2018 年 5 月 1 日 00:00 至 2018/05/31 23:59) |
this month |
“0 个月前”的同义词(2018/05/01 00:00 至 2018/05/31 23:59) |
2 months |
过去两个月(2018/04/01 00:00 至 2018/05/31 23:59) |
last month |
2018/04 年全年 |
2 months ago |
2018/03 年全年 |
before 2 months ago |
2018 年 3 月 1 日之前的所有时间 |
next month |
2018/06 年全年 |
2 months from now |
2018/07 年全年 |
6 months from now for 3 months |
2018 年 11 月 - 2019 年 1 月 |
季度
示例 | 说明 |
---|---|
1 quarter |
本季度(2018/04/01 00:00 至 2018/06/30 23:59) |
this quarter |
“0 个季度前”的同义词(2018/04/01 00:00 至 2018/06/30 23:59) |
2 quarters |
过去两个季度(2018/01/01 00:00 至 2018/06/30 23:59) |
last quarter |
第 1 季度(2018/01/01 00:00 至 2018/03/31 23:59) |
2 quarters ago |
去年第 4 季度(2017/010/01 00:00 至 2017/12/31 23:59) |
before 2 quarters ago |
去年第 4 季度之前的所有时间 |
next quarter |
之后的所有季度(2018/07/01 00:00 至 2018/09/30 23:59) |
2018-07-01 for 1 quarter |
第 3 季度(2018 年 7 月 1 日 00:00 至 2018 年 9 月 30 日 23:59) |
2018-Q4 |
第 4 季度(2018 年 10 月 1 日 00:00 至 2018 年 12 月 31 日 23:59) |
如果您的 Looker 开发者已使用财年指定,则您可以在这些表达式中输入
fiscal
,以使用财政季度(而不是日历季度)。例如,您可以使用last fiscal quarter
。
年
示例 | 说明 |
---|---|
1 year |
全年(2018 年 1 月 1 日 00:00 至 2018 年 12 月 31 日 23:59) |
this year |
全年(2018 年 1 月 1 日 00:00 至 2018 年 12 月 31 日 23:59) |
next year |
全年(2019 年 1 月 1 日 00:00 至 2019 年 12 月 31 日 23:59) |
2 years |
过去两年(2017/01/01 00:00 至 2018/12/31 23:59) |
last year |
2017 年全年 |
2 years ago |
2016 年全年 |
before 2 years ago |
2016/01/01 之前的所有时间(不包括 2016/01/01 到 2016/05/18 之间的任何日期) |
如果您的 Looker 开发者指定了财政年份,那么您可以在这些表达式中输入
fiscal
,以使用财政年份而不是日历季度。例如,您可以使用last fiscal year
。
布尔值
如需在 Looker 中过滤 true 或 false 类型值,您必须知道自己正在互动的是哪种类型的 true 或 false 值。
示例 | 说明 |
---|---|
yes 或 Yes |
字段评估结果为 true Looker 开发者:对于 type: yesno 维度,请使用小写,对于 filters 参数(例如在测量中使用或在 always_filter 中使用的参数),使用大写 |
no 或 No |
字段评估结果为 false Looker 开发者:对于 type: yesno 维度,请使用小写,对于 filters 参数(例如在测量中使用或在 always_filter 中使用的参数),使用大写 |
TRUE |
字段包含 true(适用于包含布尔值数据库值的字段) |
FALSE |
字段包含 false(适用于包含布尔值数据库值的字段) |
数字
数字过滤条件支持自然语言表达式(例如 3 to 10
)和关系运算符(例如 >20
)。Looker 支持使用 OR
运算符来表达多个过滤条件范围(例如 3 to 10 OR 30 to 100
)。AND
运算符可用于使用关系运算符(例如 >=3 AND <=10
)来表示数字范围。针对数字的过滤器还可以使用代数间隔表示法来过滤数字字段。
使用
NOT
的数字过滤器表达式的语法可能不够直观。以下示例展示了如何使用该功能。
示例 | 说明 |
---|---|
5 |
正好 5 |
NOT 5 |
是任意值,但恰好 5 |
1, 3, 5, 7 |
是 1、3、5 或 7 中的一个值 |
NOT 66, 99, 4 |
不是 66、99 或 4 这个值 |
1, NOT 2 |
不是 1 或 2 |
1, NOT 2, >100 |
既不是 1,也不是 2,也不大于 100 |
5, NOT 6, NOT 7 |
为 5,不是 6 或 7 |
5.5 to 10 |
5.5 或更高,但也不超过 10 |
NOT 3 to 80.44 |
小于 3 或大于 80.44 |
1 to |
大于或等于 1 |
to 10 |
不超过 10 |
>10 AND <=20 OR 90 |
大于 10 且小于或等于 20,或者正好 90 |
>=50 AND <=100 OR >=500 AND <=1000 |
50 至 100(含)或 500 至 1000(含)之间 |
NULL |
不包含任何数据(当用于 LookML 过滤条件表达式时,请将 NULL 括在英文引号中,如 filters 文档页面中所示) |
NOT NULL |
其中包含一些数据(当将其用作 LookML 过滤条件表达式的一部分时,请将 NOT NULL 括在英文引号中,如 filters 文档页面中所示) |
(1, 7) |
会被解释为 1 < x < 7(不包括端点)。虽然此表示法类似于一个有序对,但在此上下文中,它指工作的时间间隔。 |
[5, 90] |
会被解释为 5 <= x <= 90(其中含有端点) |
(12, 20] |
解释为 12 < x <= 20,其中不包含 12,但包含 20 |
[12, 20) |
解释为 12 <= x < 20,其中 12 包含在内,但不包括 20 |
(500, inf) |
解释为 x > 500,其中 500 不包括在内,无穷大始终表示为“open”(不包括)。inf 可以省略,上面可以写为 (500,) |
(-inf, 10] |
被解释为 x <= 10,其中 10 包括在内,无穷大始终表示为“开放”(不包括)。inf 可以省略,上述可以写为 (,10] |
[0,9],[20,29] |
0 至 9(含 0 和 9)或 20 至 29(含)之间的数字 |
[0,10],20 |
0 到 10(含)或 20 |
NOT (3,12) |
解读为 x < 3 和 x > 12 |
NOT 10,[1,5) |
除 10 以外的所有数字,以及除 1 到 5 以外的所有数字 |
位置
位置过滤器表达式基于纬度和经度,但可以接受某些自然语言来定义在其中限制搜索的框和圆形。
示例 | 说明 |
---|---|
36.97, -122.03 |
位置正好为纬度 36.97, 经度 122.03 |
40 miles from 36.97, -122.03 |
纬度为 36.97 度,经度 -122.03 为 40 英里内 |
inside box from 72.33, -173.14 to 14.39, -61.70 |
所在位置的西北角位于纬度 72.33、经度 -173.14、东南角位于纬度 14.39、经度 -61.70 |
NOT NULL (works the same as -NULL) |
location 同时包含非 null 纬度和非 null 经度(当作为 LookML 过滤条件表达式的一部分使用时,请将 NOT NULL 括在英文引号中,如 filters 文档页面中所示) |
-NULL (works the same as NOT NULL) |
location 同时包含非 null 纬度和非 null 经度(当作为 LookML 过滤条件表达式的一部分使用时,请将 -NULL 括在英文引号中,如 filters 文档页面中所示) |
NULL |
location 的纬度和/或经度为 null(当两者用作 LookML 过滤条件表达式的一部分时,请将 NULL 括在引号中,如 filters 文档页面中所示) |
支持的度量单位
如需在特定位置周围的区域进行过滤,您可以使用以下单位:
- 米
- 脚
- 公里
- 英里
不支持单数度量单位。例如,对于一英里半径的过滤,应写入 within 1 miles of 36.97, -122.03
。
用户属性值
如需在过滤条件表达式中使用用户属性的值,请使用 _user_attributes
液体变量引用用户属性:
{{ _user_attributes['name_of_attribute'] }}
例如,假设您需要对 salesforce_username
用户属性的值应用 sf_
前缀,因为该值会存储在数据库中。如需为用户属性值添加前缀,您可以在相关字段中添加“匹配(高级)”过滤条件,并在过滤条件表达式中使用 _user_attributes
液体变量,如下所示:
sf_{{_user_attributes['salesforce_username']}}
您可以使用相同的模式将用户属性插入 LookML 信息中心过滤条件和信息中心元素过滤条件。