过滤器表达式是一种过滤 Looker 查询的高级方式,本页将介绍如何编写表达式。在 Looker 的“探索”部分中,您可以通过添加过滤器并选择匹配(高级)选项来使用这些过滤器。这些参数还用于 LookML 中接受 filter
参数的元素。
在 LookML 中使用过滤条件表达式时,您应将该表达式用引号引起来(如需正确使用,请参阅
filters
文档页面)。这对于NULL
等逻辑值尤为重要。在 Looker 的“探索”部分使用过滤条件表达式时,您无需将表达式用引号括起来。
授予访问权限时不支持过滤条件表达式。如需了解详情,请参阅
access_grant
文档页面。
字符串
字符串过滤条件中的匹配内容取决于模型文件中的
case_sensitive
设置,以及您的方言是否支持区分大小写。例如,如果您的模型启用了“case_sensitive
”,表达式“FOO
”不会与“美食”一词匹配。如果case_sensitive
未启用,或者您的方言不支持区分大小写,则表达式FOO
将与“food”一词匹配。
示例 | 说明 |
---|---|
FOO |
等于“FOO” |
FOO,BAR |
等于“FOO”或“BAR” |
%FOO% |
包含“FOO”,与“水牛”和“快餐”匹配 |
FOO% |
以“FOO”开头,与“foolish”和“food”匹配,但与“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 年 1 月 1 日之前的所有日期的数据,但不会返回 2018 年 1 月 1 日的数据。 |
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 年 5 月 10 日 00:00:00 至 2018 年 5 月 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 年 5 月期间的整个月) |
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 日 09: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 年 5 月 17 日 19:00 至 2018 年 5 月 18 日 18:59) |
24 hours ago for 1 hour |
一天中 24 小时持续 1 小时(2018/05/17 18:00 至 2018/05/17 18:59) |
天
示例 | 说明 |
---|---|
today |
当前日期(2018 年 5 月 18 日 00:00 至 2018 年 5 月 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 年 5 月 11 日 00:00 至 2018 年 5 月 17 日 23:59) |
today for 7 days |
自今天起的 7 天之后(从 2018/05/18 00:00 到 2018/05/24 23:59) |
last 3 days |
2 天前至当天结束(2018 年 5 月 16 日 00:00 至 2018 年 5 月 18 日 23:59) |
7 days from now |
未来 7 天(2018 年 5 月 25 日 00:00 至 2018 年 5 月 25 日 23:59) |
周
示例 | 说明 |
---|---|
1 week |
本周本周顶部(2018 年 5 月 14 日 00:00 至 2018 年 5 月 20 日 23:59) |
this week |
本周本周顶部(2018 年 5 月 14 日 00:00 至 2018 年 5 月 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 年 5 月 31 日 23:59) |
this month |
“0 个月前”的同义词(2018/05/01 00:00 至 2018/05/31 23:59) |
2 months |
过去两个月(2018 年 4 月 1 日 00:00 至 2018 年 5 月 31 日 23:59) |
last month |
2018 年 4 月全年 |
2 months ago |
2018 年 3 月全年 |
before 2 months ago |
2018 年 3 月 1 日之前的所有时间 |
next month |
2018 年 6 月全部 |
2 months from now |
2018/07 年全年 |
6 months from now for 3 months |
2018 年 11 月到 2019 年 1 月 |
季度
示例 | 说明 |
---|---|
1 quarter |
本季度(2018 年 4 月 1 日 00:00 至 2018 年 6 月 30 日 23:59) |
this quarter |
“0 个季度前”的同义词(2018/04/01 00:00 至 2018/06/30 23:59) |
2 quarters |
过去两个季度(2018 年 1 月 1 日 00:00 至 2018 年 6 月 30 日 23:59) |
last quarter |
整个第一季度(2018 年 1 月 1 日 00:00 至 2018 年 3 月 31 日 23:59) |
2 quarters ago |
去年第 4 季度(2017 年 1 月 1 日 00:00 至 2017 年 12 月 31 日 23:59) |
before 2 quarters ago |
去年第 4 季度之前的所有时间 |
next quarter |
所有下一季度(2018 年 7 月 1 日 00:00 至 2018 年 9 月 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 年 1 月 1 日 00:00 至 2018 年 12 月 31 日 23:59) |
last year |
2017 年全年 |
2 years ago |
2016 年全年 |
before 2 years ago |
2016 年 1 月 1 日之前的所有时间(不包括 2016 年 1 月 1 日至 2016 年 5 月 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
的数字过滤器表达式的语法可能不够直观。如果第一个过滤条件包含NOT
,且所有其他过滤条件均不包含NOT
,则所有否定条件均为否定。如需了解详情,请参阅以下示例。
示例 | 说明 |
---|---|
5 |
正好 5 |
NOT 5 |
是任何值,但正好是 5 |
1, 3, 5, 7 |
(即 1、3、5 或 7)之一 |
NOT 66, 99, 4 |
不是 66、99 或 4 中的任意一个值 |
>1, NOT 2, <100 |
大于 1,不为 2 且小于 100 |
NOT >1, 2, <100 |
小于或等于 1,不为 2 且大于或等于 100(Looker 认识到这是不可能出现的情况,而是编写 SQL `IS NULL`) |
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(含 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) |
位置既具有非 null 纬度,也具有非 null 经度(当用作 LookML 过滤条件表达式的一部分时,请将 NOT NULL 放在引号中,如 filters 文档页面中所示) |
-NULL (works the same as NOT NULL) |
位置既具有非 null 纬度,也具有非 null 经度(当用作 LookML 过滤条件表达式的一部分时,请将 -NULL 放在引号中,如 filters 文档页面中所示) |
NULL |
location 的 null 纬度和/或 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 信息中心过滤条件和信息中心元素过滤条件中。