创建 Looker 表达式

如果您的管理员已向您授予创建表计算权限,那么您可以使用以下功能快速执行常见函数,而无需创建 Looker 表达式:

  • 快捷计算:用于对探索数据表中的数字字段快速执行常用计算

如果您的管理员已授予您创建自定义字段权限,那么您无需创建 Looker 表达式,就可以使用以下功能快速执行常见功能:

  • 自定义群组,用于在自定义标签下快速对值进行分组,而无需在 sql 参数或 type: case 字段中开发 CASE WHEN 逻辑

  • 自定义分箱,用于对自定义层级中的数字类型维度进行分组,而无需开发 type: tier LookML 字段

Looker 表达式

Looker 表达式(有时称为 Lexp)用于对以下内容执行计算:

Looker 表达式由以下元素组合构建而成:

  • NULL:值 NULL 表示没有数据,这在您想要检查内容是否为空或不存在时非常有用。

  • 常量:常量是您提供的保持不变的值。数字(例如 7)或字符串(例如 Completed)都是常量。

  • Looker 字段:对 Looker 字段的引用,包括维度、测量值和表计算。

  • Looker 运算符:有几种类型的运算符(在 Looker 函数和运算符文档页面中列出):

    • 数学运算符(例如 +-*/
    • 比较运算符(如 =><=
    • 逻辑运算符(如 ANDORNOT
  • Looker 函数:这些函数在本质上与 Excel 函数类似。函数可让您以复杂的方式转换数据或引用数据。Looker 函数和运算符文档页面列出了所有可用的函数。

创建 Looker 表达式

表计算自定义字段自定义过滤条件使用 Looker 表达式编辑器。在您输入表达式时,Looker 会提示您提供您可能想要使用的函数、运算符和字段名称。

实用提示:如果您是 Looker 开发者,并且要创建数据测试来验证模型的逻辑,则可以使用 Looker 表达式编辑器构建 Looker 表达式,然后将表达式复制到数据测试的 expression 参数中。

正在查看所有建议

通过创建表格计算自定义字段自定义过滤条件,在“探索”中访问 Looker 表达式编辑器。

输入空格后,您会看到可供选择的所有字段、函数和运算符的列表。如果“探索”中当前已选择某个字段,Looker 会在字段左侧显示一个黑色圆圈,并在列表顶部显示该字段。

开始输入即可缩短列表以显示您感兴趣的内容。

自定义字段编辑器会显示当前正在使用的“探索”字段(如果这些字段与自定义字段的功能兼容)。

添加字段

如需在表达式中添加 Looker 字段,请开始输入字段名称。输入时,编辑器会将搜索范围缩小到包含您输入的内容的字段和函数列表。您可以输入该字段在“探索”页面上显示的名称,也可以使用其 LookML 名称(如果您知道此名称)。

当您从列表中选择一个字段时,Looker 会使用 LookML 名称(格式为 ${view_name.field_name})将其添加到表达式中。这可确保您的所有字段在表达式中都具有唯一的名称。

您可以在本页面的使用字段部分中阅读有关使用字段的更详细说明。

将总计值相加

如果您要根据显示总计的“探索”创建表达式,则还可以在表达式中添加列总计和行总计。编辑器中会显示列总计,并在字段名称的 LookML 迭代前面显示单词 Total。例如,对于名为计数的字段,Looker 会将该字段的列总计名称指定为 Count - Total

总计的 LookML 名称采用 ${view_name.field_name:total} 格式,其中 :total 添加到字段名称末尾。对于行总计,编辑器中的字段名称前面会显示单词 Row Totals;而在字段的 LookML 名称中,:row_total 会添加到字段名称的末尾。

添加运算符

如果需要,您可以向表达式中添加 ANDORNOT 等逻辑运算符。通常,AND 运算符会先于 OR 运算符求值,但您可以使用括号替换此行为。您还可以使用比较运算符(例如 >=<=)和数学运算符(例如 +*)。

当光标位于运算符上时,在信息窗格中,正确用法的备注会显示在相应表达式的右侧。

如需详细了解如何使用运算符,请参阅本页面的使用运算符部分。

添加函数

如需在表达式中添加 Looker 函数,请开始输入函数的名称。输入时,编辑器会将搜索范围缩小到包含您输入的内容的字段和函数列表。

函数可以由需要某种类型(例如字段、数字或“是/否”)的参数(或变量)构成。当光标位于函数上时,您可以在信息窗格中查看表达式右侧显示的备注,了解您需要提供的参数及其类型。

如需查看 Looker 提供的函数的完整列表,请参阅 Looker 函数和运算符文档页面。

您可以在本页面的使用函数部分中详细了解如何使用函数。

使用错误提示和信息窗格

在您输入表达式时,Looker 会在右侧显示一个信息窗格。此窗格提供文档和建议,尤其是当您的表达式出现错误时。

编辑器提供以下功能:

  • 突出显示错误:Looker 会为表达式中未完成的部分添加红色下划线。

  • 建议和错误详情:信息窗格的顶部提供了有关接下来在表达式中添加什么内容的建议。如果出现错误,该说明会说明发生错误的原因。如果存在多个错误,系统将根据您光标的位置向您显示错误。

  • 文档:在信息窗格的下半部分,Looker 会根据光标位置,显示有关您使用的函数或运算符的文档。例如,当您输入 if() 函数的第一个参数时,Looker 会提供第一个参数的求值结果为 true 或 false 的信息。您可以点击该部分中的函数名称,前往该函数的文档。

添加评论

您可以在 Looker 表达式中添加注释,方法是以 # 作为注释行的开头。

使用字段

有时,您需要在表达式中使用某个字段的值(维度、测量或表计算)。您可能想要将该字段的值添加到其他内容、检查它是否具有特定值、将其包含在函数中,或者使用其他许多可能性。

上文所述,您可以在表达式编辑器中输入字段名称,Looker 会帮助您找到引用该字段的正确方法。向表达式添加字段时,Looker 会使用该字段的 LookML 标识符(类似于 ${view_name.field_name})。此标识符并不总是与字段选择器中的字段名称匹配,但如果您不知道名称是什么,也没有关系。输入字段选择器中显示的字段名称,表达式编辑器会显示字段选择器名称和 LookML 标识符。

您可能需要通过以下几种方式获取值:

  • 从同一行获取值:使用字段的最基本方法是直接引用该字段。例如,您的表达式可以使用 ${product.category}。当您执行此操作时,您的意思是“对于任何给定行,从该行中抓取产品类别”。

  • 从不同行获取值:您也可以从其他行获取字段的值。例如,您可能需要这样的逻辑:“对于任何给定行,都从行获取产品类别。为此,您可以使用偏移函数(请参阅此位置函数列表)。offset 函数可能如下所示:offset(${product.category}, -1)

  • 从透视列获取值:您还可以从透视列获取值。例如,您可能希望逻辑“对于任何给定的行,从第一个透视列获取总销售额”。要使用透视列,您需要使用数据透视函数(请参阅此数据透视函数列表)。数据透视函数可能如下所示:pivot_index(${order.total_sales}, 1)

  • 从行或列中获取总计值:如果您向探索添加了总计值,则可以通过在字段名称中添加 :total(对于列总计)或 :row_total(对于行总计)来获取列或行的总值,格式为 ${field_name:total}。例如,如果您想了解订单总数的百分比,可以创建如下表计算:${orders.count} / ${orders.count:total}

引用自定义过滤条件中的字段时,只能使用维度,而不能使用测量、总计或表计算。此外,您不能引用其他行或透视列中的值。这是因为 Looker 必须能够将您的过滤条件转换为 SQL,以便检索您的数据。

自定义过滤条件自定义字段并非支持所有时间和日期选项。有关详情,请参阅维度组参数说明。

表计算中引用字段时,您可以引用任何维度、测量或其他表计算中的任何值。

使用运算符

Looker 表达式可以包含逻辑运算符、比较运算符和数学运算符,以创建不同的条件:

  • 逻辑运算符(如 ANDORNOT
  • 比较运算符(例如 ><
  • 数学运算符(例如 +-

除非使用括号另行指定,否则系统会优先考虑 AND 逻辑,然后再考虑 OR 逻辑。以下表达式(没有额外的括号):

if (
  ${order_items.days_to_process}>=4 OR
  ${order_items.shipping_time}>5 AND
  ${order_facts.is_first_purchase},
"review", "okay")

计算结果为:

if (
  ${order_items.days_to_process}>=4 OR
  (${order_items.shipping_time}>5 AND ${order_facts.is_first_purchase}),
"review", "okay")

在 Looker 中,您应使用 yesno,而不是 truefalse。这些逻辑常量与括在引号中的 "yes""no" 一词不同。如需了解详情,请参阅逻辑常量说明

使用函数

Looker 表达式通常包含一个或多个函数,可帮助您检索特定数据或计算某些内容。它们在本质上与 Excel 函数类似。

函数采用名称形式,后跟两括号,例如:my_function()。您可能需要在这些括号内提供信息,并用英文逗号分隔。这些信息称为“参数”,如下所示:my_function(argument_1, argument_2)

例如,now 函数不接受任何参数,而是提供当前的日期和时间。您可以按如下方式使用:now()

round 函数接受一个参数,该参数是一个数字。您可以按如下方式使用:round(3.2)。结果为 3

您可以通过以下两种方式了解需要提供哪些参数(如果有):

  • 表达式编辑器右侧显示的信息窗格提供了有关您正在编写的函数的一些文档。您可以点击函数的名称以转到其文档。
  • 您也可以直接前往 Looker 函数和运算符文档页面,然后查找要使用的函数。

contains 函数为例,其文档如下所示:

函数 语法 目的
包含 contains(string, search_string) 如果 string 包含 search_string,则返回 Yes,否则返回 No

您可以看到,两个参数是必需参数。它们分别名为 stringsearch_string,但这并不意味着您需要在函数中输入确切的单词“string”和“search_string”。这些只是您要用内容替换的参数的名称。查看用途后,我们看到 string 应该是要搜索的字段或其他值,而 search_string 是我们要搜索的内容。例如:

contains(${customer.feedback_text}, "great")

如果客户反馈中出现“great”一词,此函数给出的结果为 Yes。否则,结果为 No

您可以将函数放在其他函数内来处理复杂的逻辑。只要内部函数的结果适合外部函数的参数,它就可以正常运行。例如:

contains(
  if(
    is_null(${customer.feedback_text}),
    ${customer.comment_text},
    ${customer.feedback_text}
  ),
"great")

在这里,我们将 is_null 函数嵌套在 if 函数中,而该函数本身就位于 contains 函数中。其运作方式如下:

  1. is_null() 函数用于检查客户反馈文本。
  2. 接下来,if() 函数使用该结果并返回客户反馈文本(如果有),否则返回客户评论文本。
  3. 最后,contains() 函数会使用 if() 函数返回的文本,并在该文本中搜索“great”一词。

从逻辑上讲,该表达式的意思是:“如果有客户反馈,则在其中进行搜索。如果不是,请在客户评论中搜索。在这两种情况下,都请查找“great”一词。

自定义过滤条件自定义字段可以使用大多数函数,但无法使用一些数学函数或引用其他行或数据透视列的函数。如需了解您可以使用哪些函数,请参阅 Looker 函数和运算符文档页面。

您可以在表计算中使用任何函数。您还可以在数据测试expression 参数中使用任何函数,因为 expression 参数本质上是导致 yesno(布尔值)的表计算。