Looker 过滤表达式

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

字符串

示例 说明
FOO 等于“FOO”,
FOO,BAR 等于“FOO”或“BAR”,
%FOO% 包含“FOO”,与“buffoon”和“快餐”匹配
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”以外的任何值),匹配“pizza”“trash”“fun”,但匹配“foo”
-FOO,-BAR 不等于“FOO”或“BAR”,匹配除“FOO”和“BAR”以外的任何值
-%FOO% 不包含“FOO”,与“buffoon”或“快餐”不匹配
-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
  • 如需在过滤器中使用 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 包含前 3 个完整天,但不包含当前非整天。如需了解详情,请参阅相对日期部分。

  • {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。

以下是所有可能的日期过滤条件组合:

组合 示例 Notes
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 月 5 日以及 2018 年 10 月 5 日之后的所有日期的数据。
{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/05/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/05 月份)
2018/05 for 2 months 在 2018/05 和 2018/06 这整月内
2018/05/10 05:00 for 5 hours 2018/05/10 05:00:00 至 2018/05/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/05/18 Friday, 2018/05/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/03 整年
before 2 months ago 所有时间(2018/03/01 之前)
next month 2018/06 年全年
2 months from now 2018/7 年全年
6 months from now for 3 months 2018/11 至 2019/01

季度

示例 说明
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 去年第四季度之前的所有时间
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)

示例 说明
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 location 的纬度和/或经度为 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 信息中心过滤条件信息中心元素过滤条件中。