Looker 过滤表达式

过滤表达式是过滤 Looker 查询的高级方法,本页面介绍了如何编写这些查询。在 Looker 的“探索”部分中,您可以添加过滤条件并选择匹配项(高级)选项,以便使用这些条件。这些变量还会在 LookML 中用于采用 filter 参数的元素。

字符串

示例 说明
FOO 等于“FOO”,
FOO,BAR 等于“FOO”或“BAR”
%FOO% 包含“FOO”,与“buffoon”匹配和“快餐”
FOO% 以“FOO”开头,匹配“foolish”和“food”,但不匹配“buffoon”或“fast food”
%FOO 以“FOO”结尾,匹配“buffoo”和“Fast foo”而不是“水牛”或“快餐”
F%OD 以“F”开头且以“OD”结尾,与“快餐”匹配
EMPTY 字符串为空(包含零个字符)或为 null(无值)
NULL 值为 null(当该值用作 LookML 过滤条件表达式的一部分时,请将 NULL 括在引号中,如 filters 文档页面中所示)
-FOO 不等于“FOO”(是除“FOO”以外的任何值),与“pizza”“trash”“fun”匹配而不是“foo”
-FOO,-BAR 不等于“FOO”或“BAR”,匹配“FOO”和“BAR”以外的任何值
-%FOO% 不包含“FOO”,与“buffoon”或“fast food”不匹配
-FOO% 不以“FOO”开头,不匹配“foolish”或“food”
-%FOO 结尾不是“FOO”,与“buffoo”不匹配或“Fast foo”
-EMPTY 字符串不为空(至少包含 1 个字符)
-NULL 列的值不为 null(如果将其用作 LookML 过滤条件表达式的一部分,请将 -NULL 括在引号中,如 filters 文档页面所示)
FOO%,BAR 开头为“FOO”或为“BAR”完全匹配,与“food”匹配与“bar”匹配但不包括“barfood”
FOO%,-FOOD 以“FOO”开头,但不是“FOOD”
_UF 包含任意单个字符后跟“UF”,匹配“buffoon”

在字符串过滤条件中添加特殊字符

在字符串过滤器中添加特殊字符时,请注意以下规则:

  • 如需包含 "%_,请在前缀中添加转义字符 ^。例如:^"^%^_
  • 如需添加前导 -,请将其转义为 ^-。只有当 - 是开头字符时,才需要执行此操作;如果 - 位于字符串内,则无需对其进行转义。
  • 如需包含 ^,请将其转义为 ^^
  • 如需在常规界面字符串过滤条件中添加英文逗号,请在英文逗号前面加上反斜杠字符 \。例如:Santa Cruz\, CA
  • 如需在过滤器中使用 matches (advanced) 选项添加英文逗号,请在英文逗号中添加转义字符 ^ 作为前缀。例如:Santa Cruz^, CA
  • 如需在 LookML 的过滤条件表达式中包含英文逗号,请在前缀中添加转义字符 ^。例如:
  field: filtered_count {
      type: count
      filters: [city: "Santa Cruz^, CA"]
    }

