Looker 过滤表达式

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

在 LookML 中使用过滤表达式时,您应将表达式用引号引起来(请参阅 filters 文档页面了解正确用法)。这对于 NULL 等逻辑值尤为重要。

在 Looker 的“探索”部分中使用过滤表达式时,您无需将表达式用引号引起来。

授予访问权限不支持过滤表达式。如需了解详情,请参阅 access_grant 文档页面。

字符串

字符串过滤条件中的匹配项取决于模型文件中的 case_sensitive 设置,以及您的方言是否支持区分大小写。例如,如果在模型中启用了 case_sensitive,则表达式 FOO%不与“food”一词匹配。如果 case_sensitive 未启用,或者您的方言不支持区分大小写,则表达式 FOO% 将与“food”一词匹配。

示例 说明
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(当它用作 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”开头或与“food”完全匹配,与“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 内容使用自定义深入分析功能时,您可能还需要在字符串过滤条件中转义或包含特殊字符。如需了解详情,请参阅 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。

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

组合 示例 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 年 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 年 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/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/05/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/05/17 19:00 到 2018/05/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 年 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/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/05/14 00:00 至 2018/05/20 23:59)
this week 本周顶部(2018/05/14 00:00 至 2018/05/20 23:59)
before this week 直到本周结束(2018 年 5 月 14 日 00:00 之前)
after this week 本周结束后的任意时间(2018/05/14 00:00 及以后)
next week 下个星期一(2018 年 5 月 21 日 00:00 到 2018 年 5 月 27 日 23:59)
2 weeks 一周前的星期一之后(2018/05/07 00:00 到 2018/05/20 23:59)
last week “1 周前”的同义词
1 week ago 一周前的星期一,之后一周(2018/05/07 00:00 到 2018/05/13 23:59)

示例 说明
1 month 当月(2018/05/01 00:00 至 2018/05/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/04 年全年
2 months ago 2018/03 年全年
before 2 months ago 2018 年 3 月 1 日之前的所有时间
next month 2018/06 年全年
2 months from now 2018/07 全年
6 months from now for 3 months 2018 年 11 月至 2019 年 1 月

季度

示例 说明
1 quarter 当前季度(2018/04/01 00:00 至 2018/06/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 整个第 1 季度(2018 年 1 月 1 日 00:00 至 2018 年 3 月 31 日 23:59)
2 quarters ago 去年第 4 季度全部(2017/010/01 00:00 至 2017/12/31 23:59)
before 2 quarters ago 去年第 4 季度之前所有时间
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)

如果您的 Looker 开发者使用财年指定,那么您可以在这些表达式中输入 fiscal,以使用财政季度(而不是日历季度)。例如,您可以使用 last fiscal quarter

示例 说明
1 year 当前年全年(2018/01/01 00:00 到 2018/12/31 23:59)
this year 当前年全年(2018/01/01 00:00 到 2018/12/31 23:59)
next year 之后一年中的所有时间(2019/01/01 00:00 到 2019/12/31 23:59)
2 years 过去两年内(2017/01/01 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 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 之间的数字(含 0 和 9)或 20 到 29(含 0 和 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(当用作 LookML 过滤器表达式的一部分时,请将 NULL 括在引号中,如 filters 文档页面中所示)

支持的衡量单位

要针对特定位置周围的区域进行过滤,您可以使用以下单位:

  • 英尺
  • 公里
  • 英里

不支持单数度量单位。例如,针对一英里半径的过滤应写为 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 信息中心过滤条件信息中心元素过滤条件中。