Looker 过滤表达式

过滤条件表达式是一种高级的 Looker 查询过滤方式,本页介绍了如何编写过滤条件表达式。在 Looker 的“探索”部分,您可以通过添加过滤条件并选择匹配(高级)选项来使用这些过滤条件。在 LookML 中,它们也用于接受 filter 参数的元素。

字符串

示例 说明
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”结尾,与“快餐”匹配
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
  • 如需在过滤条件中将逗号与匹配(高级)选项一起使用,请在逗号前面添加转义字符 ^。例如: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 年 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/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 小时前同一小时的 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 年 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 第一季度(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)

示例 说明
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 文档页面所示)

支持的度量单位

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

  • 英尺
  • 公里
  • Miles

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

用户属性值

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

{{ _user_attributes['name_of_attribute'] }}

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


sf_{{_user_attributes['salesforce_username']}}

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