Looker 过滤条件表达式

过滤器表达式是过滤 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 weekthis monththis quarterthis 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}beforeafter 关键字一起使用。例如,表达式 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 值。

示例 说明
yesYes 字段评估结果为 true

Looker 开发者:对于 type: yesno 维度,请使用小写,对于 filters 参数(例如在测量中使用always_filter中使用的参数),使用大写
noNo 字段评估结果为 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
!=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 AND <=10
5.5 或更高,但也不超过 10
NOT 3 to 80.44
<3 OR >80.44
小于 3 或大于 80.44
1 to
>=1
大于或等于 1
to 10
<=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 < 3x > 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 信息中心过滤条件信息中心元素过滤条件