Looker 过滤表达式

过滤表达式是一种过滤 Looker 查询的高级方法。您可以通过以下方式使用过滤条件表达式:

  • 在 Looker 的“探索”部分,您可以添加过滤条件,选择匹配(高级)选项,然后输入此页面上列出的其中一个表达式作为过滤条件类型的过滤条件值。
  • 在接受 filter 参数的 LookML 元素中。

此页面列出了您可以在 Looker 探索中使用匹配(高级)条件选项的过滤条件中输入的值。根据过滤条件类型和您输入的过滤条件值,Looker 可能会将匹配(高级)选项转换为可能更合适的过滤条件。

有关过滤表达式的须知事项

使用 Looker 过滤条件表达式时,请注意以下几点:

  • 当 Looker 连接器将 Looker 探索作为数据源引用,并且过滤条件采用匹配(高级)条件时,Looker Studio 中的某些过滤条件类型也支持此页面上的过滤表达式。匹配(高级)条件在 Looker Studio 中的行为与在 Looker 探索中的行为略有不同。Looker 可能会根据用户输入将匹配(高级)条件转换为更合适的条件。不过,当用户的输入不适合 Looker Studio 支持的其他过滤条件时,Looker Studio 会使用匹配(高级)选项作为兜底条件,但不会转换该条件。
  • 在探索中,基本过滤条件使用的一些短语与本页面上记录的过滤条件表达式的含义不同。
  • 在 LookML 中使用过滤表达式时,请将表达式放在英文引号中(如需了解正确用法,请参阅 filters 文档页面)。对于 NULL 等逻辑值,这一点尤为重要。在 Looker 的“探索”部分中使用过滤条件表达式时,您无需将表达式放在英文引号中。
  • 访问权限授予不支持过滤表达式。如需了解详情,请参阅 access_grant 文档页面。

每种过滤条件类型的过滤表达式

在 Looker 探索中使用匹配(高级)条件选项的过滤条件中,输入以下示例作为过滤条件值。以下过滤条件类型支持过滤表达式:

字符串

示例 说明
FOO 完全等于“FOO”
FOO,BAR 等于“FOO”或“BAR”,完全相等
%FOO% 包含“FOO”,匹配“buffoon”和“fast food”
FOO% 以“FOO”开头,匹配“foolish”和“food”,但不匹配“buffoon”或“fast food”
%FOO 以“FOO”结尾,匹配“buffoo”和“fast foo”,但不匹配“buffoon”或“fast food”
F%OD 以“F”开头,以“OD”结尾,与“fast food”匹配
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 字符串不为空(至少包含一个字符)
-NULL 列的值不为 null(当它用作 LookML 过滤表达式的一部分时,请将 -NULL 放在英文引号中,如 filters 文档页面所示)
FOO%,BAR 以“FOO”开头或完全是“BAR”,匹配“food”和“bar”,但不匹配“barfood”
FOO%,-FOOD 以“FOO”开头,但不是“FOOD”
_UF 包含任意单个字符,后跟“UF”,匹配“buffoon”

在字符串过滤器中包含特殊字符

请注意以下有关在字符串过滤条件中添加特殊字符的规则:

  • 如需包含 "%_,请添加转义字符 ^ 作为前缀。例如:^"^%^_
  • 如需添加前导 -,请将其转义为 ^-。只有当 - 是前导字符时才需要转义;如果 - 位于字符串内,则无需转义。
  • 如需包含 ^,请将其转义为 ^^
  • 如需在常规界面字符串过滤条件中添加英文逗号,请在英文逗号前面加上反斜杠字符 \。例如:Santa Cruz\, CA
  • 如需在过滤条件中使用匹配(高级)选项包含逗号,请在逗号前添加转义字符 ^。例如: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 年 1 月 1 日之前的所有日期的数据,但不会返回 2018 年 1 月 1 日的数据。
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/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 年 1 月 1 日 00:00:00 至 2018 年 12 月 31 日 23:59:59)
FY2018 从 2018 年开始的整个财政年度(如果您的 Looker 开发者指定您的财政年度从 4 月开始,则为 2018 年 4 月 1 日 00:00 至 2019 年 3 月 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 年 5 月 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 年 5 月 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 小时前同一时段的 24 小时(2018 年 5 月 17 日 19:00 至 2018 年 5 月 18 日 18:59)
24 hours ago for 1 hour 24 小时前同一小时的时长(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 年 5 月 17 日 00:00 至 2018 年 5 月 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 年 5 月 14 日 00:00 之前随时都可以
after this week 本周初(2018 年 5 月 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 年 4 月的所有内容
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 整个第 1 季度(2018 年 1 月 1 日 00:00 至 2018 年 3 月 31 日 23:59)
2 quarters ago 去年第 4 季度的所有时间(2017 年 10 月 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)

示例 说明
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) 位置具有非 null 的纬度和非 null 的经度(当用作 LookML 过滤表达式的一部分时,请将 NOT NULL 放在英文引号中,如 filters 文档页面所示)
-NULL (works the same as NOT NULL) 位置具有非 null 的纬度和非 null 的经度(当用作 LookML 过滤表达式的一部分时,请将 -NULL 放在英文引号中,如 filters 文档页面所示)
NULL 位置的纬度为 null、经度为 null,或两者均为 null(当用作 LookML 过滤表达式的一部分时,请将 NULL 放在英文引号中,如 filters 文档页面所示)

支持的度量单位

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

  • 英尺
  • 公里
  • 英里

不支持单数形式的衡量单位。例如,过滤半径为 1 英里的位置应写为 within 1 miles of 36.97, -122.03

用户属性值

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

{{ _user_attributes['name_of_attribute'] }}

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


sf_{{_user_attributes['salesforce_username']}}

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