Looker 过滤器表达式

过滤器表达式是一种过滤 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 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 年 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}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 年 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 值。

示例 说明
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 的数字过滤器表达式的语法可能不够直观。如果第一个过滤条件包含 NOT,且所有其他过滤条件均不包含 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, <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 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(含 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) 位置既具有非 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 信息中心过滤条件信息中心元素过滤条件中。