日期和时间

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 及之后的所有日期的数据。
{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 年 5 月 10 日 00:00:00 及之后
before 2018/05/10 2018 年 5 月 10 日 00:00:00 之前
2018/05 2018 年 5 月整月
2018/05 for 2 months 在 2018/05 和 2018/06 这整月内
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 年 1 月 1 日 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 年 5 月 18 日星期五 18:30:02。在 Looker 中,每周从星期一开始算起,除非您使用 week_start_day 更改相应设置。

示例 说明
1 second 当前秒数(2018/05/18 18:30:02)
60 seconds 60 秒前到 60 秒后(2018 年 5 月 18 日 18:29:02 到 2018 年 5 月 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 年 5 月 18 日 17:31:00 至 2018 年 5 月 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 小时的同一小时(2018 年 5 月 17 日 19:00 至 2018 年 5 月 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 年 5 月 18 日 23:59)
2 days 昨天和今天(2018 年 5 月 17 日 00:00 至 2018 年 5 月 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 年 5 月 18 日 00:00 至 2018 年 5 月 24 日 23:59)
last 3 days 过去 2 天到当天结束(2018 年 5 月 16 日 00:00 至 2018 年 5 月 18 日 23:59)
7 days from now 未来 7 天(2018 年 5 月 18 日 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/05/14 00:00 及之后)
next week 从下一个星期一开始的 1 周(2018 年 5 月 21 日 00:00 至 2018 年 5 月 27 日 23:59)
2 weeks 一周前(即 2018 年 5 月 7 日 00:00 至 2018 年 5 月 20 日 23:59)
last week “1 周前”的同义词
1 week ago 一周前 - 今后 1 周(2018 年 5 月 7 日 00:00 至 2018 年 5 月 13 日 23:59)

示例 说明
1 month 当月(2018 年 5 月 1 日 00:00 至 2018 年 5 月 31 日 23:59)
this month “0 个月前”(2018 年 5 月 1 日 00:00 至 2018 年 5 月 31 日 23:59)的同义词
2 months 过去两个月(2018 年 4 月 1 日 00:00 至 2018 年 5 月 31 日 23:59)
last month 2018/04 年全年
2 months ago 2018 年 3 月的所有日期
before 2 months ago 2018 年 3 月 1 日之前的所有时间
next month 2018 年 6 月的所有日期
2 months from now 2018 年 7 月的所有日期
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 年 4 月 1 日 00:00 至 2018 年 6 月 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 去年第四季度(2017/010/01 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)

示例 说明
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 中过滤 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)可用于指定范围。数字过滤条件还可以使用代数间隔符号来过滤数字字段。

示例 说明
5 正好为 5
NOT 5

<>5

!=5
是任意值,但不能是 5
1, 3, 5, 7 是值 1、3、5 或 7 中的一个,
NOT 66, 99, 4 不是 66、99 或 4 这三个值之一
>1 AND <100, NOT 2 大于 1 且小于 100,不是 2
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 不包括在内,且无穷大始终表示为“开放”(未包含在内)。inf 可以省略,(500, inf) 可以写为 (500,)
(-inf, 10] 解释为 x <= 10,其中 10 包括在内,且无穷大始终表示为“开放”(未包含在内)。可以省略 inf,并将 (-inf, 10] 写为 (,10]
[0,9],[20,29] 介于 0 和 9(含)之间的数字或 20 到 29(含)之间的数字
[0,10],20 0 到 10(含)或 20
NOT (3,12) 会被解释为 x < 3x > 12

位置

位置过滤器表达式基于纬度和经度,但可以使用一些自然语言来定义搜索范围的框和圆圈。

示例 说明
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 位置的纬度或经度为 null,或二者均为 null(将 NULL 用作 LookML 过滤条件表达式的一部分时,请将 NULL 括在引号中,如 filters 文档页面所示)

支持的度量单位

如需过滤特定地点周围的区域,您可以使用以下单位:

  • 英尺
  • 公里
  • 英里

不支持单个度量单位。例如,对一英里半径进行过滤应写入 within 1 miles of 36.97, -122.03

用户属性值

如需在过滤条件表达式中使用用户属性的值,请使用数据库方言所需的语法,通过 _user_attributes Liquid 变量引用用户属性:

{{ _user_attributes['name_of_attribute'] }}

例如,假设您需要对 salesforce_username 用户属性的值应用 sf_ 前缀,因为这是值在数据库中的存储方式。若要向用户属性值添加前缀,您可以在相关字段上添加一个“matches(高级)”过滤条件,并在过滤条件表达式中使用 _user_attributes Liquid 变量,如下所示:


sf_{{_user_attributes['salesforce_username']}}

您可以使用相同的模式将用户属性插入 LookML 仪表板过滤条件仪表板元素过滤条件中。